Stellen Sie die Farbe der tmux-Statuszeile basierend auf dem Hostnamen ein
10
Ich möchte tmuxeine Farbe dynamisch basierend auf dem Hostnamen des Computers auswählen. Da ich meine tmux.confauf mehreren Computern teile , wäre es visuell praktisch, jedem dieser Hosts eine eindeutige Farbe zuzuweisen, insbesondere wenn an mehreren Computern gleichzeitig gearbeitet wird. Ist das machbar?
Ich wollte auch diese Funktion. Ich habe im Grunde alles in diese .tmux.conf zusammengeführt
# 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
Ich habe es entfernt, bcweil ich es nicht in meinem Git-Bash hatte. Daher wollte ich, dass es sowohl auf meinen Linux-Systemen als auch auf Windows mit Cygwin funktioniert, ohne zusätzliche Dinge hinzuzufügen.
Ich fürchte, das könnte eine dumme Frage sein, aber wie verwende ich sie genau? Ich habe es kopiert / eingefügt, aber nach dem Neuladen habe .tmux.confich es bekommen "cut -c3- ~/.tmux.conf | bash -s apply_configuration" returned 1. Trotzdem wurde meine Statusleiste tatsächlich rot !!!
3
Ich habe mir folgende Shell-Funktion ausgedacht:
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
}
Diese Funktion kann folgendermaßen verwendet werden (Die Ergebnisse sind wahr, wenn dies der Fall $HOSTist LOL):
Für den Hostnamen LOLwürde das status-fgauf colour113und status-bgauf gesetzt colour240. Die Zahl 127 in $(hash_string256 $HOST 127)ist vorhanden, sodass der Hintergrund nicht mit der Vordergrundfarbe übereinstimmt und weit voneinander entfernt ist.
Wenn jemand einen Weg kennt, die Funktion innerhalb des zu verwenden, tmux.confwürde ich es schätzen.
Raphael Ahrens
1
Meine tmux-Konfiguration enthält eine Möglichkeit, beliebige Shell-Funktionen zu definieren und auszuführen, die in der tmux conf-Datei enthalten sind.
Caleb
@Caleb interessant. Derzeit habe ich keine Zeit, die Antwort zu bearbeiten. Aber ich werde es hinzufügen.
Raphael Ahrens
1
Vielleicht möchten Sie es zu einem alternativen Ende für die Antwort machen, anstatt es als Hauptantwort einzugeben, da es wahrscheinlich jeden verwirrt, der kein fortgeschrittenes Shell-Foo unter seinem Gürtel hat. Die Lösung ist ein Hack, der Here-Docs umfasst und sowohl eine Konfigurationsdatei als auch ein ausführbares Skript aus derselben Datei herausholt. Um dies zu implementieren, muss die gesamte Konfigurationsdatei geändert und nicht nur ein paar Zeilen hinzugefügt werden. Es ist nicht jedermanns Sache, es richtig zu machen. Geben Sie ihnen daher die Möglichkeit, ihre reguläre Konfiguration mithilfe externer Skripte zu bearbeiten, bevor Sie vorschlagen, dass sie zusammengefügt werden können.
.tmux.conf
ich es bekommen"cut -c3- ~/.tmux.conf | bash -s apply_configuration" returned 1
. Trotzdem wurde meine Statusleiste tatsächlich rot !!!Ich habe mir folgende Shell-Funktion ausgedacht:
Diese Funktion kann folgendermaßen verwendet werden (Die Ergebnisse sind wahr, wenn dies der Fall
$HOST
istLOL
):Um eine Verbindung
tmux
herzustellen, können Sie ein Skript verwenden, das gestartet und konfiguriert wirdtmux
.Für den Hostnamen
LOL
würde dasstatus-fg
aufcolour113
undstatus-bg
auf gesetztcolour240
. Die Zahl 127 in$(hash_string256 $HOST 127)
ist vorhanden, sodass der Hintergrund nicht mit der Vordergrundfarbe übereinstimmt und weit voneinander entfernt ist.Für keine GNU-Systeme
Wenn Ihr System
md5
anstellemd5sum
der Leitung hatkann durch ersetzt werden
quelle
tmux.conf
würde ich es schätzen.