Ustaw kolor linii statusu tmux na podstawie nazwy hosta

10

Chciałbym tmuxwybrać kolor dynamicznie na podstawie nazwy hosta komputera. Ponieważ dzielę się nimi tmux.confna kilku komputerach, przypisywanie unikalnego koloru dla każdego z tych hostów byłoby przydatne wizualnie, szczególnie podczas pracy na więcej niż jednym z nich jednocześnie. Czy to jest wykonalne?

Sridhar Ratnakumar
źródło

Odpowiedzi:

3

Chciałem również tę funkcję. Zasadniczo połączyłem wszystko w ten plik .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

Usunąłem za pomocą, bcponieważ nie miałem go w git-bash. Dlatego chciałem, aby działał zarówno na moim systemie Linux jak i systemie Windows z cygwinem bez dodawania dodatkowych rzeczy.

DrMilk
źródło
Obawiam się, że to może być głupie pytanie, ale jak mam z niego korzystać? Skopiowałem / wkleiłem, ale po ponownym załadowaniu .tmux.confdostałem "cut -c3- ~/.tmux.conf | bash -s apply_configuration" returned 1. Niemniej jednak mój pasek statusu rzeczywiście zmienił kolor na czerwony !!!
3

Wymyśliłem następującą funkcję powłoki:

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
}

Tej funkcji można użyć w następujący sposób (wyniki są prawdziwe, jeśli tak $HOSTjest LOL):

$hash_string256 $HOST
 113
$hash_string256 $HOST 127
 240

Aby go połączyć tmux, możesz użyć skryptu, który uruchomi się i skonfiguruje 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

W przypadku nazwy hosta ustawiłoby LOLto status-fgna colour113i status-bgna colour240. Liczba 127 $(hash_string256 $HOST 127)jest tam, więc tło nie będzie takie samo jak kolor pierwszego planu i będzie od siebie bardzo daleko.

Dla żadnego systemu GNU

Jeśli twój system ma md5zamiast md5sumlinii

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

można zastąpić

hash_value=$(printf "%s" "$1" | md5 | tr "a-f" "A-F")
Raphael Ahrens
źródło
Jeśli ktoś zna sposób korzystania z funkcji wewnątrz tmux.conf, byłbym wdzięczny.
Raphael Ahrens
1
Moja konfiguracja tmux zawiera sposób definiowania i uruchamiania dowolnych funkcji powłoki zawartych w pliku conf tmux.
Caleb
@Caleb ciekawe. Obecnie nie mam czasu na edytowanie go w odpowiedzi. Ale dodam to.
Raphael Ahrens
1
Być może zechcesz zrobić z tego alternatywne zakończenie odpowiedzi, zamiast wpisywać ją jako główną odpowiedź, ponieważ może zmylić cholerstwo z nikogo, kto nie ma jakiegoś zaawansowanego foo powłoki za paskiem. Rozwiązaniem jest włamanie z udziałem tu-docs i uzyskanie zarówno pliku konfiguracyjnego, jak i skryptu wykonywalnego z tego samego pliku, więc wdrożenie tego wymaga zmiany całego pliku konfiguracyjnego, a nie tylko dodania kilku wierszy. Właściwe ustawienie nie będzie dla wszystkich, więc daj im możliwość edycji ich zwykłej konfiguracji za pomocą zewnętrznych skryptów, zanim zasugerujesz, że można je połączyć.
Caleb