「W32-IME を快適に使うための設定」の編集履歴(バックアップ)一覧はこちら

W32-IME を快適に使うための設定」の最新版変更点

追加された行は青色になります。

削除された行は赤色になります。

 &bold(){■ Windows版 Emacs 共通の設定}
 ----
 
 &bold(){【お知らせ】}
 ----
 
 &bold(){<2020/04/15 追記>}
-IME を無効にするキー設定」と「IME を有効にするキー設定」を追加しました。初期設定では、「無変換」キーと「変換」キーを割り当てています。C-o の設定はトグル動作となっていますが、設定の中のコメントを見直すことで変更可能です。お勧めは、C-o のトグル設定は残して C-j に英数への切替えを設定するものです。日本語への切替えが C-o によるトグル操作による切替えの他、C-j C-o でも可能となります。(helm 利用の際に C-j がバッティングしますが、C-o で逃げれます。)
+IME を無効にするキー設定」と「IME を有効にするキー設定」を追加しました。初期設定では、「無変換」キーと「変換」キーを割り当てています。C-o の設定はトグル動作となっていますが、設定の中のコメントを見直すことで変更可能です。お勧めは、C-o のトグル設定は残して C-j に英数への切替えを設定するものです。日本語への切替えが C-o によるトグル操作による切替えの他、C-j C-o での一発切替えが可能となります。(helm 利用の際に C-j がバッティングしますが、C-o で逃げれます。)
 なお、次の設定も同じ操作性にできるように見直しました。
 ・[[Windows の操作を Emacs のキーバインドで行うための設定 (Keyhac版)]]
 
 &bold(){<2019/05/17 追記>}
 wdired 利用時に C-o による日本語入力を可能とする設定を追加しました。 
 
 &bold(){<2015/12/07 追記>}
 本設定とは直接関係ありませんが、isearch でキルリングを張り付けるには、C-s RET C-y とすればいいのですね。知りませんでした..。
 http://kouritool.com/itdiary/emacs%E3%81%A7%E5%BC%B5%E3%82%8A%E4%BB%98%E3%81%91%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E6%A4%9C%E7%B4%A2/
 
 &bold(){<2015/10/30 追記>}
 helm を起動したときに IME が OFF にならなくなったので、helm-minibuffer-set-up-hook の設定を追加しました。
 
 &bold(){<2015/09/17 追記>}
 wrap-function-to-control-ime を利用した際にもカーソルカラーが変更となるように、IME ON/OFF時のカーソルカラーの設定方法を変更しました。
 
 &bold(){<2015/09/16 追記>}
 全面的に設定の見直しを行いました。これでかなり、「[[emacs-mozc を動かすための設定(Emacs 設定編)]]」の使用感に近づいたと思います。
 
 &bold(){【本題】}
 ----
 
 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)))
 
 以下は、helm を利用する場合に設定してください。「[[helm を使うための設定]]」でも紹介しています。
  ;; 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 による日本語入力を可能とする設定を追加した。 
 
 ----
 #javascript(){{
 <script>
   (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
   (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
   m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
   })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
 
   ga('create', 'UA-40267130-1', 'atwiki.jp');
   ga('send', 'pageview');
 
 </script>
 }}