2019-11-16 (Sa) [長年日記]
_ preedit を埋め込み表示してみた
overlay で画像を表示できるようなので、
画像を作って put-image
でカーソル位置に表示するようにしてみた。
…
めっちゃ遅い… 遅いのと、C-x 2
なんて入力すると全角で2
が入力されるのと。
遅いのは、ざっと計測した感じ、画像を作って overlay を作って、 というあたりは 1ms 未満程度しかかかってないので、体感できないはず。 表示の部分だなぁ。
とりあえず profiling しよか。…したけど可視化したい。
http://kiwamaru.hatenablog.com/entry/2013/05/29/070819
おぉ、いいものあるじゃん。gprof2dot.py はリンク先がなくなっていたので、ぐぐって探した。
やってみたら、なんかすごい画像が出てきた。
上の方の右、色が変わってる。ここがボトルネック??
そりゃーつい最近作ったばかりのところだけど、 どうも自前で計測しても全然時間がかかってない。
GC の方も色が付いてるけど、そっちもたいしたことはない。 おそらく、普段から時間のかかってる箇所なのだろう。GC だし。
で、select()
してるあたりを調べつつ、ふと気づいたのが、
preedit 表示の反映が、カーソルの点滅と同期している、ということ。
文字のない箇所に overlay を表示するのがうまくいかない? いや、文字と文字の間に preedit を挿入しようとしても同様だな。
overlay を挿入してもすぐには反映されない? ってんなわきゃないわな。いちおうテストはした。
となると、やっぱりカーソルの点滅にただ同期してしまっているだけ、ということに。 それならもう、これしかない。
SET_FRAME_GARBAGED (f);
overlay を挿入した直後にこれを突っ込んだ。 これでめでたく速攻で表示されるようになりましたとさ。
あとは、
- フォントが違うのをなんとかしたい
- 変換を終えた後、次の入力を始めたことにより確定した場合に、最初の文字が 以前のカーソル位置に表示される
- ibus-daemon が時々死ぬ。適度に reset してやればいいのかも
C-x 2
で2
が挿入される
といったところか。