Windows の conpty
を使うことで、クロスプラットフォームな tui
環境は整ってきた様子。
要するに curses
への依存を除去して、 POSIX API
への依存を Win32 API
と付け変えできるようにすれば、
Posix
と Windows
共用のコードにできる。
go
や rust
界隈の tui
アプリ neovim、wezterm なんかで既に達成されている。
c++
でも今風の TUI
を作りたいと思っていたのだが、libvterm
と FTXUI
を併用することでできそうだ。
libvterm
, FTXUI
共に Windows
Unix
両方で動くコンパクトなライブラリだ。
libvterm
で vt100 escape sequence を ScreenGrid に翻訳して、 FTXUI
の Screen に描画する。
FTXUI
は ScreenGrid
の描画に加えて、Posix
と Windows
の 入力、resize, mouse をさばくこともできる。
上の図では、TERM が curses/terminfo で、process が posix であることが多い。
resize 周りは、ioctrl.h
。
vt100 parser と TERM への出力が分離されていない難解な塊だったりする。
process
まわりは conpty
を使って手作りできる。
ReadPipe を thread で ReadFile し、 別の thread で、hThread を WaitForSingleObject して終了を監視するのがよさそうだ。
あとは、 sixel とか試してみたのだが conpty は sixel を通してくれないみたい。
chafa
が Windows
でも動いたので、こっちで遊んでみる予定。
uim-fep
から posix
をはがして、 Windows
でも動くようにできないか画策中…