2011-03-22

Emacs Mac port を使う

Emacs Mac port とは

Carbon Emacs (GNU Emacs 22) をベースとして、 GUI 部分に Cocoa API を取り入れ GNU Emacs 23 に対応させたものです。64bit 版もビルドできます。

Carbon Emacs のメインテナーをされていた YAMAMOTO Mitsuharu 氏によってパッチという形で提供されています。
パッチはここで入手できます。
ftp://ftp.math.s.chiba-u.ac.jp/emacs/

Cocoa Emacs (GNU Emacs 23 を –with-ns でビルドしたもの) と比べ、色々と機能が追加されています。
詳しくはパッチに同梱されている README-mac に書いてあります。
Emacs Mac port に追加されている機能 にもまとめてみました。

Emacs Mac port という呼称が適切なのか自信はないですが、 README-mac やソースでは "Mac port", "GNU Emacs Mac port" という名前が使われているので、当ブログでは Emacs Mac port で統一しました。

それにしても、 Mac port と MacPorts が似ていてウェブ検索での情報収集がしにくいです。

Emacs Mac port のインストール

詳しい手順はパッチに含まれる README-mac に載っています。
以下は 2011年3月現在の Emacs 23.3 をビルドする手順です。(Xcode が必要です)

  1. http://www.gnu.org/prep/ftp.html の最寄りのサーバから emacs-23.3.tar.bz2 を落とす。
  2. ftp://ftp.math.s.chiba-u.ac.jp/emacs/ から emacs-23.3-mac-1.9992.tar.gz を落とす。 1.9992 の部分は最新のバージョンで。
  3. ターミナルで
    tar jxf emacs-23.3.tar.bz2
    tar zxf emacs-23.3-mac-1.9992.tar.gz
    cd emacs-23.3
    patch -p0 < ../emacs-23.3-mac-1.9992/patch-mac
    cp -r ../emacs-23.3-mac-1.9992/mac .
    cp ../emacs-23.3-mac-1.9992/src/* ./src/
    cp ../emacs-23.3-mac-1.9992/lisp/term/mac-win.el ./lisp/term/
    ./configure --with-mac --without-x
    make
    sudo make install
    mv ./mac/Emacs.app /Applications/
    

    configure の --prefix オプションによっては sudo make install の部分は make install でも可。
    Cocoa Emacs とは違い、 self-contained ではないので、 --prefix を指定しないかぎり /usr/local 以下にインストールされます。

Emacs Mac port の設定

文字コードの設定

(set-language-environment 'Japanese)
(prefer-coding-system 'utf-8)
;; クリップボードの文字コード
(set-selection-coding-system 'utf-8)
;; 端末の文字コード
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
;; ファイル名の文字コード
(require 'ucs-normalize)
(set-file-name-coding-system 'utf-8-hfs)

Emacs Mac port の場合、クリップボード用の文字コード selection-coding-system がシステムのデフォルト言語で初期化されます。
日本語ならば japanese-shift-jis 。上の例では utf-8 にしてますが、 japanese-shift-jis でも問題は無いです。
ただ、これを japanese-shift-jis 以外の Shift_JIS (例えば sjis, sjis-mac 等) にすると、バックスラッシュが半角の円記号に化けたりと不具合が出ます。関数 mac-string-to-pasteboard-string でその辺りの処理をしています。

フォントの設定

基本的には Cocoa Emacs の設定の仕方と同じです。
Emacs Mac port は Carbon Emacs がベースですが、 carbon-font.el は使えません。

http://macemacsjp.sourceforge.jp/index.php?MacFontSetting より引用

(create-fontset-from-ascii-font "Menlo-14:weight=normal:slant=normal" nil "menlokakugo")
(set-fontset-font "fontset-menlokakugo" 'unicode (font-spec :family "Hiragino Kaku Gothic ProN" ) nil 'append)
(add-to-list 'default-frame-alist '(font . "fontset-menlokakugo"))
(setq face-font-rescale-alist '((".*Hiragino.*" . 1.2) (".*Menlo.*" . 1.0)))
  • アンチエイリアスに関して
    Carbon Emacs にあった変数 mac-allow-anti-aliasing は削除されています。
    システム環境設定のアピアランスで設定するか、Terminal から defaults で設定します。
    defaults write "org.gnu.Emacs" AppleAntiAliasingThreshold 12
    また、関数 font-spec の :antialias プロパティに nil か t をセットすることで、フォント毎の指定もできます。

  • フォント設定に関するバグ
    http://d.hatena.ne.jp/setoryohei/20110113
    3つの条件が重なると、バグが出るらしい。
    当方でも inhibit-startup-screen (inhibit-startup-message, inhibit-splash-screen) を t にしていると、□○△の記号類が半角サイズで表示される等、フォントが正しく設定されないのを確認しました。 Emacs Mac port でも再現性があります。

使えるフォントは *scratch*

(insert (prin1-to-string (x-list-fonts "*")))

これを評価すれば全て表示されます。
Cocoa Emacs よりも太字が使えるフォントが増えていたりと、選択肢が多くなっているはずです。

  • Monaco 10
    Emacs Mac port で Monaco 10 に設定すると、斜体字は太字よりも太くなり、太字はぼやけてしまいます。
    アンチエイリアス無しで Carbon Emacs と同じようなフォント設定にするのは難しいようです。
    ちなみに Cocoa Emacs では Monaco の太字は使えません。
  • M+とIPAの合成フォント
    無料で使えます。 MigMix 1M, MigMix 2M, Migu 1M が等幅フォントで太字も含む。
    http://mix-mplus-ipa.sourceforge.jp/

その他の設定

Emacs Mac port のマウススクロールは非常に滑らかです。が、何らかの事情でマウススクロールを無効にしたい場合はこのようにします。

(add-hook 'window-setup-hook
          (lambda ()
            (when (fboundp 'mac-mouse-wheel-mode)
              (mac-mouse-wheel-mode 0))))

単に ~/.emacs.d/init.el(mac-mouse-wheel-mode 0) と書き込んでも無効にはなりません。
詳しくは mac-win.el の after-init-hook に追加している個所を参照。