web-dev-qa-db-ja.com

tmux 256色端子で256色出力、8色端子で8色出力

tmuxが256色モードを自動的に取得するようにしたい、つまり環境変数を設定したい

TERM=tmux-256color

insidetmux環境変数の場合

TERM=xterm-256color

設定されましたoutside

デフォルトの動作

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色の端末に切り替える場合、つまりCtrl + Alt + F2を押して/dev/tty2に切り替えると、次のようになります。

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には 問題[〜#〜] faq [〜#〜] があります(人々は矛盾するパラメーターを報告しています)

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
Nils Werner

たとえば、xterm-256colorを使用して端末からデタッチし、xtermを使用して端末に再接続した場合、すでに実行されているプログラムのTERMを変更できないため、これはtmuxが完全に実行できることではありません。

ただし、自分で行うことはできます。クライアントの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

明らかに、これは、接続されていないセッションでペインを作成する場合はデフォルトでtmuxになり(client_termnameは空になります)、複数のクライアントに接続されているセッションがある場合は、最後に使用したクライアントからTERMになります。

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

もう1つのオプションは、常にtmux-256colorで実行し、外部の端末が256色を実行できない場合にtmuxに色を変換させることです。

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

2