前回、SKK のインストールでつまづいていると書いた(→ Cocoa Emacs を使ってみたい)。いろいろと調べ(ググり)、あれこれ試して、ひとまず対処方法が決まった。
ちなみに、この記事は Cocoa Emacs (安定板) で書いている。
SKK インストールにおける問題点
「紹介マニア」に書かれている手順にしたがい SKK を ~/.emacs.d/lisp
にインストールした。しかし、(Cocoa Emacs を再起動して)C-x C-j を叩いても SKK が起動しない。C-x C-j is undefined
と出るばかり。どうも、SKK がロードされていない上に、load-path
上に見つからない様子だ(SKK を load-library
でロードしようとするとわかる)。
~/.emacs.d/lisp
は別にデフォルトで load-path
に入っているわけではないらしい。実際、上述のページの作者が公開している初期化ファイルを見ると、このディレクトリを load-path
に追加するコードがあった。
~/.emacs.d/lisp/{apel,skk}
を load-path
に追加すると、load-library
で SKK を(手動で)ロードできるようになった。初期化ファイルで (require 'skk-autoloads)
とやれば自動でロードできるようにもなった。
いや、でもまだおかしい。「紹介マニア」には「init.el
に記述する必要はありません」と書かれているし、SKK (DDSKK 14.0.92) のマニュアルにも同様に書かれている。いったい、何が違うんだ?
SKK の自動ロードの仕組み
いろいろと調べた(ググった)結果、SKK が emacs の初期化ファイルの記述に関係なく自動ロードされるのは以下の仕組みであることがわかった。
- emacs は
normal-top-level
という関数の中で、load-path
に設定されたディレクトリ(とそのサブディレクトリ)からleim-list.el
というファイルを探し、ロードする。 - DDSKK は SKK のロードと基本的な設定を
skk-setup.el
というファイルに書き込み、これをロードするための (SKK専用の)leim-list.el
を生成する。 - DDSKK のインストーラは、上記 2 のファイルを(他のファイルとともに) インストールする。
よって、SKK の leim-list.el
を normal-top-level
が見つけてくれれば、めでたく SKK が自動ロードが実現する。問題は normal-top-level
の実行されるタイミングだ。emacs の初期化ファイル読み込みよりも後なら、初期化ファイル中で load-path
に追加したディレクトリも探索の対象になる。一方、初期化ファイル読み込みよりも前なら探索してくれない。試してみたところ、どうも後者らしい。
Cocoa Emacs に SKK を自動ロードするようにインストール
SKK が自動ロードされるためには、leim-list.el
と skk-setup.el
という 2 つのファイルが、デフォルトで load-path
にふくまれているディレクトリに置かれていれば良い。
簡単かつ確実な方法は SKK (と APEL) を Emacs.app の中にインストールしてしまうことだ。
まず、APEL インストールの実行結果を示す。
[imac] mnbi% cd apel-10.8 [imac] mnbi% make install EMACS=/Applications/Emacs.app/Contents/MacOS/Emacs /Applications/Emacs.app/Contents/MacOS/Emacs -batch -q -no-site-file \ -l APEL-MK -f compile-apel \ NONE NONE NONE [...snip...] LISPDIR=/Applications/Emacs.app/Contents/Resources/site-lisp VERSION_SPECIFIC_LISPDIR=/Applications/Emacs.app/Contents/Resources/site-lisp [...snip...] install.elc -> /Applications/Emacs.app/Contents/Resources/site-lisp/apel
そして、DDSKK のインストールの実行結果はこうなる。
[imac] mnbi% cd ../ddskk-14.0.92 [imac] mnbi% sh make install EMACS=/Applications/Emacs.app/Contents/MacOS/Emacs /Applications/Emacs.app/Contents/MacOS/Emacs -batch -q -no-site-file \ -l SKK-MK -f SKK-MK-install [...snip...] leim-list.el -> /Applications/Emacs.app/Contents/Resources/site-lisp/skk skk-setup.el -> /Applications/Emacs.app/Contents/Resources/site-lisp/skk [...snip...]
SKK を自動ロードする仕組みというべき leim-list.el
と skk-setup.el
が Emacs.app 内のにコピーされているのがわかる。
この方法の問題点は、Cocoa Emacs をビルドするたびに、SKK (と APEL) をインストールし直す必要がある、ということだ(コピーでごまかすこともできるが)。
安定板(23.2)の問題点
セカンドディスプレイにウィンドウを置くと、top の位置がおかしい
ウィンドウを一番上に置いた状態で、frame-parameters
を使って表示させると (top . 160)
となる。正しくは (top . 0)
となるべき。実際、Carbon Emacs ではそうなる。
そのくせ、初期化時に default-frame-alist
に (top . 160)
を設定すると、ウィンドウが下にずれる。表示だけが間違っているということか?
ウィンドウの高さに制限がかかる
これはバグだとは言えないが、少し困る。
初期化ファイル中で default-frame-alist
に height
を設定する方法だと、ウィンドウの高さをセカンドディスプレイいっぱいにできないようだ。現在のフォントの設定だと最大 92 行のウィンドウにできるはずが、初期化時には 76 行相当になってしまう。この 76 行が どうやらメインディスプレイ側での最大の高さになっているらしい(27 インチの高さからメニューとドックの高さを除いた分)。つまり、Cocoa Emacs 起動時にはウィンドウがメイン側で開くため、その大きさで制約がかかってしまう、ということ。実際、シネマ側にウィンドウが移動してから新しいウィンドウを開く(C-5-2)と 92 行になる。
これって回避策はあるのか?
Cocoa Emacs は AppleScript に反応しないようだから、起動後に AppleScript で操作することもできない。今のところ、起動後に手作業で広げるしかない。ウチでは Emacs は Safari 等と同様、基本立ち上げっぱなしだから我慢できないわけでもない。
その他、覚え書き
前回(→ Cocoa Emacs を使ってみたい)で、64 ビットを使いたいから開発版をビルドするゾ、と書いた。あれから確認してみたところ、安定板(23.2)も 64 ビットでビルドされていた(アクティビティモニタ.app で確認)。
他にもやりかけのことがあるし、「Emacs テクニックバイブル」も気になるし、Cocoa Emacs の開発版に手を出すのは少し先になりそうだ。
関連リンク
- Emacs23 (Cocoa Emacs) 入門から中毒まで (紹介マニア)
0 件のコメント:
コメントを投稿