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?

Sridhar Ratnakumar
la source

Réponses:

3

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.

DrMilk
la source
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 ):

$hash_string256 $HOST
 113
$hash_string256 $HOST 127
 240

Pour le connecter avec, tmuxvous pouvez utiliser un script qui démarre et configuretmux .

#!/bin/sh
SESSION=$USER

hash_string256() {
    hash_value=$(printf "%s" "$1" | md5sum |tr -d " -"| tr "a-f" "A-F")
    printf "ibase=16; (%s + %X) %% 100 \n" $hash_value "$2" | bc
}

tmux -2 new-session -d -s $SESSION

tmux set -g status-fg colour$(hash_string256 $HOST)
tmux set -g status-bg colour$(hash_string256 $HOST 127)

# Attach to session
tmux -2 attach-session -t $SESSION

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.

Pour aucun système GNU

Si votre système a md5au lieu de md5sumla ligne

hash_value=$(printf "%s" "$1" | md5sum |tr -d " -"| tr "a-f" "A-F")

peut être remplacé par

hash_value=$(printf "%s" "$1" | md5 | tr "a-f" "A-F")
Raphael Ahrens
la source
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.
Caleb du