メインコンテンツまでスキップ

ftxui 導入

tui 描画に ftxui を取り入れる。

試しに screen の出力に ftxui を使ってみたところ、 さくと動いた。

void refresh(FILE *ttyf) {
// using namespace ftxui;
auto screen = ftxui::Screen::Create(ftxui::Dimension::Fixed(COLS()),
ftxui::Dimension::Fixed(LINES()));

for (int y = 0; y <= LASTLINE(); y++) {
auto pc = ScreenImage[y]->lineimage;
auto pr = ScreenImage[y]->lineprop;
for (int x = 0; x < COLS(); x++) {
if (CHMODE(pr[x]) == C_WCHAR2) {
} else {
auto &pixel = screen.PixelAt(x, y);
auto &utf8 = pc[x];
if (utf8.view().size() == 0) {
pixel.character = " ";
} else {
pixel.character = pc[x].view();
}

auto p = pr[x];
pixel.inverted = p & S_STANDOUT;
pixel.underlined = p & S_UNDERLINE;
pixel.bold = p & S_BOLD;
}
}
}

term_move(0, 0);
auto str = screen.ToString();
fwrite(str.data(), str.size(), 1, ttyf);

term_move(CurLine, CurColumn);
flush_tty();
}

よさそう。 termcap/terminfo 依存が除去できる。 libuv と ftxui の導入で Windows ビルドの見通しがついた。

ncurses 依存を削除できた

ncurses というか tgetent 系の termcap 関数に対する依存なのだけど、 ftxui の Screen で代替して削除できた。