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.