Définir la couleur de la ligne d'état tmux en fonction du nom d'hôte
10
Je voudrais tmuxchoisir une couleur dynamiquement en fonction du nom d'hôte de la machine. Étant donné que je partage mon tmux.confsur plusieurs machines, l'attribution d'une couleur unique à chacun de ces hôtes serait pratique visuellement, en particulier lorsque vous travaillez sur plusieurs des simultanément. Est-ce faisable?
Je voulais aussi cette fonctionnalité. J'ai fondamentalement tout fusionné dans ce fichier .tmux.conf
# cat <<__DATA__ >/dev/null
# Embed shell scripts
set -g status-utf8 on
set -g utf8 on
set -g default-terminal "screen-256color"
run "cut -c3- ~/.tmux.conf | bash -s apply_configuration"
# __DATA__
#
# apply_configuration() {
# tmux set -g status-bg colour$(hash_string256 $(hostname))
# }
# hash_string256() {
# hash_value=$(printf "%s" "$1" | md5sum | sed -e 's/[^[:alnum:]]\+//g' | tr "a-f" "A-F")
# if [ "x" != "x$2" ]
# then
# v2="+ $2"
# fi
# echo "$(((0x$hash_value $v2) % 255))" | tr -d "-"
# }
#
# $1
J'ai supprimé using bccar je ne l'avais pas dans mon git-bash. Ainsi, je voulais qu'il fonctionne à la fois sur mes systèmes Linux et Windows avec cygwin sans ajouter de trucs supplémentaires.
Peur que cela puisse être une question stupide, mais comment l'utiliser exactement? Je l'ai copié / collé mais après avoir rechargé mon, .tmux.confj'ai eu "cut -c3- ~/.tmux.conf | bash -s apply_configuration" returned 1. Néanmoins, ma barre d'état est devenue rouge !!!
3
Je suis venu avec la fonction shell suivante:
hash_string256() {
# Hash $1 into a number
hash_value=$(printf "%s" "$1" | md5sum |tr -d " -"| tr "a-f" "A-F")
# Add the hash with $2 and modulo 256 the result
# if $2 == "" it is 0
printf "ibase=16; (%s + %X) %% 100\n" $hash_value "$2" | bc
}
Cette fonction peut être utilisée comme ceci (les résultats sont vrais si $HOSTestLOL ):
Pour le nom d' hôte , LOLil fixerait le status-fgà colour113etstatus-bg le colour240. Le nombre 127 $(hash_string256 $HOST 127)est là, donc l'arrière-plan ne sera pas le même que la couleur de premier plan et éloigné les uns des autres.
Si quelqu'un sait comment utiliser la fonction à l'intérieur du, tmux.confje l'apprécierais.
Raphael Ahrens
1
Ma configuration tmux comprend un moyen de définir et d'exécuter des fonctions shell arbitraires autonomes contenues dans le fichier de configuration tmux.
Caleb
@Caleb intéressant. Actuellement, je n'ai pas le temps de le modifier dans la réponse. Mais je vais l'ajouter.
Raphael Ahrens
1
Vous voudrez peut-être en faire une fin alternative pour la réponse plutôt que de l'entrer comme réponse principale, car cela risque de confondre le diable de toute personne qui n'a pas de foo shell avancé sous leur ceinture. La solution est un hack impliquant here-docs et pour extraire à la fois un fichier de configuration et un script exécutable du même fichier, donc l'implémentation nécessite une modification de l' ensemble du fichier de configuration, pas seulement l'ajout de quelques lignes. Faire les choses correctement ne sera pas pour tout le monde, alors donnez-leur un moyen de modifier leur configuration régulière à l'aide de scripts externes avant de suggérer qu'elle peut être écrasée ensemble.
.tmux.conf
j'ai eu"cut -c3- ~/.tmux.conf | bash -s apply_configuration" returned 1
. Néanmoins, ma barre d'état est devenue rouge !!!Je suis venu avec la fonction shell suivante:
Cette fonction peut être utilisée comme ceci (les résultats sont vrais si
$HOST
estLOL
):Pour le connecter avec,
tmux
vous pouvez utiliser un script qui démarre et configuretmux
.Pour le nom d' hôte ,
LOL
il fixerait lestatus-fg
àcolour113
etstatus-bg
lecolour240
. Le nombre 127$(hash_string256 $HOST 127)
est là, donc l'arrière-plan ne sera pas le même que la couleur de premier plan et éloigné les uns des autres.Pour aucun système GNU
Si votre système a
md5
au lieu demd5sum
la lignepeut être remplacé par
la source
tmux.conf
je l'apprécierais.