最終更新日: 2017-04-22 土 23:47
ホーム | 文書トップ | 目次

NTEmacs IME使用時の注意

Table of Contents

概要

そもそもEmacsは多言語対応されているのだが、現状、Windowsかつ日本語で使用する場合、主にIMEの挙動に難がある。

後述の、いわゆるIMEパッチでは、IMEにまつわるいくつかの挙動の改善を行うソースコードが提供されている。

しかし、私の環境ではIMEパッチを適用したビルドでは強制終了する等の不具合があった為、”未確定文字のインライン表示”という最低限の対策のみ行ってビルドしている。

IME使用時に発生する問題:未確定文字のインライン表示

現象

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

ime_unfixed_literal_emacs231.png

なお、(私が確認した限り)Emacs 24.4 以降のバージョンでは、MS-IMEの使用時、未確定文字が表示すらされない状態になっている。

原因

これは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 である。

IMEパッチ

IMEパッチとは

上記の問題を含め、IMEにまつわるいくつかの挙動の改善を行うソースコード変更を適用するものが、いわゆるIMEパッチである。

IMEパッチの歴史

IMEパッチは、これまで有志の方々が公開されてきた。

元は、Meadowの開発にも多く関わられている三好氏がパッチを公開されていた。(2001年から2003年あたり)

その後、KOBAYASHI Yasuhiro氏のページで公開されていたものがあった。(2004年から2007年あたり)

その後、NTEmacs JP Projectのページで、Emacs 23.1用のパッチが公開されていた。(2008年あたり)

その後、23.2、23.3、23.4、24.1、24.2、24.3 に関しては、gnupack でパッチが公開されていた。(2009年から2015年あたり)

その後、24.4 以降では rzl24ozi 氏がパッチを公開されている。

IMEパッチの機能:未確定文字のインライン表示

通常の日本語対応のアプリケーションでは、意識することは無いのだが、「未確定文字のインライン表示」というのは下記のような挙動のことを指している。

IMEを有効にして文字を入力したときに、(変換するしないを判断して)確定する前の文字列が、カーソル位置にそのまま表示されるのが、使いやすい。

ime_unfixed_literal.png

IMEパッチの機能:IME有効時のコマンド入力を可能にする

IMEの使用にあたって、Emacsとしてのコマンド入力に関しても課題がある。

例えば、IME有効の状態で、C-x 2 で split-window-below を行おうとすると、C-x まではいいのだが、2が未確定文字として入力されてしまい、コマンドとして認識されない。 いわゆるIMEパッチではこの部分の対応がされている。 (ソースは未確認)

ctrl_x_2_ng.png

IMEパッチの機能:IME状態のmodeline表示

Meadow由来の lisp/international/w32-ime.el で実現されている機能。

OSのIMEの状態表示にて代用はできる。

w32-ime-mode-line-state-indicator、w32-ime-mode-line-state-indicator-list 等の設定をしない場合

  • IME無効時

ime_invalid_default.png

  • IME有効時

ime_valid_default.png

後述の設定をすれば、下記のような表示にすることができる

  • IME無効時

ime_invalid.png

  • IME有効時

ime_valid.png

IMEパッチの設定

Meadow由来の lisp/international/w32-ime.el を有効にし、必要な設定をする

設定例

(when (locate-library "w32-ime")
    (progn
      (w32-ime-initialize)
      (setq default-input-method "W32-IME")
      (setq-default w32-ime-mode-line-state-indicator "[--]")
      (setq w32-ime-mode-line-state-indicator-list '("[--]" "[あ]" "[--]"))
))
ホーム | 文書トップ | 目次
Created by Emacs 25.2.1 (Org mode 8.2.10)