fork 先が壊れてしまったぽい(未確定)。 foreground に持ってきてなおしちゃった。 mainloop に epoll の タイムアウトによる idle を追加した。 そこに画像ロードを入れた。

最初の山場を越えて改造の軌道に乗ったかもしれない。 進めるにつれて少しずつ壊れる状態を越えて、 修復したり改変したりすることができるようになってきた。

terminal はなんとなく kitty になった。

作業方針

  • global 変数を減らしてスレッドセーフを確保しスレッドを導入する。 スレッド化せずとも、タイムアウトつき epoll でほとんどいけそうな感触ではある。

  • Str と libwc で gc やめて、zig 流の allocator 引数にしたい。

  • zig 要素を増やして、 struct Str を zig の []const u8 化する。 極一部の mutable な文字列以外は, []const u8 で malloc なしで取回せよう。 0 で terminate するためだけに alloc している場合がわりとある。 Buffer に arena allocator のせて、雑にとりまわせばよいような気がする。

  • HTTP-1.1。おそらくこれが原因で、gihhub などが見れない。

  • pretag の背景色を変えてみやすくする。 地の文とソースコードの囲みの区別がつけば可読性が改善するのではないか。 シンタックスハイライトはどうなんだろう。

  • 描画回りの整理。 各タスクが screen へのレンダリング(displayBuffer)までやっていて、 再描画とかの管理が大変ややこしいことになっている。 main loop で中央集権的に描画を管理して、各タスクは更新、invaliate までとしたい。

  • 終了時は mainloop を break して、 そこで後処理するべし。exit しない。 sigfd して signal handling もしない。 setjmp / longjmp は zig の try で吸収できるんでないか。 fork は無くす。zig の process.Child を少しだけ使う。 cygwin や mingw じゃなくて、native の Windows 対応も視野に入れている。 tty/rawmode, fork の互換性を回避すれば残りは Windows でもビルドできるところが 多い。