使用 mintty 和 tmux 切换 solarized 颜色

使用 mintty 和 tmux 切换 solarized 颜色

我正在尝试寻找一种无需创建新终端/tmux 会话即可轻松切换浅色/深色 solarized 主题的方法。我在 Windows 机器上运行 mintty,通常登录 Linux 机器并连接到 tmux 会话。

使用mavnn 的日晒薄荷颜色和seebi 的 solarized 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 中我将拥有如下内容:

设置选项 -g 状态-bg colour235 #base02
设置选项 -g status-fg colour130 #黄色

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

答案1

您可以通过如下方式转换转义序列,将转义序列从 tmux 内部发送到包含终端:

  1. 重复所有出现的\e
  2. 前置\ePtmux;
  3. 附加\e\\

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

printf '\e]4;1;#aa0000\a'

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

printf '\ePtmux;\e\e]4;1;#aa0000\a\e\\'

使用 shell 脚本/函数切换颜色时,请检查$TMUX环境变量。如果它不为空,则表示您位于 tmux 中。

相关内容