Ink

Contents related to tech, hobby, etc

TERMをtmux-256colorにする

|

TERMをtmux-256colorにする

なぜやるのか

かねてよりmacOSが重くなることに困っていて、 macでtmuxとvimを使うとvimがすごく重くなる を見つけました。

結果論としては「これがパフォーマンスをよくする」というわけではなさそうでしたが、 とりあえずtmuxを使っているので、揃えることにしました。

前提知識

そもそもTERM環境変数とは何か

$TERM は、ncursesなどが使っている terminfoライブラリ の動作に影響する環境変数です。 この変数で「なんの端末を使っているか」を設定し、terminfoライブラリがそれに応じて出力を変えているため、 cursesを使用する開発者は端末の差をあまり考えずに様々な端末に対応したソフトウェアを書くことができるのです。 (エスケープシーケンスとか決めている)

実は端末エミュレーター(とそもそもの端末)には色々な種類があります。有名どころだと xterm, cygwin, guru, vtシリーズ などでしょうか

筆者もそこまで詳しくないですが、途方もない数の仕様の端末が存在しています。 それらを共通のインターフェースで扱えるようにするのが terminfo, そして「今使っている端末」を設定するのが TERM 環境変数、ということです。

ちなみに余談ですが、=terminfo= で使用されるデータはmacの場合、 /usr/share/terminfo に格納されています。

terminfoエントリ

terminfoエントリは、

info:terminfo

手順

tmux.confで、tmux内でのTERMを設定する

前出のリンクで説明されているように、 以下を ~/. tmux.conf (または使っているtmux.confファイル)に追加します

set -g default-terminal "xterm-256color"

terminfoエントリーを追加する

筆者の環境(macOS+homebrew)では、terminfoエントリーがないと怒られてしまいエスケープシーケンスが全く使えなくなりました。

しかし、実はhomebrewもきちんとterminfoエントリーを作成してくれています。 /usr/local/opt/ncurses/bin/infocmp には作成されたエントリーが保存されているのですが、ここは残念ながら参照されません。

そこで、tmuxのissueにあった方法/usr/bin/infocmp に追加します

$ brew install ncurses
$ /usr/local/opt/ncurses/bin/infocmp tmux-256color > ~/tmux-256color.info
$ tic -xe tmux-256color tmux-256color.info
# This creates a complied entry in ~/.terminfo
$ infocmp tmux-256color | head
#       Reconstructed via infocmp from file:
#       /Users/libin/.terminfo/74/tmux-256color
tmux-256color|tmux with 256 colors,

参考リンク