tmux 上の Emacs で 24-bit color を表示する方法
TL; DR
Emacs 26.1 と iTerm2 v3 以上が前提になります。
以下のファイルを作ります;
# Use colon separators.
xterm-24bit|xterm with 24-bit direct color mode,
use=xterm-256color,
setb24=\E[48:2:%p1%{65536}%/%d:%p1%{256}%/%{255}%&%d:%p1%{255}%&%dm,
setf24=\E[38:2:%p1%{65536}%/%d:%p1%{256}%/%{255}%&%d:%p1%{255}%&%dm,
# Use semicolon separators.
xterm-24bits|xterm with 24-bit direct color mode,
use=xterm-256color,
setb24=\E[48;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,
setf24=\E[38;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,
terminfo データベースに登録します;
$ tic -x -o ~/.terminfo terminfo-24bit.src
~/.tmux.conf に以下のように 2 行付け加えます;
$ cat << EOF >> ~/.tmux.conf
set -g default-terminal "xterm-24bits"
set-option -ga terminal-overrides ",xterm-24bits:Tc"
EOF
~/.bashrc
あるいは ~/.zshrc
に以下の行を付け加えます。
eval `tset -s xterm-24bits`
一旦シェルから抜けて入り直し tmux を起動した上で Emacs を起動します。M-x list-colors-display
に色名が増えていたら成功です。
Emacs 26.1 supports 24-bit colors
Emacs 26.1 がリリースされました。Change Log には正式にターミナルでの 24bit color が使えるようになった旨記載がされています。
以下その記述の引用です
** Emacs now supports 24-bit colors on capable text terminals.
Terminal is automatically initialized to use 24-bit colors if the
required capabilities are found in terminfo. See the FAQ node
"(efaq) Colors on a TTY" for more information.
efaq の Colors on a TTY を見ろとか言っているので見てみます。
なんか terminfo データベースに xterm-24bits?
エントリを追加して、TERM 環境変数にそれを指定して Emacs を起動しろってことみたいです。
tmux なしにやってみる
efaq に書いてあるとおりに tic で terminfo データベースにエントリを追加して起動してみます。
$ TERM=xterm-24bit emacs -nw
そこで M-x list-colors-display
をやってみるとたしかに 256 色の時以上に色名が出てきてどうやら 24bit-color で表示できているらしいことが確認できます。
tmux の上でやってみる
まあうまくいかないんですねこれが。Emacs で色が一切つかなくなります。M-x list-colors-display
には色がつかない色名がずらっと並びます。ですが、TERM 環境変数に指定する値を xterm-24bits
(値の末尾に s を付加する) にするとうまくいくんですね (これを見つけるのにかなり試行錯誤したのでこのエントリを起こすことにしました)。
$ TERM=xterm-24bits tmux
$ TERM=xterm-24bits emacs -nw
terminfo データベースには一度付け加えれば後は恒久的なので、あとは TERM 環境変数をどうにかすれば完成です。あといろいろ見てると .tmux.conf
に set-option -ga terminal-overrides ",xterm-24bits:Tc"
の記述が必要そうなので一応追加しておきます。
まとめ
- efaq に従い terminfo データベースにエントリを追加
-
~/.(zsh|bash)rc
(あるいはそれに相当するファイル)にeval
tset -s xterm-24bits
`` と記述 (TERM 環境変数を設定している行があればコメントアウト or 削除) -
~/.tmux.conf
に以下の二つを記述set -g default-terminal "xterm-24bits"
set-option -ga terminal-overrides ",xterm-24bits:Tc"
- tmux の上で Emacs を起動し
M-x list-colors-display
を見てみる
一応 tmux 的には tmux の外 (tmux 起動前) の TERM 環境変数には rxvt 系を指定して、tmux の内側では screen 系を指定してくれと tmux FAQ に記述があるのでなにか不具合が起きるかもしれませんが、当然のことながら私は関知しません
20180608 追記
tmux の外において TERM 環境変数が xterm-24bits でないとき偽りの 24-bit color でした (M-x list-colors-display
は色名を報告してくるけど実際には 256 色しか出ていない)。なのでその旨加筆しました。
参考文献
Author And Source
この問題について(tmux 上の Emacs で 24-bit color を表示する方法), 我々は、より多くの情報をここで見つけました https://qiita.com/__hage/items/4d8ad65b70e4d6142599著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .