トップ «前の日記 最新 次の日記»

2019-11-16 (Sa) [長年日記]

_ preedit を埋め込み表示してみた

overlay で画像を表示できるようなので、 画像を作って put-image でカーソル位置に表示するようにしてみた。

めっちゃ遅い… 遅いのと、C-x 2 なんて入力すると全角でが入力されるのと。

遅いのは、ざっと計測した感じ、画像を作って overlay を作って、 というあたりは 1ms 未満程度しかかかってないので、体感できないはず。 表示の部分だなぁ。

とりあえず profiling しよか。…したけど可視化したい。

http://kiwamaru.hatenablog.com/entry/2013/05/29/070819

おぉ、いいものあるじゃん。gprof2dot.py はリンク先がなくなっていたので、ぐぐって探した。

やってみたら、なんかすごい画像が出てきた。

gprof の出力を処理した結果

上の方の右、色が変わってる。ここがボトルネック??

そりゃーつい最近作ったばかりのところだけど、 どうも自前で計測しても全然時間がかかってない。

GC の方も色が付いてるけど、そっちもたいしたことはない。 おそらく、普段から時間のかかってる箇所なのだろう。GC だし。

で、select() してるあたりを調べつつ、ふと気づいたのが、 preedit 表示の反映が、カーソルの点滅と同期している、ということ。

文字のない箇所に overlay を表示するのがうまくいかない? いや、文字と文字の間に preedit を挿入しようとしても同様だな。

overlay を挿入してもすぐには反映されない? ってんなわきゃないわな。いちおうテストはした。

となると、やっぱりカーソルの点滅にただ同期してしまっているだけ、ということに。 それならもう、これしかない。

  SET_FRAME_GARBAGED (f);

overlay を挿入した直後にこれを突っ込んだ。 これでめでたく速攻で表示されるようになりましたとさ。

あとは、

  • フォントが違うのをなんとかしたい
  • 変換を終えた後、次の入力を始めたことにより確定した場合に、最初の文字が 以前のカーソル位置に表示される
  • ibus-daemon が時々死ぬ。適度に reset してやればいいのかも
  • C-x 2 が挿入される

といったところか。


編集 パスワード変更