使用 mintty 和 tmux 切换曝光颜色

Jef*_*eff 4 colors tmux solarized

我试图找到一种方法来轻松地在浅色/深色日光化主题之间切换,而无需创建新的终端/tmux 会话。我在 Windows 机器上运行 mintty,通常登录到 Linux 机器并连接到 tmux 会话。

使用mavnn 的日光化薄荷色和seebi 日光化的 tmux颜色,我编写了一些可以即时更改终端颜色的 bash 函数。这是在我的 .bashrc 中:

函数godark()
{
    ~/solarized/sol.dark
    tmux 源文件 ~/tmux/tmuxcolors-dark.conf
}

函数 golight()
{
    ~/solarized/sol.light
    tmux 源文件 ~/tmux/tmuxcolors-light.conf
}

所以在 sol.dark 里面有如下指令:

echo -ne '\eP\e]10;#839496\a' # 前景 -> base0
echo -ne '\eP\e]11;#002B36\a' # 背景 -> base03

在我的 tmuxcolors-dark.conf 里面,我会有这样的东西:

set-option -g status-bg colour235 #base02
set-option -g status-fg colour130 #yellow

几乎是有效的。如果我没有打开 tmux,我可以输入“godark”,mintty 会变成深色主题,但是如果我在 tmux 中输入它,它会将我的 tmux 状态栏更改为正确的主题,但我的终端背景不会改变颜色. 我不太了解 ANSI 转义序列,所以也许我在这里做了一些愚蠢的事情。我将不胜感激!

igo*_*gor 5

您可以通过像这样转换转义序列,将转义序列从 tmux 内部发送到包含终端:

  1. 将所有出现的次数加倍 \e
  2. 前置 \ePtmux;
  3. 附加 \e\\

例如,使用st作为我的终端模拟器,我可以通过执行重新定义其调色板的颜色 #1(红色)

printf '\e]4;1;#aa0000\a'
Run Code Online (Sandbox Code Playgroud)

要在 tmux 中执行相同操作,我必须使用

printf '\ePtmux;\e\e]4;1;#aa0000\a\e\\'
Run Code Online (Sandbox Code Playgroud)

使用 shell 脚本/函数切换颜色时,请检查$TMUX环境变量。如果它不为空,那么您就在 tmux 中。