雑文発散

«前の日記(2016-01-02) 最新 次の日記(2016-01-04)» 編集
過去の日記

2016-01-03 [長年日記]

[Emacs] El Capitan での日本語入力時に Emacs 内のカーソル色を変更する

新しい MacBook Pro でも、もちろん Emacs を使っている。Homebrew 用の私家版 Emacs formula を使って、Emacs HEAD に inline-patch を当ててコンパイルしたもの。いまの HEAD のバージョンは、25.1 になっている。

(emacs-version)
"GNU Emacs 25.1.50.1 (x86_64-apple-darwin15.0.0, NS appkit-1404.13 Version 10.11.1 (Build 15B42)) of 2015-12-19"

El Capitan の日本語入力での例の「ライブ変換」が面白くて、そのまま Emacs でも使っている。ただ、そのせいで、Google 日本語入力の時に使っていた Emacs のカスタマイズが動かなくなってしまっていたので、その対応をしてみた。

カスタマイズと言ってもたいしたものではなく、日本語入力の時にはカーソルを赤くし、それ以外の時には青くするくらいのものだ。

(defun suzuki-mac-input-method-decorate (roman-source japanese-source)
  (mac-set-input-method-parameter japanese-source 'title "あ")
  (mac-set-input-method-parameter japanese-source 'cursor-color "red")
  (mac-set-input-method-parameter roman-source 'cursor-color "blue"))

(when (boundp 'mac-input-method-parameters)
  (setq default-input-method "MacOSX")
  (cond
   ;; ことえり
   ((string-match "com.apple.inputmethod.Kotoeri" (mac-get-current-input-source))
    (suzuki-mac-input-method-decorate
     "com.apple.inputmethod.Kotoeri.Roman"
     "com.apple.inputmethod.Kotoeri.Japanese"))
   ;; Google 日本語入力
   ((string-match "com.google.inputmethod.Japanese" (mac-get-current-input-source))
    (suzuki-mac-input-method-decorate
     "com.google.inputmethod.Japanese.Roman"
     "com.google.inputmethod.Japanese.base"))))

(mac-get-current-input-source) で現在の入力ソースが取得できるので、その値が El Capitan の標準日本語入力か Google 日本語入力かによって処理を切り分けている。

ただ、上記のままだと、標準日本語入力と Google 日本語入力を切り替えて使う場合にはうまく動かないという問題がある。Emacs の起動時に使用している日本語入力ソースを元に設定してしまうので、Emacs 起動後に日本語入力ソースを切り替えた場合は正しい挙動にならない。

入力ソースが切り替わったことを検知して設定し直せば良さそうに思うのだけど、Emacs 側で入力ソース切り替えの検知はできなさそうに思う(知らないだけかも)。それができないなら、何かのキー入力のタイミングで (mac-get-current-input-source) を実行してその値によって再設定するとかすれば実現できそうだけど、、、自分的にはどちらか一方しか使わないと思うので、いったんこのままでいいかなという気持ち。

ちなみに既に Yosemite の頃から「ことえり」という名称は無くなった1ようなのだが、(mac-get-current-input-source) で得られる名称には「Kotoeri」という文字が入っている。

まぁ、識別子的なものだと思うので、後方互換性のために変更できない部分なのかもね。

1: OS X Yosemite:日本語入力エンジン「ことえり」を終了し、新しい「日本語IM」を新採用