根据主机名设置 tmux 状态行颜色

根据主机名设置 tmux 状态行颜色

我想tmux根据机器的主机名动态选择颜色。由于我tmux.conf在多台机器上共享主机,因此为每台主机分配唯一的颜色在视觉上会很方便,尤其是在同时处理多个主机时。这可行吗?

答案1

我想出了以下 shell 函数:

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

要连接它,tmux您可以使用启动和配置的脚本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

对于主机名,LOL它将设置status-fgtocolour113status-bgto 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")

答案2

我也想要这个功能。我基本上将所有内容合并到此中.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

我删除了 usingbc因为我的 git-bash 中没有它。因此,我希望它能够在我的 Linux 系统和带有 Cygwin 的 Windows 上运行,而无需添加额外的东西。

答案3

.tmux.conf:

run "tmux set -g status-bg $(hostname -s | hexdump -e '\"0x%02x\"' | cut -c-4 | xargs printf 'colour%d')"

答案4

我用这个。也许 hexdump 格式字符串可以使剪切部分过时,但我不知道如何实现。

.tmux.conf:

run "tmux set -g status-bg $(hostname -s | hexdump -e '\"#%06x\"' | cut -c-7)"

相关内容