我可以将本地机器的终端颜色设置为使用我通过 ssh 连接的机器的颜色吗?

Ben*_*son 7 colors ssh terminal

我有一个我在终端时喜欢的配色方案,但我从多个来源(本地、PuTTY、我的上网本等)进入我工作的机器,我想在整个过程中保持相同的配色方案. 这可能吗?

我特别想在 PuTTY 中使用它;PuTTY 颜色很难改变。

Gil*_*il' 9

终端中的颜色分两步确定:

  • 终端中运行的程序告诉终端使用某个颜色编号;
  • 终端将每个颜色编号转换为颜色值。

Xterm 有一个转义序列来更改与颜色编号关联的颜色值。我不记得 PuTTY 是否支持这个序列;我知道Mintty会。

set_color_value () {
  printf "\\e]4;$1;$2\\a"
}
set_color_value 4 '#6495ed'  # set color 4 (blue) to CornflowerBlue
Run Code Online (Sandbox Code Playgroud)

这些设置不会在终端重置后继续存在。您可以通过将光标配置更改序列附加到终端的重置字符串来克服这个困难。

  • 在使用 ncurses 的基于 terminfo 的系统上,将终端的 terminfo 设置保存到扩展名为infocmp >>~/etc/terminfo.txt. 编辑描述以更改rs1(基本重置)序列,例如替换rs1=\Ecrs1=\Ec\E]4;4;#6495ed\E\\。对于某些程序和设置,您可能还需要更改rs2(完全重置)。然后编译 terminfo 描述tic ~/etc/terminfo.txt(这写在目录下$TERMINFO,或者~/.terminfo如果未设置)。
  • 在基于 termcap 的系统上,从 termcap 数据库(通常为/etc/termcap)获取 termcap 设置。更改is(基本重置)和rs(完全重置)序列以附加您的设置,例如:is=\Ec\Ec\E]4;4;#6495ed\E\\:. 将TERMCAP环境变量设置为编辑后的值(以 开头和结尾:)。

现在你可以把这样的东西放在你的~/.profile

if [ "$(ps -p $PPID -o comm=)" = sshd ] &&
   [ "$TERM" = "xterm" ]; then
  set_color_value … # set color scheme
  TERMCAP=…  # if necessary
fi
Run Code Online (Sandbox Code Playgroud)