2012年10月14日日曜日

HomebrewでCocoa Emacs 24.2をインストールした

(追記)インラインパッチが取り込まれたので、現時点で24.3をインストールするには、ただ単にbrew install --cocoa --japanese emacsとすればいいようだ(リンク先では--srgb--with-gnutlsも指定している)。起動時のredo+.elのエラーは最新版に更新することで解決した。

HomebrewでインストールしたCocoa Emacsを24.2にアップデートした。23.3のときと同じくFormulaを書き換えて、インラインパッチ(IMEパッチ)を当てた。ポップアップで落ちるバグは直っていないため、今回もCocoa Emacs が落ちるのパッチを使わせて頂いた。

ちなみに、インラインパッチはCocoa Emacsで日本語を使うなら、何も考えずにとりあえず当てておくべきメジャーなパッチ。また、フルスクリーンパッチ(M-x ns-toggle-fullscreenでフルスクリーンになる)はすでに含まれているので自分で当てる必要はない。

Formulaは次のように変更した。/usr/local/はHomebrewのローカルリポジトリになっているので、/usr/local/git diffをした結果をそのまま載せている。

(2013/2/11 追記)パッチがリジェクトされてしまうのを修正した。

diff --git a/Library/Formula/emacs.rb b/Library/Formula/emacs.rb
index 3e0cd5b..13f4e12 100644
--- a/Library/Formula/emacs.rb
+++ b/Library/Formula/emacs.rb
@@ -28,7 +28,8 @@ class Emacs < Formula
   def patches
     # Fullscreen patch works against 24.2; already included in HEAD
     if build.include? "cocoa" and not build.head?
-      "https://raw.github.com/gist/1746342/702dfe9e2dd79fddd536aa90d561efdeec2ba716"
+      { :p1 => "https://raw.github.com/gist/1746342/702dfe9e2dd79fddd536aa90d561efdeec2ba716",
+        :p0 => ["http://sourceforge.jp/projects/macemacsjp/svn/view/inline_patch/trunk/emacs-inline.patch?view=co&root=macemacsjp", DATA] }
     end
   end
 
@@ -141,3 +142,15 @@ class Emacs < Formula
     return s
   end
 end
+__END__
+--- src/nsterm.m.orig
++++ src/nsterm.m
+@@ -4263,6 +4263,8 @@
+ 
+ - (void)changeInputMethod: (NSNotification *)notification
+ {
++  if (!emacs_event)
++    return;
+ 
+   struct frame *emacsframe = SELECTED_FRAME ();
+ 

上記のパッチを適用するにはファイルに保存して、

$ cd /usr/local/
$ patch -p1 < emacs24.2.patch

のようにする(git applyでもいい)。

また、比較的新しいautoconfが必要なので先にインストールしておく。

$ brew install autoconf
$ brew link autoconf

Emacsは次のようにしてインストールした。すでに古いバージョンがインストールされている場合は、brew installではなくbrew upgradeEmacs.appは、/usr/local/bin/emacsなどのシンボリックリンクが切れてしまうけど、自分はターミナルで使用することはないのでmvした。

$ PATH=/usr/local/bin:$PATH brew install emacs --cocoa
$ mv /usr/local/Cellar/emacs/24.2/Emacs.app /Applications

Mac固有の設定。一般的に必要とされるのはこんなところだと思う。

(setq default-input-method "MacOSX") ;; ことえりを使う
(setq ns-command-modifier (quote meta)) ;; CommandキーをMetaに
(setq ns-alternate-modifier (quote super)) ;; OptionキーをSuperに
(setq ns-pop-up-frames nil) ;; 新しいウィンドウでファイルを開かない
(define-key global-map [165] nil)
(define-key global-map [67109029] nil)
(define-key global-map [134217893] nil)
(define-key global-map [201326757] nil)
(define-key function-key-map [165] [?\\])
(define-key function-key-map [67109029] [?\C-\\])
(define-key function-key-map [134217893] [?\M-\\])
(define-key function-key-map [201326757] [?\C-\M-\\])

23.3のとき指定していた(mac-add-key-passed-to-system 'shift)(define-key global-map [ns-drag-file] 'ns-find-file)は、24.2では必要ないようだ。

(mac-translate-from-yen-to-backslash)delete-horizontal-spaceなどのキーバインディングでM-¥ is undefinedとなってしまうためやめた。代わりにdefine-keyがたくさん並ぶことになった。詳細はRe: バックスラッシュの入力はどうすれば (Macemacsjp-users 1126) - MacEmacs JP - OSDNを参照。円記号を直接入力するのはあまりよろしくないということで、他にやり方もわからないため、(kbd "M-¥")などと書いてからM-x eval-print-last-sexpとしてひとつずつ値を調べた。

フォント設定はこちらのページが参考になる。