■ Windows版 Emacs 共通の設定
【お知らせ】
<2020/04/15 追記>
IME を無効にするキー設定」と「IME を有効にするキー設定」を追加しました。初期設定では、「無変換」キーと「変換」キーを割り当てています。C-o の設定はトグル動作となっていますが、設定の中のコメントを見直すことで変更可能です。お勧めは、C-o のトグル設定は残して C-j に英数への切替えを設定するものです。日本語への切替えが C-o によるトグル操作による切替えの他、C-j C-o での一発切替えが可能となります。(helm 利用の際に C-j がバッティングしますが、C-o で逃げれます。)
なお、次の設定も同じ操作性にできるように見直しました。
<2019/05/17 追記>
wdired 利用時に C-o による日本語入力を可能とする設定を追加しました。
<2015/10/30 追記>
helm を起動したときに IME が OFF にならなくなったので、helm-minibuffer-set-up-hook の設定を追加しました。
<2015/09/17 追記>
wrap-function-to-control-ime を利用した際にもカーソルカラーが変更となるように、IME ON/OFF時のカーソルカラーの設定方法を変更しました。
【本題】
W32-IME を快適に使うための設定です。
gnupack を利用している場合は、init.el の次のセクションにある設定を置き換えて(コメント化して)ご利用ください。
- gnupack-11系: 「@ime」セクション
- gnupack-12,13系: 「@ language - input method」セクション、「@ screen - cursor」セクション、「@ search - isearch」セクションの後半
(require 'wdired)
;; IMEの初期化
(w32-ime-initialize)
;; 標準IMEの設定
(setq default-input-method "W32-IME")
;; IME状態のモードライン表示の設定
(setq-default w32-ime-mode-line-state-indicator "[Aa]")
(setq w32-ime-mode-line-state-indicator-list '("[Aa]" "[あ]" "[Aa]"))
;; IME OFF時の初期カーソルカラーの設定
(set-cursor-color "red")
;; IME ON/OFF時のカーソルカラーの設定
;; (wrap-function-to-control-ime コマンド内等で、ime-force-on や ime-force-off が単独で
;; 呼ばれた際もカーソルカラーの変更が機能するように hook ではなく advice に変更した)
(advice-add 'ime-force-on
:before (lambda (&rest args)
(set-cursor-color "green")))
(advice-add 'ime-force-off
:before (lambda (&rest args)
(set-cursor-color "red")))
;; カーソルの点滅を OFF にする
(blink-cursor-mode 0)
;; バッファ切り替え時に IME の状態を引き継がない
(setq w32-ime-buffer-switch-p t)
;; minibuffer に入った時、IME を OFF にする
(add-hook 'minibuffer-setup-hook
(lambda ()
(deactivate-input-method)))
(add-hook 'helm-minibuffer-set-up-hook
(lambda ()
(deactivate-input-method)))
;; IMEの制御付きにラップする
;;(上記の minibuffer の設定が機能しない関数について設定する)
;; http://sanrinsha.lolipop.jp/blog/2010/07/emacs-1.html#i-4
(wrap-function-to-control-ime 'y-or-n-p nil nil)
(wrap-function-to-control-ime 'map-y-or-n-p nil nil)
(wrap-function-to-control-ime 'read-char nil nil)
;; isearch の設定
;; http://d.hatena.ne.jp/ksugita0510/20110103/p1
;; http://highmt.wordpress.com/2010/10/25/isearch%E3%81%A7%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%85%A5%E5%8A%9B%E3%82%92%E3%82%84%E3%82%8A%E3%82%84%E3%81%99%E3%81%8F%E3%81%99%E3%82%8B%E3%83%91%E3%83%83%E3%83%81/
(defun w32-isearch-update ()
(interactive)
(isearch-update))
(add-hook 'isearch-mode-hook
(lambda ()
(setq ime-state (ime-get-mode))
(when ime-state
(w32-ime-state-switch nil))
(setq w32-ime-composition-window (minibuffer-window))))
(add-hook 'isearch-mode-end-hook
(lambda ()
(unless (eq ime-state (ime-get-mode))
(if ime-state
(w32-ime-state-switch t)
(w32-ime-state-switch nil)))
(setq w32-ime-composition-window nil)))
(defun enable-input-method (&optional arg interactive)
(interactive "P\np")
(if (not current-input-method)
(toggle-input-method arg interactive)))
(defun disable-input-method (&optional arg interactive)
(interactive "P\np")
(if current-input-method
(toggle-input-method arg interactive)))
(defun isearch-enable-input-method ()
(interactive)
(if (not current-input-method)
(isearch-toggle-input-method)
(cl-letf (((symbol-function 'toggle-input-method)
(symbol-function 'ignore)))
(isearch-toggle-input-method))))
(defun isearch-disable-input-method ()
(interactive)
(if current-input-method
(isearch-toggle-input-method)
(cl-letf (((symbol-function 'toggle-input-method)
(symbol-function 'ignore)))
(isearch-toggle-input-method))))
(define-key isearch-mode-map (kbd "<compend>") 'w32-isearch-update)
(define-key isearch-mode-map (kbd "<kanji>") 'isearch-toggle-input-method)
;; IME をトグルするキー設定
(global-set-key (kbd "C-o") 'toggle-input-method)
(define-key isearch-mode-map (kbd "C-o") 'isearch-toggle-input-method)
(define-key wdired-mode-map (kbd "C-o") 'toggle-input-method)
;; IME を無効にするキー設定
(global-set-key (kbd "<non-convert>") 'disable-input-method) ; 無変換キー
(define-key isearch-mode-map (kbd "<non-convert>") 'isearch-disable-input-method)
(define-key wdired-mode-map (kbd "<non-convert>") 'disable-input-method)
;; (global-set-key (kbd "C-j") 'disable-input-method)
;; (define-key isearch-mode-map (kbd "C-j") 'isearch-disable-input-method)
;; (define-key wdired-mode-map (kbd "C-j") 'disable-input-method)
;; IME を有効にするキー設定
(global-set-key (kbd "<convert>") 'enable-input-method) ; 変換キー
(define-key isearch-mode-map (kbd "<convert>") 'isearch-enable-input-method)
(define-key wdired-mode-map (kbd "<convert>") 'enable-input-method)
;; (global-set-key (kbd "C-o") 'enable-input-method)
;; (define-key isearch-mode-map (kbd "C-o") 'isearch-enable-input-method)
;; (define-key wdired-mode-map (kbd "C-o") 'enable-input-method)
;; wdired 終了時に IME が ON になっていたら OFF にする
(advice-add 'wdired-finish-edit
:after (lambda (&rest args)
(deactivate-input-method)))
;; w32-ime-buffer-switch-p を t にして helm を利用する場合に、ミニバッファで漢字を正常に
;; 使えるようにする対策(この設定がないと、ime が勝手に切り替わったりする)
(advice-add 'helm
:around (lambda (orig-fun &rest args)
(let ((select-window-functions nil))
(apply orig-fun args))))
<変更履歴>
- 2014/10/27 このページを作成した。
- 2014/11/04 wdired を使う場合の設定を追記した。
- 2014/11/11 「helm を使うための設定」でも紹介している helm で W32-IME を使う場合に推奨する設定を追記した。
- 2015/09/07 ミニバッファに漢字を出す設定(MS-IME を使っている場合)の設定が不要となったようなので削除した。
- 2015/09/13 advice を Emacs-24.4 以降の書式に見直した。
- 2015/09/15 全面的に設定の見直しを行った。
- 2015/09/17 wrap-function-to-control-ime を利用した際にもカーソルカラーが変更となるように、IME ON/OFF時のカーソルカラーの設定方法を変更した。
- 2015/09/20 helm の advice の設定で、w32-ime-composition-window を (minibuffer-window) に設定(let)するのは不要になっていたようなので削除した。
- 2015/10/30 helm を起動したときに IME が OFF にならなくなったので、helm-minibuffer-set-up-hook の設定を追加した。
- 2019/05/17 wdired 利用時に C-o による日本語入力を可能とする設定を追加した。
最終更新:2020年04月18日 08:38