tmux 在 256 色终端上输出 256 色,在 8 色终端上输出 8 色

tmux 在 256 色终端上输出 256 色,在 8 色终端上输出 8 色

我想要tmux自动选择256色模式,即有一个环境变量

TERM=tmux-256color

里面 tmux当环境变量

TERM=xterm-256color

已设置外部

默认行为

256色终端仿真器

当前的行为是tmux在任何情况下都选择 8 色模式:使用支持 256 色的终端模拟器,即 Gnome Terminal 或 xterm,并确保它支持 256 色

echo $TERM; tput colors
# xterm-256colors
# 256

然后开始tmux。默认tmux会切换为8种颜色:

echo $TERM; tput colors
# screen
# 8

8色终端仿真器

如果您切换到 8 色终端,即/dev/tty2按 Ctrl+Alt+F2 切换到,您将得到

echo $TERM; tput colors
# linux
# 8

和里面tmux一样旧

echo $TERM; tput colors
# screen
# 8

强制 256 色模式

我可以强制tmux选择256色模式通过添加以下内容~/.tmux.conf

set -s default-terminal "tmux-256color"

然而,这也适用于如果外部终端仿真器一开始就不支持256色。这不是我想要的。

自适应256色模式

一个问题和一个常问问题在 GitHub 上,声明设置其中之一(人们报告相互矛盾的参数)

set -ga terminal-overrides ",xterm-256color*:Tc"
set -sa terminal-overrides ",xterm-256color*:Tc"
set -ga terminal-overrides ",*256col*:Tc"
set -sa terminal-overrides ",*256col*:Tc"

应该tmux选择终端的颜色模式,但它们都不适用于我的安装(Arch 上的 tmux 3.0)。

是否有一种明确的方法可以tmux根据当前终端仿真器支持的颜色来选择 8 种颜色或 256 种颜色?

答案1

这并不是 tmux 本身可以完全为您做的事情,因为它无法更改已经运行的程序上的 TERM,例如,如果您从带有 xterm-256color 的终端分离并重新连接到带有 xterm 的终端。

不过,您可以自己做。客户端的术语以 client_termname 格式提供。因此,您可以将类似的内容放入 PS1 或 .profile 或其他内容中:

if [ -n "$TMUX" ]; then
    T=$(tmux display -p '#{client_termname}')
    case "$T" in
    *-256color)
         export TERM=tmux-256color
         ;;
    *)
         export TERM=tmux
         ;;
    esac
fi

显然,如果您在未附加的会话中创建窗格(client_termname 将为空),则默认为 tmux;如果您有一个会话附加到多个客户端,则默认为最近使用的客户端中的 TERM。

如果您不想像这样在 shell 中执行此操作,则可以使用客户端附加挂钩来更改默认终端 - 但这仅适用于新窗格,而不适用于现有窗格。

另一种选择是始终使用 tmux-256color 运行,并在外部终端无法执行 256 色时让 tmux 将颜色向下转换。

关于 Tc 的常见问题解答中的所有内容都是关于 RGB 颜色(真彩色),而不是您所询问的内容。

相关内容