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 顏色(真彩色),而不是您所詢問的內容。

相關內容