Setel warna garis status tmux berdasarkan nama host

10

Saya ingin tmuxmemilih warna secara dinamis berdasarkan nama host mesin. Karena saya berbagi tmux.confdi beberapa mesin, menetapkan warna yang unik untuk masing-masing host tersebut akan sangat berguna secara visual, terutama ketika mengerjakan lebih dari satu mesin secara bersamaan. Apakah ini bisa dilakukan?

Sridhar Ratnakumar
sumber

Jawaban:

3

Saya ingin fitur ini juga. Saya pada dasarnya menggabungkan semuanya menjadi .tmux.conf ini

# 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

Saya menghapus menggunakan bckarena saya tidak memilikinya di git-bash saya. Jadi saya ingin itu bekerja pada sistem linux saya dan windows dengan cygwin tanpa menambahkan hal-hal tambahan.

DrMilk
sumber
Takut ini mungkin pertanyaan konyol, tapi bagaimana cara tepatnya menggunakannya? Saya menyalin / disisipkan tapi setelah reload saya .tmux.confaku "cut -c3- ~/.tmux.conf | bash -s apply_configuration" returned 1. Meskipun demikian, status bar saya memang berubah merah !!!
3

Saya datang dengan fungsi shell berikut:

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
}

Fungsi ini dapat digunakan seperti ini (Hasilnya benar jika $HOSTada LOL):

$hash_string256 $HOST
 113
$hash_string256 $HOST 127
 240

Untuk menghubungkannya dengan tmuxAnda dapat menggunakan skrip yang dimulai dan mengkonfigurasi 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

Untuk hostname, LOLitu akan mengatur status-fgto colour113dan status-bgto colour240. Angka 127 in $(hash_string256 $HOST 127)ada di sana sehingga latar belakang tidak akan sama dengan warna latar depan dan terpisah satu sama lain.

Tanpa sistem GNU

Jika sistem Anda memiliki md5alih-alih md5sumjalur

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

dapat diganti dengan

hash_value=$(printf "%s" "$1" | md5 | tr "a-f" "A-F")
Raphael Ahrens
sumber
Jika seseorang mengetahui cara untuk menggunakan fungsi di dalam tmux.confsaya akan sangat menghargainya.
Raphael Ahrens
1
Konfigurasi tmux saya mencakup cara untuk mendefinisikan dan menjalankan fungsi shell sewenang-wenang yang terdapat di dalam file tmux conf.
Caleb
@ Caleb menarik. Saat ini saya tidak punya waktu untuk mengeditnya untuk jawabannya. Tapi saya akan menambahkannya.
Raphael Ahrens
1
Anda mungkin ingin menjadikannya sebagai akhiran alternatif untuk jawaban daripada memasukkannya sebagai jawaban utama karena cenderung membingungkan siapa pun yang tidak memiliki beberapa shell foo canggih di bawah ikat pinggang mereka. Solusinya adalah peretasan yang melibatkan dokumen di sini dan untuk mendapatkan file konfigurasi dan skrip yang dapat dieksekusi dari file yang sama, jadi mengimplementasikan ini memerlukan perubahan pada seluruh file konfigurasi, bukan hanya menambahkan beberapa baris. Melakukannya dengan benar tidak akan untuk semua orang, jadi beri mereka cara untuk mengedit konfigurasi reguler mereka menggunakan skrip eksternal sebelum menyarankan itu dapat dihancurkan bersama-sama.
Caleb