MacのEmacsでemacs-mozcをかなキーでON-OFFさせる裏技


Mac の日本語入力には google 日本語入力を使い、Emacs のときだけ mozc を使っています。
Mac の google 日本語入力は、かなキーで ON/OFF するので、mozc の ON/OFF には、別のキーを割り当てる必要がありますが、
出来ることなら Mac でも Emacs でも、かなキーで IM の ON/OFF できたらと試行錯誤した結果、あんがい簡単に実現できたのでご紹介します。

<!--more-->

## mozc_emacs_helper をインストールする
- google 日本語入力と辞書連携して mozc_emacs_helper を導入できるので辞書管理なども一元化できて便利です。
- 詳しい導入 Tips は、別ページに書いています。
- [mozc_emacs_helper on macOS Sierra](https://snap.textgh.org/201705172115/) 

## google 日本語入力と emacs-mozc とを使い分ける
- Emacs で mozc を使っている時には、google 日本語入力を OFF にしたいですね。
- 下記サイトの記事を参考に init.el に以下のような設定を加ています。
- [mozc-emacs-helper と OSX の IM を連動させる (toggle-input-method, 英数／かなキー)](https://www.inabamasaki.com/archives/1898) 

```lisp
;; 英数キーをエミュレートする
;; https://www.inabamasaki.com/archives/1898
(when (eq system-type 'darwin) 
  (defun my-eisuu-key ()
  "Emulating alphanumeric keys"
  (interactive)
  (call-process "osascript" nil t nil "-e" "tell application \"System Events\" to key code 102"))
  ;; Mozc が起動されたら英数にする
  (add-hook 'mozc-mode-hook 'my-eisuu-key)
  ;; フレームがアクティブになった時英数にする
  (add-hook 'focus-in-hook 'my-eisuu-key))
```

何をしているかというと、下記条件のときに強制的に Mac を英数入力にしているのです。

- Emacs の mozc が起動されたら Mac の入力ソースを英数にする
- 他のフレームから Emacs フレームへ移動したら Mac の入力ソースを英数にする

### ※でもちょっと問題が
- 上記対応をしていてもあとからうっかり、かなキーを押すと google 日本語入力が起動してしまいます。
- Emacs がアクティブなときは、Mac の日本語入力モードを OFF にしたいのですがコマンドがよくわからいのでお手上げでした。

## ⌘英かな.app で、かなキーの振る舞いをカスタマイズする
⌘英かな.app で、Emacs のときだけ、かなキーを強制的に他のキーバインドに変更してしまいます。

![Alt Text](https://c1.staticflickr.com/5/4493/23618419358_5b1eb523cc_z.jpg) 


* かな → super+j (super+j に```toggle-input-method```を割り当てている)
* Command_L → control+g (Emacs で control+g をよく使うので便利)
* Command_R → super+m (mozc-temp の mozc-temp-convert を設定している)

かなキーを super+j に変更することで Emacs での mozc の ON/OFF が可能になり、かつ google 日本語入力の ON/OFF ができなくなります。


### ※ここからが裏技です
- [⌘英かな.app](https://ei-kana.appspot.com/)は、除外アプリを設定できます。
- google 日本語入力を使いたいアプリを全て除外アプリに登録します。
- つまり、かなキーをカスタマイズして使うのは、Emacs だけという設定になるわけです。
- 残念ながら、この裏技が使えるのは、かなキーのある JIS キーボードだけ
- US キーボードの場合は、別のアルゴリズムを考える必要があります。
- かなり強引な手法ですが、快適さにはかえられません。

## 【参考】
私のEmacsのmozc設定を貼っておきます。

````lisp
;; Bild mozc_emacs_helper on macos sierra
;; https://gist.github.com/ynkjm/7d6f22bb4338f84b1b287bf9abe79001
;; ===============================================================
(setq default-input-method "japanese-mozc")
(custom-set-variables '(mozc-leim-title " あ"))
(use-package mozc-cursor-color)

;; keyremap "s-j" to "kana" by eisuu.app for mac
(when (eq system-type 'darwin)
  (bind-key "s-j" 'toggle-input-method))
;; For linux
(when (eq system-type 'gnu/linux) 
  (bind-key* "<hiragana-katakana>" 'toggle-input-method))

;; Turn to key code 102 when forcus in to emacs
(when (eq system-type 'darwin) 
  (defun my-eisuu-key ()
  (interactive)
  (call-process "osascript" nil t nil "-e" "tell application \"System Events\" to key code 102"))
  (add-hook 'focus-in-hook 'my-eisuu-key))

;; Important settings
(defadvice toggle-input-method (around toggle-input-method-around activate)
  "Input method function of key-chord.el to not be set to nil."
  (let ((input-method-function-save input-method-function))
    ad-do-it
    (setq input-method-function input-method-function-save)))

;; mozc-temp
;; =================================================
;; Keyremap "s-m" to "command_r" by eisuu.app for mac
(when (eq system-type 'darwin)
(bind-key "s-m" 'mozc-temp-convert))
;; For linux
(when (eq system-type 'gnu/linux)
  (bind-key* "<henkan>" 'mozc-temp-convert))
```