2011-03-01 (火) の 09:54 +0900 に Etsushi Kato さんは書きました:
> 2011/2/27 Hiroyuki Ikezoe <hiike...@gnome.org>:
> 
> >> GTK+ 側も、例えば XIM module では、gtk_im_context_reset
> >> でプリエディットがあればコミットしてから消去するような動きになっているので、これを期待したアプリケーションでは immodule
> >> の種類によってはうまく動かないので直してほしい、ということだと思います。
> >>
> >> uim の視点では、GTK+ のように安易に gtk_im_context_reset
> >> が呼び出されるような状況では、日本語のように長いプリエディットを利用する IM の場合、消去するのは好ましくないという考えのようです。
> >
> > そうだと思います。
> >
> > 実際にアプリケーション側の勝手な都合でプリエディットを消去してくれという
> > リクエストが来ることはIMにとっては問題ないのでしょうか?
> > 例えば、先のByeoruの場合でいうと消去するのではなく、コミットしたいIMだと
> > 思うんですが、そういう場合はclear_preeditなるメソッドが呼ばれた時にコ
> > ミットしちゃうという実装をするのでしょうか?それはすごく気持ち悪いと思い
> > ます。
> 
> uim では、ヤマケンさんの議論によりユーザ視点で
>  * reset-handler
>  * place-handler (カーソルがジャンプして新しい地点に移動した場所で呼ばれる)
>  * displace-handler (カーソルがジャンプするので、移動する前の古い地点で呼ばれる)
> という物を用意しています。またプラスして focus-in-handler, focus-out-handler
> もありますが、こちらは曖昧さはないのでここでの議論では問題ないと思います。
> 
> ここでの reset は"本当のリセット" ということで、byeoru.scm でも確定はせず
> 消去のみの挙動です。skk.scm でも reset で消去、他の handler では確定も消去も
> しません (anthy.scm ではここでの議論を反映せず、ずっと放置されていますけど…。
> せっかくですから、あとで直しておこうとおもいます)。

ありがとうございます! ”本当のリセット”時にはbyeoruでも消去のみというこ
とが聞けてうれしいです。実際にアプリケーション側でも、"本当のリセット"が
必要な局面がひとつだけ分かってまして、それは”全消去”みたいな機能が呼ばれ
た時なんですが、この時はIM側がどう思おうとプリエディット中の文字も含めて
消去すべきだと考えています。

というわけで、個人的には今回の議論は着地点を見出せたと思っています。

まとめると、

1. 編集中のファイル保存時等、IMに現在のプリエディット中の状態をどうする
か決めて、実行してもらう時はgtk_im_context_resetを呼ぶ

2. ”本当のリセット”メソッド(どんなIMでもコミットせずに消去のみ)が
GtkIMContextに必要

といったところでしょうか。2については後でGTK+に提案しておきます。名前に
ついてはいい考えがあんまりないので、期待しないでください。何かいい名前が
あればどなたか教えてください。なんとなく1の方のメソッドに新しい名前がつ
きそうな気がしなくもないですが…。いつになるかは分かりませんが、GTK+に取
り込まれたらお知らせに来ます。

# 今回の件とは別ですが、gtk_im_context_undo/redoっていうメソッドも
提案したので、暇がある時にでも考えておいてもらえるとうれしいです。

place-handler/displace-handlerに該当する機能については、ちゃんと考えたこ
とがないのでここではとりあげていません。


-- 
Hiroyuki Ikezoe

-- 
Google Groups "uim-ja" group
uim-ja@googlegroups.com
http://groups.google.com/group/uim-ja/about

メールによる返信