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


10

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

Answers:


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

我删除了using,bc因为我的git-bash中没有它。因此,我希望它可以在cygwin上同时在我的linux系统和Windows上运行,而无需添加其他内容。


害怕这可能是一个愚蠢的问题,但是我该如何使用呢?我复制/粘贴了它,但重新加载后.tmux.conf我得到了"cut -c3- ~/.tmux.conf | bash -s apply_configuration" returned 1。但是,我的状态栏确实变成了红色!!!

3

我想出了以下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为,则结果为true 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-fgcolour113status-bgcolour240$(hash_string256 $HOST 127)此处的数字为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我将不胜感激。
拉斐尔·阿伦斯

1
我的tmux配置包含一种定义和运行tmux conf文件中包含的任意shell函数的方法。
加勒布

@Caleb有趣。目前,我没有时间将其编辑为答案。但我会添加它。
拉斐尔·阿伦斯

1
您可能希望将其作为答案的替代结尾,而不是将其作为主要答案,因为它可能会使那些没有高级shell foo的人感到困惑。解决方案是涉及到here-docs的黑客,要从同一文件中获取配置文件和可执行脚本,因此要实现此目的,需要更改整个配置文件,而不仅仅是增加几行。正确的做法并不是每个人都适合,因此请在建议将其混在一起之前,给他们一种使用外部脚本编辑常规配置的方法。
加勒布
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.