tmux 256 色ターミナルでの 256 色出力、8 色ターミナルでの 8 色出力

tmux 256 色ターミナルでの 256 色出力、8 色ターミナルでの 8 色出力

tmux256色モードを自動的に選択するようにしたい、つまり環境変数を用意したい

TERM=tmux-256color

内部 tmux環境変数

TERM=xterm-256color

設定された

デフォルトの動作

256 色ターミナルエミュレータ

現在の動作では、tmuxいずれの場合でも8色モードを選択します。256色をサポートするターミナルエミュレータ(Gnome Terminalまたはxterm)を使用し、256色をサポートしていることを確認してください。

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

次に開始しますtmux。デフォルトではtmux8 色に切り替わります。

echo $TERM; tput colors
# screen
# 8

8色端末エミュレータ

代わりに8色端末に切り替えると、つまり/dev/tty2Ctrl+Alt+F2を押して切り替えると、次のようになります。

echo $TERM; tput colors
# linux
# 8

そしてtmux同じ古い

echo $TERM; tput colors
# screen
# 8

強制256色モード

tmux256色モードを強制的に選択できる以下を追加することで~/.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

これは、すでに実行中のプログラムの TERM を変更することはできないため、実際には tmux 自体で完全に実行できるものではありません。たとえば、xterm-256color で端末からデタッチし、xterm で端末に再アタッチする場合などです。

ただし、自分で行うことも可能です。クライアントの TERM は 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 になります。

このようにシェルで実行したくない場合は、クライアント接続フックを使用して default-terminal を変更できますが、これは新しいペインにのみ適用され、既存のペインには適用されません。

もう 1 つのオプションは、常に tmux-256color で実行し、外部のターミナルが 256 色に対応していない場合に tmux で色を下げて変換することです。

Tc に関する FAQ の内容はすべて RGB カラー (トゥルーカラー) に関するものであり、あなたが尋ねている内容ではありません。

関連情報