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?

Antworten:


3

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):

$hash_string256 $HOST
 113
$hash_string256 $HOST 127
 240

Um eine Verbindung tmuxherzustellen, können Sie ein Skript verwenden, das gestartet und konfiguriert wird tmux.

#!/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

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.

Für keine GNU-Systeme

Wenn Ihr System md5anstelle md5sumder Leitung hat

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

kann durch ersetzt werden

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

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.
Caleb
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.