Cocoa Emacs (Emacs 23)対応のIMEパッチをATOK2008をサポートする方法

org-rememberを年明けから使いたいと思い、org-rememberを標準搭載しているCocoa Emacsに乗り換えることにした。今回、Cocoa Emacsは安定版の23.2を使うことにして、IMEパッチも導入することにした。参考にしたのは以下のサイト。
Emacs23 (Cocoa Emacs) 入門から中毒まで : 紹介マニア
でも、IMEパッチを当てたところ、日本語入力には問題がなかったんだけど、入力モードを切り替えてもモードラインの表示が「U」<=>「MacU」と切り替わるだけ。「U」<=>「あU」と切り替わることを期待していたんだけれども。ちょっと調べてみたところ、Cocoa Emacs対応のIMEパッチはATOK22には対応しているけれど、僕が使っているATOK21(ATOK2008)には対応していないとのこと。なので、日本語入力中のカーソルのタイプ・色とかの変更もできない。
試行錯誤の結果、IMEパッチを当てた後で、Carbon Emacsソース:lisp/term/ns-win.elを編集し、コンパイルし直せばよいことがわかった。以下はその方法。ちなみに、ATOK21は以下の16通りの入力メソッドを提供するけれど(*scratch*バッファでmac-get-input-source-listを実行)、今回対応したのはIMEパッチが対応するATOK22の入力メソッド4通りのみ。

"com.justsystems.inputmethod.atok21"
"com.justsystems.inputmethod.atok21.Roman"
"com.justsystems.inputmethod.atok21.Japanese"
"com.justsystems.inputmethod.atok21.Japanese.KigoInput"
"com.justsystems.inputmethod.atok21.Japanese.CodeInput"
"com.justsystems.inputmethod.atok21.Japanese.HalfWidthInput"
"com.justsystems.inputmethod.atok21.Japanese.HalfWidthEisu"
"com.justsystems.inputmethod.atok21.Japanese.FullWidthEisu"
"com.justsystems.inputmethod.atok21.Japanese.HalfWidthKanaKotei"
"com.justsystems.inputmethod.atok21.Japanese.FullWidthEisuKotei"
"com.justsystems.inputmethod.atok21.Japanese.KatakanaKotei"
"com.justsystems.inputmethod.atok21.Japanese.HiraganaKotei"
"com.justsystems.inputmethod.atok21.Japanese.HalfWidthEiji"
"com.justsystems.inputmethod.atok21.Japanese.HalfWidthKana"
"com.justsystems.inputmethod.atok21.Japanese.FullWidthRoman"
"com.justsystems.inputmethod.atok21.Japanese.Katakana"

Carbon Emacs (Emacs23) ATOK21対応手順

上記ページの手順にほぼ従ってます。

cd ~/tmp
mkdir emacs23-build
cd emacs23-build
curl -O http://ftp.gnu.org/pub/gnu/emacs/emacs-23.2.tar.gz
curl -O http://jaist.dl.sourceforge.jp/macemacsjp/47986/inline_patch-23.2-beta3.tar.gz
tar xvfz inline_patch-23.2-beta3.tar.gz
tar xvfz emacs-23.2.tar.gz
cd emacs-23.2
patch -p 0 < ../inline_patch-23.2-beta3/emacs-inline.patch
vi lisp/term/ns-win.el

ここで、「mac-input-method-parameters」変数を定義しているところのatok22の前に以下の20行を挿入。

    ("com.justsystems.inputmethod.atok21.Roman"
     (title . "A")
     (cursor-color)
     (cursor-type))
    ("com.justsystems.inputmethod.atok21.Japanese"
     (title . "あ")
     (cursor-color)
     (cursor-type))
    ("com.justsystems.inputmethod.atok21.Japanese.Katakana"
     (title . "ア")
     (cursor-color)
     (cursor-type))
    ("com.justsystems.inputmethod.atok21.Japanese.FullWidthRoman"
     (title . "英")
     (cursor-color)
     (cursor-type))
    ("com.justsystems.inputmethod.atok21.Japanese.HalfWidthEiji"
     (title . "半英")
     (cursor-color)
     (cursor-type))

続いてコンパイル

./configure --with-ns --without-x
make bootstrap
make install
open nextstep/Emacs.app

まとめ

ns-win.elはEmacs.app/Contents/Resources/lisp/termにも入っているんだけれど、このファイルを書き換えてバイトコンパイルしただけじゃぁだめで、Emacs.app自体をコンパイルしないとダメだった。
今回の問題を解決するだけであれば、この簡単な対応で十分だけど、パッチ全体がどうなってるか、きちんと把握していないので動作はわからない。IMEパッチチームに依頼した方がいいと思うけど、古いATOKには対応してもらえるのかしら。

後日談

後日ATOK2010 for Macを購入した。ATOK2010の内部バージョンはatok23で、これもEmacs 23ではサポートされていない。ただ、上記方法で同様にEmacs 23でも使えるようになった。