2020-01-21 (Tu) [長年日記]
_ Emacs デバッグ
何故カーソルの点滅が安定しないのか、 というか、安定してチラッチラッと一瞬点滅するのは何故なのか、デバッグしてみた。
答えは簡単で、gtk_widget_queue_draw()
した後 pselect
で sleep する前に、
draw
ハンドラが呼ばれるタイミングがないから。
X の場合と同様に pselect から起きてきた後に dispatch してる。
だから pselect した後にしか描画されず、描画のタイミングが安定しなかった。
X の場合はあちこちで XFlush()
してるから問題ないのだろう。
add_keyboard_wait_descriptor (0);
↑という意見もあったけど、< /dev/null
したら emacs が busy loop に
なってしまって CPU 負荷 100% になるし、
他のプロセスとの通信でフリーズすることあるし。
私の環境では /dev/null
につながってるんだよね…。wayfire の性格? GNOME
だとどうなんだろう?
w32 も↑これやってるんだけど、
w32 は sys_select()
っていう独自関数を用意して使ってて、
0 もその中で独自処理してるので、全然参考にならない。
そもそも Windows は file descriptor じゃなくて Handle
なので
いったい何をどうしてるんだか…
ns は… なんで delete_keyboard_wait_descriptor (0);
してるのか不明。
git blame
してみようかな… してみたけどわかんなかった
x は socket を真面目に渡してる。一番真っ当かな。
そして pgtk の場合は「呼ばない」という選択肢w
さて。久しぶりにガッツリとデバッグして疲れた。
ここ数日思ったこと。さすがに英語が通じないww 全然通じないならともかく、誤解与えてて参る。 相手が native ならもう少しなんとかなってる気がする。