我正在尝试寻找一种无需创建新终端/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 内部发送到包含终端:
- 重复所有出现的
\e
- 前置
\ePtmux;
- 附加
\e\\
例如,使用英石作为我的终端模拟器,我可以通过执行以下命令重新定义其调色板的颜色 #1(红色)
printf '\e]4;1;#aa0000\a'
要在 tmux 中执行相同操作,我必须使用
printf '\ePtmux;\e\e]4;1;#aa0000\a\e\\'
使用 shell 脚本/函数切换颜色时,请检查$TMUX
环境变量。如果它不为空,则表示您位于 tmux 中。