ตั้งค่าสีของบรรทัดสถานะ tmux ตามชื่อโฮสต์


10

ฉันต้องการtmuxเลือกสีแบบไดนามิกตามชื่อโฮสต์ของเครื่อง เนื่องจากฉันแบ่งปันtmux.confเครื่องหลายเครื่องการกำหนดสีที่ไม่ซ้ำกันสำหรับโฮสต์แต่ละรายการนั้นจะมีประโยชน์ทางสายตาโดยเฉพาะอย่างยิ่งเมื่อทำงานกับเครื่องมากกว่าหนึ่งเครื่องพร้อมกัน เป็นไปได้หรือไม่

คำตอบ:


3

ฉันต้องการคุณสมบัตินี้เช่นกัน โดยทั่วไปฉันรวมทุกอย่างเข้ากับ. 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

ฉันลบออกโดยใช้bcเพราะฉันไม่ได้อยู่ใน git-bash ของฉัน ดังนั้นฉันอยากให้มันทำงานบนทั้งระบบ linux และ windows ด้วย cygwin โดยไม่ต้องเพิ่มอะไรเพิ่มเติม


เกรงว่านี่อาจเป็นคำถามที่โง่ แต่ฉันจะใช้มันได้อย่างไร ฉันจะคัดลอก / วางมัน แต่หลังจากโหลดของฉันGot.tmux.conf ฉัน "cut -c3- ~/.tmux.conf | bash -s apply_configuration" returned 1อย่างไรก็ตามแถบสถานะของฉันเปลี่ยนเป็นสีแดงแน่นอน !!!

3

ฉันมากับฟังก์ชั่นเปลือกต่อไปนี้:

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
}

ฟังก์ชั่นนี้สามารถใช้งานได้เช่นนี้ (ผลลัพธ์จะเป็นจริงหาก$HOSTเป็นLOL):

$hash_string256 $HOST
 113
$hash_string256 $HOST 127
 240

เพื่อเชื่อมต่อกับคุณสามารถใช้สคริปต์ที่จะเริ่มต้นและกำหนดค่าtmuxtmux

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

สำหรับชื่อโฮสต์LOLมันจะตั้งค่าstatus-fgการcolour113และการstatus-bg colour240หมายเลข 127 ใน$(hash_string256 $HOST 127)มีดังนั้นพื้นหลังจะไม่เหมือนกับสีพื้นหน้าและอยู่ห่างจากกัน

สำหรับระบบ GNU ที่ไม่มี

หากระบบของคุณมีmd5แทนmd5sumสาย

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

สามารถถูกแทนที่ด้วย

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

หากบางคนรู้วิธีใช้ฟังก์ชั่นภายในตัวtmux.confฉันก็จะขอบคุณมัน
Raphael Ahrens

1
การกำหนดค่า tmux ของฉันมีวิธีการกำหนดและเรียกใช้ฟังก์ชันเชลล์โดยพลการที่อยู่ในไฟล์ tmux conf
แม็กเคเล็บ

@Caleb น่าสนใจ ขณะนี้ฉันไม่มีเวลาแก้ไขในคำตอบ แต่ฉันจะเพิ่มมัน
Raphael Ahrens

1
คุณอาจต้องการทำให้เป็นทางเลือกสุดท้ายสำหรับคำตอบแทนที่จะป้อนเป็นคำตอบหลักเพราะมันอาจสร้างความสับสนให้กับใครก็ตามที่ไม่มีเปลือกหอยขั้นสูงอยู่ใต้เข็มขัด ทางออกคือการแฮ็คที่เกี่ยวข้องกับ here-docs และเพื่อให้ได้ทั้งไฟล์ config และสคริปต์ที่สามารถเรียกใช้งานได้จากไฟล์เดียวกันดังนั้นการใช้งานนี้ต้องมีการเปลี่ยนแปลงทั้งไฟล์ config ไม่ใช่แค่เพิ่มสองบรรทัด การทำให้ถูกต้องจะไม่เหมาะสำหรับทุกคนดังนั้นให้พวกเขามีวิธีแก้ไขการกำหนดค่าปกติโดยใช้สคริปต์ภายนอกก่อนที่จะแนะนำว่าสามารถบดเข้าด้วยกัน
Caleb
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.