Emacs 20.4でQ's Nicolatterを使えるようにするパッチです。
最初,私も自分でパッチを書いていたのですが,井上さん <inoue@ainet.or.jp> が公開されているパッチの方が優れていたので,これを添付します。
このパッチの最新版は以下のWebサイトから入手できます。
http://www.ainet.or.jp/~inoue/software/emacs-xim/
Emacs 20.4は最初からXIMのコードが含まれていますが,Xの実装によってはXlibとXtとで一つのイベントを二重に解釈することにより,無限ループに陥ることがあります。
Emacs 20.4のイベントループは次のようになっています。
src/xterm.c: XTread_socket() XEvent event; { XtAppNextEvent(..., &event); XFilterEvent(&event, ...); (1) switch (event.type) { case KeyPress: ... (2) } XtDispatchEvent(&event); (3) }
(1)でXlibがIMサーバーにキーイベントをforwardします。で,Q's NicolatterのようなIMサーバーがこれを適当に解釈して,Xlibに返信します。
Emacsは(2)でその変換結果などをテキストに取り込みます。
(3)で,Xの実装によっては再びIMサーバーにforwardしてしまいます。それに対するIMサーバーの返信は新しいイベントとして(1)で再びIMサーバーに送られます。そのため,無限ループに陥ることになります。
このパッチはIMサーバーからの返信によるイベントをXtに回さないことでこの問題を回避します。
Copyright (c) 1998-1999 Hisashi HORIKAWA. All rights reserved.