プログラム系統備忘録ブログ

記事中のコードは自己責任の下でご自由にどうぞ。

Emacsでミニバッファに入る時IMEを一時的にOFFにする

環境はWindows7、gnupack_devel-9.01の"GNU Emacs 24.1.1 (i386-mingw-nt6.1.7601) of 2012-07-16 on GNUPACK"。
他の環境ではIME関連の関数が違うかも知れません。

インクリメンタル検索でもanythingでもmigemoを使うので、ミニバッファ入力時に日本語入力である必要性がなくなりました。(anythingでmigemoを使う方法は過去の記事にあります)

  • ミニバッファ入力時にはIMEを必ずOFFにする
  • ミニバッファから復帰時には直前にIMEがONだった場合のみONに戻す

なコードのメモ。

(defvar my-temp-ime-mode nil)
(defun my-into-minibuffer-func()
  (setq my-temp-ime-mode (ime-get-mode))
  (ime-force-off))
(defun my-quit-minibuffer-func()
  (if my-temp-ime-mode
	  (ime-force-on))
  (setq my-ime-temp nil))
;; 通常のミニバッファ
(add-hook 'minibuffer-setup-hook 'my-into-minibuffer-func)
(add-hook 'minibuffer-exit-hook 'my-quit-minibuffer-func)
;; インクリメンタル検索
(add-hook 'isearch-mode-hook 'my-into-minibuffer-func)
(add-hook 'isearch-mode-end-hook 'my-quit-minibuffer-func)

(minibuffer-setup-hookに引っ掛ける関数にエラー置いたまま再起動したらエライ目に遭うので注意。「保存時にバイトコンパイルする」設定だった場合、emacs -qで起動して編集しても.elをバイトコンパイルするか.elcを消さないと反映されません!)