[Anthy-dev 2367] Re: IM切り替え時のプリエディット消去について

Back to archive index

YamaKen yamak****@bp*****
2005年 9月 11日 (日) 23:09:14 JST


加藤さん、こんばんは。返事が遅れてごめんなさい。

At Mon, 29 Aug 2005 20:15:40 +0900,
ekato****@ees***** wrote:
> On Mon, Aug 29, 2005 at 05:30:10PM +0900,
> YamaKen <yamak****@bp*****> wrote:
> 
> > At Sun, 28 Aug 2005 00:23:01 +0900,
> > ek.ka****@gmail***** wrote:
> > > まず確認したいのですが、Application (Toolkit) が IM の reset を呼び出
> > > したときに期待されることとして、
> > > 
> > >     o preedit がクリアされる (また言語やそのプリエディットの状態に応じ
> > >       てプリエディットにあった語が commit される)
> > >     o 候補ウィンドウがあれば閉じる
> > > 
> > > ということですよね。またプリエディットをコミットするかどうかは、各 IM
> > > にまかせるという話でした。
> > 
> > 私はreset時にcommitは許さないという前提で話していました。

もう一つ確認させてください。私の主張の中では「commit」と
「プリエディットのクリア」を明確に区別していますが、もしかして加藤さん
の言う「commit」は「reset時のプリエディットのクリア」を指していないでしょ
うか?

> > [Anthy-dev 945]では、resetの仕様に関する確信が持てるまではuim内
> > ではreset時にcommitを行わないという方針になっています。また、最
> > 近のuim at fdoでのresetとfocus移動時の挙動に関する議論でも、reset時
> > にはcommitを行うべきでないという点はJamesさんと半田さん(暗黙的に
> > 徳永さんも?)の間で合意されています。
> 
> James Su さんの 
> http://lists.freedesktop.org/archives/uim/2005-June/001104.html
>> http://lists.freedesktop.org/archives/uim/2005-June/001106.html
> 
> をみると、reset 時に commit されることもあるように読みとれました。
> まあ、このあたりは議論があるのかもしれませんが、ぼくは、James さんと同
> じ見方をしていました。

確かに前者のメールでは以下のように「本当に必要なら」reset時の
commitが許されるという主張がなされていますが、これは「本当に必要
かどうか」の結論が出ればそれに従うというだけの話で、この時点では
「本当に必要かどうか」の判断は保留されていると理解しています。も
しそうでないとしても、後述の結論でJamesさんもreset時のcommitはす
べきでないとしています。

| So just implement the reset() as truely reset behaviour (clear
| preedit string and put input method into original state)
| should be good enough. The preedit string should only be
| committed within reset() if it's really necessary to be
| committed.

また、後者では"The commit event should be emitted by input
method itself"と要約されている通り、そこに至る議論で主張された
「bridge が何らかの情報に基づいてプリエディット文字列を自動
commitする」という仕様がlayer violationであるという主張であると
理解しています(私も同意見です)。これはreset時にcommitが許される
かどうかとは別の問題です。

その後この議論は以下のように結ばれています。私はこれが半田さんと
Jamesさんの結論であると理解し、それに同意しています。

http://lists.freedesktop.org/archives/uim/2005-June/001117.html

James Su wrote:
|   Yes. I think your description is correct.
|   In SCIM, the first API is focus_out (), and the latter is reset (), 
| 
| Kenichi Handa wrote:
| | When a user moves an input spot or a focus out, an
| | application calls the corresponding IM-engine function
| | (API).  The function asks the IM-module to react on that
| | event.  The IM-module will commit some text to the
| | IM-engine.  Then the IM-engine commits the text to the
| | application.  It's up to the IM-module how to change the
| | internal status on that event.  Some may reset the full
| | status.  Some may reset the status only partially.
| | 
| | When a user or an application want to reset an input method
| | to the initial state, an application calls the corresponding
| | IM-engine function (API), and the function asks the
| | IM-module to reset the status.  The IM-module silently reset
| | the status (i.e. without committing anything).

resetの挙動について半田さんが"The IM-module silently reset the
status (i.e. without committing anything)"と主張し、Jamesさんが
"your description is correct"と同意しています。よってreset時には
commitは許されないというのが現時点の共通認識であると思います。


> あとその後の、Korean input module の話題でも、
> http://lists.freedesktop.org/archives/uim/2005-June/001125.html
> で that's a right way ということになっていたように思います。

その"right way"が指しているのは「reset時にcommitを許す」という仕
様の事ではないと思います。会話の流れは以下のようになっていますが、

TOKUNAGA Hiroyuki wrote:
| Park Jae-hyeon wrote:
| | As I said in a previous post, I added code to commit in the reset
| | handler.  I know you are having discussions on this problem, and I
| | will modify this part after the API's are determined.
| 
| I think that's right way.

ここではJae-hyeonさんは以下のメール("a previous post")を前提に、
「focus 移動時にプリエディット文字列をcommitしたいので
reset-handlerにcommit処理を入れていますが、この問題に関して議論
がある事は知っているので、APIが決定されたらそれに従って修正する
つもりです」と言っています。

http://lists.freedesktop.org/archives/uim/2005-May/001068.html

それに対して徳永さんが"that's right way"と言っているのはその対応
手順の事であって、技術的仕様についての見解はここでは何も表明され
ていないと理解しています。そう解釈しないと後半部分は引用しておき
ながら無視している事になるし、問題の議論がまだ続いている状況から
しても不自然なので。


以上のように、私はreset時のcommitは許されるべきでないとという立
場ですが、「reset時にcommitを許すかどうか」は現在問題になってい
る「reset時のプリディットのクリアについてどの層が責任を負うべき
か」とは別問題なので、同意できなくても保留しておきませんか?

後者の問題についてはこのスレッドで問題が提起されるまで議論された
事はないと認識しているので、引き続き進めましょう。方針に異論がな
ければ私が考えているresetの責任分界についてさらに解説しようと思
います。


commit/focusまわりについては私は以下のような見解を持っていますが、
この件については必要になった時点でuim @ fdoで別途議論する方がよい
でしょう。

・toolkit/applicationはfocus移動時にresetを発行すべきでない
・focus移動イベントはIMに通知されるべき(現時点のuimには欠けてい
  る)
・focus移動時には、IMが必要とするならresetしてよい(この場合プリ
  エディットのクリアはIMが行う)
・focus移動時には、IMが必要とするならcommitしてよい
・bridgeやtoolkit/application層では、いかなる場合においてもプリ
  エディット文字列の自動commitを行うべきではない。それは各IMの責
  任

これまでの議論の内容からするとGTK+がfocus移動時にresetを発行して
いるようなので(Qtも同様でしたが、immodule for Qtでは少なくとも私
が関わっていた時点ではそれを排除していました)それが問題を複雑に
しているようですが、そういった事情はbridgeで吸収すべきで、各IM自
体は理想的プラットフォームを仮定し、あくまでresetは単なる受動的
resetとして実装すべきと考えます。

-------------------------------
ヤマケン yamak****@bp*****



Anthy-dev メーリングリストの案内
Back to archive index