w32-ime.elのw32-ime-initializeがアレ
w32-ime
IME パッチ付き Windows 版 Emacs と一緒に使う用のフロントエンド。
最近は tr-ime という IME パッチ相当の機能のダイナミックモジュール実装があり、tr-ime をロードした Emacs とでも使うことができる。
w32-imeが提供するw32-ime-initialize関数を呼ぶことで、以下の機能が有効になる。
IME 状態のモードライン表示(非標準な方法)
バッファローカルな IME
w32-ime-initializeのアレなところ
非標準な方法によるIME 状態のモードライン表示機能。
Emacs には「インプットメソッド が有効なとき、モードラインに現在有効なインプットメソッドのタイトル (current-input-method-title) を表示する」機能が標準で入っている。
w32-ime-initializeのやり方はモードラインに独自の要素を追加するようになっていて少し気持ち悪い(個人の感想)。
アレじゃないものを作成
w32-ime-initializeではない別の有効化関数w32-ime-modeを書いてみた。
code:lisp
(define-minor-mode w32-ime-mode
"Use Win32 System IME."
:global t
(if (and (or (eq system-type 'windows-nt) (eq system-type 'cygwin))
(eq window-system 'w32)
(fboundp 'ime-get-mode))
(cond
(w32-ime-mode
(setq default-input-method "W32-IME")
(setq w32-ime-input-method-title "W32") ; override W32-IME input method title
(add-hook 'select-window-functions
(add-hook 'set-selected-window-buffer-functions
(t
(setq default-input-method nil)
(setq w32-ime-input-method-title nil)
(remove-hook 'select-window-functions
(remove-hook 'set-selected-window-buffer-functions
(when (called-interactively-p 'any)
(message "`w32-ime-mode' only works in Windows GUI"))
(setq w32-ime-mode nil)))
コードは gist でも公開している (w32-ime-mode.el)。
使い方
(w32-ime-initialize)の代わりに(w32-ime-mode)を init ファイルに追加する。
機能
インプットメソッドを有効化すると、モードラインの一番左にW32と表示されるようになる。インプットメソッドが無効のときは表示しない。
isearch 中に[W32]のように有効なインプットメソッドがエコーエリアに表示される。C-\でトグルできる。
注意
w32-ime-modeを使う場合は、w32-ime のw32-ime-show-mode-lineやw32-ime-mode-line-state-indicator、w32-ime-mode-line-state-indicator-listに対する設定は意味がないことに注意。
たまに、モードラインにW32が表示されない状態になることがあった(謎)。
まとめ
w32-ime-initializeによるIME状態のモードライン表示機能は非標準的でアレ。
w32-ime-modeでよりEmacs のインプットメソッドっぽく Windows の IME を操作できるようになった。うれしい。
(おまけ)サンプル設定
w32-ime-mode.el を ~/.emacs.d に配置して、tr-ime と一緒に使う場合は以下をinitファイルに追加する。
code:lisp
(unless (package-installed-p 'tr-ime)
(require 'quelpa)
(setq quelpa-checkout-melpa-p nil)
(add-to-list 'quelpa-melpa-recipe-stores
'((w32-ime :fetcher github :repo "trueroad/w32-ime.el")))
(quelpa '(tr-ime :fetcher github :repo "trueroad/tr-emacs-ime-module" :files ("lisp/*.el"))))
(tr-ime-advanced-install)
(require 'w32-ime-mode "~/.emacs.d/w32-ime-mode.el")
(w32-ime-mode)
(MELPA に tr-ime のレシピが含まれたら、quelpa を使わずに単に package-install で tr-ime をインストールすればよい。)