Emacsを22系(Carbon)から23系(Cocoa)へ乗り換え.
長い間,dmg 形式で配布されているCarbonEmacsを使っていたのだけれど,いつの頃からか置換などすると妙に遅いと感じるようになった.気のせいなのか,私がなんらかしでかしたのかは不明.
テキストエディタで反応が遅いのはストレス溜まる.AppleはアプリのCocoa化を推奨しているようだし,本家Emacsも23系からCocoaに移ったということで,乗り換えた.
ビルド
inline_patch-23.2-beta3.tar.gz と emacs-23.2a.tar.gz を引っ張ってきて展開してパッチ当てて configure して make bootstrap して make install.
Snow Leopard だと,Fink とか MacPorts とか使わんでも,Apple純正の状態でもビルドできるっぽい.Lion のことは判らない.
環境の上書き
Snow Leopard には,/usr/bin/emacs-21.2.1 という,いったいいつのだよ,という emacs が入っている.
こいつが呼び出されないよう, ~/.profile に細工する.
alias emacsclient='/Applications/Emacs.app/Contents/MacOS/bin/emacsclient' alias emacs='open /Applications/Emacs.app'
ssh か何かで入った時には emacs がトチ狂いような気がするけれど,そのときは手動で unalias するからいいや.
--daemon を使わずに emacsclient を使う
Emacs 23系は,emacsclient を使うときに幸せになれるよう, --daemon オプションが追加になっている.
デフォルトのフォントでも気にならない人は,ログイン時にでも --daemon オプションで起動すればよいはず.
しかし,フォントを変えるよう init.el にゴニョゴニョしている人は,「error: Fontset `tty' does not exist」などいうエラーを喰らう.
ぐぐったところ,「(set-fontset-font)の前に(display-graphic-p) で判別するとエラーにならないよ」ということのよう.実際エラーは取れるのだけれど,emacsclient で起動したフレームにはデフォルトのフォントしか出てこない.
そこで,--daemon を使わない方法を考えた結果,バッドノウハウが一つ浮かんだ.
まず,.profile に下記の行を加えておく.
export ALTERNATE_EDITOR=~/bin/emacs.sh
この環境変数は,emacsclient が emacs を探せなかったときに呼び出すエディタを指定するためにある.これを使ってちょっとしたトリックを行う.
~/bin/emacs.sh は,下記のようにしておく.
#!/bin/sh open -a Emacs.app sleep 1 /Applications/Emacs.app/Contents/MacOS/bin/emacsclient $*
open コマンドは,起動をかけると直ぐに終了してしまうので,1秒のスリープを入れてある.1秒以内にEmacs が起動しない場合でも,次に実行される emacsclient が再び ~/bin/emacs.sh を呼び出すので,正常系では数秒以内に emacsclient の処理は成功する*1.
これも,ssh などでログインして GUI の無い状態で作業すると破綻する.判別の方法があればよいのだけれど.