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?
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.
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):
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.
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ć.
.tmux.conf
dostałem"cut -c3- ~/.tmux.conf | bash -s apply_configuration" returned 1
. Niemniej jednak mój pasek statusu rzeczywiście zmienił kolor na czerwony !!!Wymyśliłem następującą funkcję powłoki:
Tej funkcji można użyć w następujący sposób (wyniki są prawdziwe, jeśli tak
$HOST
jestLOL
):Aby go połączyć
tmux
, możesz użyć skryptu, który uruchomi się i skonfigurujetmux
.W przypadku nazwy hosta ustawiłoby
LOL
tostatus-fg
nacolour113
istatus-bg
nacolour240
. 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
md5
zamiastmd5sum
liniimożna zastąpić
źródło
tmux.conf
, byłbym wdzięczny.