1

我正在寻找一个简单的解决方案,它可以为每个主机名提供一个 RGB 颜色。

我打算用它来设置 iTerm2 中的选项卡颜色,这样我就可以根据它的颜色选择轻松找到正确的主机。

现在,我不能使用所有的 3 字节,因为在某些情况下差异可能太微妙了,而且我需要禁止太暗太亮的颜色。

基于此,我只能假设我可以安全地为每种颜色使用 5 位,这会给我提供 2^15 = 128 种颜色可供选择。我可以处理将数字转换为 R、G、B 值的公式;)

所以我需要的是一段简单的代码,它会给我一个字符串(主机名)的 15 位散列。

如果这在 bash 中可行,那将是完美的,但我也接受 Python 变体。 

该解决方案必须在 Debian、RedHat 和 OS X 上运行,而无需安装额外的实用程序或库。

4

2 回答 2

1
#!/bin/bash
MD5="md5sum"
if [[ $OS == 'darwin' ]]; then MD5="md5" ; fi
HASH=`hostname -s | ${MD5}`
echo -n -e     "\033]6;1;bg;red;brightness;$((0x${HASH:0:2}))\a\033]6;1;bg;green;brightness;$((0x${HASH:2:2}))\a\033]6;1;bg;blue;brightness;$((0x${HASH:4:2}))\a"
于 2012-11-01T15:38:15.463 回答
0

color不带参数使用时自动支持随机颜色

将以下行添加到~/.profileor ~/.zshrc

PRELINE="\r\033[A"

function random {
    echo -e "\033]6;1;bg;red;brightness;$((1 + $RANDOM % 255))\a"$PRELINE
    echo -e "\033]6;1;bg;green;brightness;$((1 + $RANDOM % 255))\a"$PRELINE
    echo -e "\033]6;1;bg;blue;brightness;$((1 + $RANDOM % 255))\a"$PRELINE
}

function color {
    case $1 in
    green)
    echo -e "\033]6;1;bg;red;brightness;57\a"$PRELINE
    echo -e "\033]6;1;bg;green;brightness;197\a"$PRELINE
    echo -e "\033]6;1;bg;blue;brightness;77\a"$PRELINE
    ;;
    red)
    echo -e "\033]6;1;bg;red;brightness;270\a"$PRELINE
    echo -e "\033]6;1;bg;green;brightness;60\a"$PRELINE
    echo -e "\033]6;1;bg;blue;brightness;83\a"$PRELINE
    ;;
    orange)
    echo -e "\033]6;1;bg;red;brightness;227\a"$PRELINE
    echo -e "\033]6;1;bg;green;brightness;143\a"$PRELINE
    echo -e "\033]6;1;bg;blue;brightness;10\a"$PRELINE
    ;;
    *)
    random
    esac
}

#color    #uncomment to enable automatically set random color when tab created

每次创建新的 iterm2 选项卡后,使用命令color自动为其赋予新的/随机颜色。

如果您希望在创建时自动设置 iterm2-tab 颜色,则 .just 添加color.zshrc/的末尾.profile或就在function color

Host 1。行color更改为color red; 上host 2。行colorchang to color blue; 等如果更多主机,只需添加更多颜色设置,如示例中所示。

然后,每次打开相应的主机 ssh 终端,选项卡颜色都会根据需要更改。

于 2021-12-14T10:08:22.540 回答