Terminal graphics protocol
The goal of this specification is to create a flexible and performant protocol that allows the program running in the terminal, hereafter called the client, to render arbitrary pixel (raster) graph...
Terminal graphics protocol favicon https://sw.kovidgoyal.net/kitty/graphics-protocol/
Terminal graphics protocol

terminal emulator を選定・・・

主に3つの動作環境、Windows, Windows wsl, Ubuntu-20.04 があってtoolや設定をある程度共通にしたいということで試行錯誤していた。 他に ssh経由, Windows wslg もあるよ。

wezterm

wezterm が有望であることがわかった

font fallbackmultiplexeremojinerdfntgraphics escape
wezterm windowscolorconpty issue
wezterm wslcolorconpty issue
wezterm sshcolorsixel, kitty, iterm2
wezterm linuxcolorsixel, kitty, iterm2

conpty を通すときに escape sequence が加工されるとかで、sixel, kitty, iterm2 いずれのプロトコルもうまくうごかなかった。iterm2 は絵はでるのだけど場所がずれるという惜しい挙動・・・。

sixel doesn't work on Windows 10 · Issue #1236 · wez/wezterm
What Operating System(s) are you seeing this problem on? Windows WezTerm version wezterm 20210814-124438-54e29167 Did you try the latest nightly build to see if the issue is better (or worse!) than...
sixel doesn't work on Windows 10 · Issue #1236 · wez/wezterm favicon https://github.com/wez/wezterm/issues/1236
sixel doesn't work on Windows 10 · Issue #1236 · wez/wezterm

SSH 経由で WSL することで対処する。

wslg(xtermなど)

xterm は軽快できれいに表示できるので良かった。フォントのフォールバックができないぽいのが弱点。 urxvt は、NerdFonts がうまくでなかった。 st (simple term) もフォントまわりでつまづきだったかな。

font fallbackmultiplexeremojinerdfntgraphics escape
xterm wslgmonosixel
mlterm wslgmlterm-concolorsixel

mlterm はフォント周りの設定が強力でよかった。 文字セットごとにフォントを個別に指定できるので、フォントを合成せずともばらのままでよい。

mlterm-con という multiplexer があり sixel support があるらしい。 自前ビルドが必要そう(apt には含まれていないぽい)。

wslgは、頻繁にキーボードが押しっぱなしになったり不安定なような・・・ https://github.com/microsoft/wslg/issues/207 なおっているけ、リリースに時間がかかりそう?

libvte

libvte 系のterm。 gnome-terminal, xfce4-term など。

gpu rendering

GPUレンダリングで araclitty, kitty そして wezterm がある。 weztermWindows をサポートしていて、フォントのレンダリング、タブのサポートと総合的に良い。

その他

  • tabby
  • RLogin
  • ConEmu

など。

要件

日本語、中文、絵文字, NerdFonts を同時にいい感じに表示したい

となるとすべてを含むひとつのフォントより、主になるフォントを設定してそれにグリフが含まれなかったら、他のフォントにフォールバックする挙動をしてもらう方が便利。 いくつかのフォントを試してみたのだけど、 HackGenNerd Console が良かった。 で、中文の足りない漢字を 更紗ゴシックフォント にフォールバックするという組み合わせ。 がんばって完璧な合成フォントを自作すればいいのだけど、よくわからないので、 複数フォントのフォールバック機能が必要。

かつて w3m で表示が乱れることで苦労した ambigous width 問題はあまり気にならなくなっていた。 なんか、表示は2カラム使うが、データ上は1カラムと見なすような扱いになっていて、 X につづいて で隙間を開けることで正しく表示できるようだ。 NerdFonts や 絵文字 はそのようになっている?

エスケープシーケンスで画像を表示したい

sixel とか kitty とか iterm2 による画像表示。

graphics
Windows Native(conpty)
wslttysixel
xterm wslgsixel
wezterm linuxsixel, kityt ,iterm2

という感じになった。wslttyconpty ではなくて winpty なので例外的に sixel が通過できるらしい。 動く環境でも tmux を挟むと動かなくなる。 代わりに terminal emulator の方で multiplexer(タブ機能) する必要が発生。

まとめ

総合力で wezterm が強い。

  • あまり頑張らなくてもフォントがうまく設定できる(cjk, NerdFonts, 絵文字)
  • multiplexer 機能あり
  • sixel, kitty, iterm2 プロトコルで画像を表示できる
  • Windows でも動く

参考