最終更新日: 2019-01-04 金 08:40
ホーム | 文書トップ | 目次

NTEmacs IME使用時に発生する問題:未確定文字のインライン表示がされない

Table of Contents

現象

例えば、Emacs 23.1 では下記のように、別ウィンドウが生成されて変換確定を行う挙動になっていた。 (通常のアプリケーションの感覚では使いにくい)

ime_unfixed_literal_emacs231.png

例えば、Emacs 26.1 では下記のように、MS-IMEの使用時、未確定文字が表示すらされない状態になっており、実用に耐えない。

ime_unfixed_literal_emacs261.png

原因

これはWINDOWSメッセージの WM_IME_XXX のEmacs上の処理の問題である。

オリジナルのEmacsのソースコードでは、ある程度、IME挙動を意識した実装がされているのだが、これが不十分である為、上記の挙動となっていると思われる。

対策

https://productforums.google.com/forum/#!topic/ime-ja/tgXztpe84ok

上記で、24.3での対策について言及されている。

「WM_IME_STARTCOMPOSITION ハンドラ内部で break; するのではなく、goto dflt; すれば完了です。」

このたった1行の変更により、少なくとも未確定の文字はインライン表示されるようになる。

23.1 のソースコード

src/w32fns.c では WM_IME_CHAR、WM_IME_ENDCOMPOSITION しか処理されていない。

24.4 のソースコードと対策の適用

24.4 では WM_IME_STARTCOMPOSITION が処理されている。

上記を参考にして作成したパッチが emacs-24.4-windows-ime-simple.patch である。

emacs244_simple_ime_patch.png

25.1 のソースコードと対策の適用

前バージョンとは WM_IME_STARTCOMPOSITION の処理が若干異なっており、goto dlft; する箇所が増えている。

しかし最終行では行われていない。

作成したパッチが emacs-25.1-windows-ime-simple.patch である。

emacs251_simple_ime_patch.png

なお、ソースコードを見てわかるように該当部分には、「認識済みだが敢えて対応していない」という旨のコメントが記載されている。

We should "goto dflt" here to pass WM_IME_STARTCOMPOSITION to DefWindowProc, so that the composition window will actually be displayed.
But doing so causes trouble with displaying dialog boxes, such as the file selection dialog or font selection dialog.
So something else is needed to fix the former without breaking the latter.  See bug#11732.

”ファイル選択ダイアログ、又は、フォント選択ダイアログの表示に関する問題がある”とのこと。

下記が bug#11732 のスレッドであった。

https://debbugs.gnu.org/cgi/bugreport.cgi?bug=11732

読んでみた。 一旦はコミットした(37e3549)ようなのだが、下記の不具合があって取り消されている。(残念!)

Unfortunately, it looks like that change has a devastating effect on dialog boxes.
Try clicking File->Open File, and then click anywhere inside the file selection dialog that opens: the dialog will disappear from the display!

試してみると、確かに、私の環境でも、ファイルメニューから File->Open File… を行うと、ダイアログが表示されるべきところが表示されない場合がある。 (ミニバッファに Find file: が出てしまう)

私自身は、ファイルメニューを使うことが無いので特に問題ないのだが。。

25.2 のソースコードと対策の適用

前バージョンとはコメント部分しか変更が無い

作成したパッチが emacs-25.2-windows-ime-simple.patch である。

ホーム | 文書トップ | 目次
Created by Emacs 27.1 (Org mode 9.3)