Mavericks に GNU Emacs を入れる

Mac OS X 10.9 on Mac mini を購入して,私の愛用の文房具を設置中である。それにしても,Mavericks いまいち。まず遅い。信じられないことに,動画がプツプツ途切れたりするし,コピー程度の操作でも考え込むときがある。おい,これ,まさか,まだベータ版ってことはねえよな? おまけにソフトウェアの互換性確保が疎かで,いままで動いていたアプリケーションのインストールができなかったりする。Mac OS なんで,いまに始まったことではないんだけどね。

Apple もいい加減少しは Microsoft を見習えよと思ってしまう。Microsoft Windows XP が今年四月にサポート終了を迎えるということが,目下 IT 業界において一大事件のような扱いを受けているわけだけれども,OS のサポートを 12 年にわたって継続する Microsoft 社の姿勢は,同じ業界にいる私から見て実に賞賛すべきものである。その人知れぬ労苦は痛いほどわかる。それに比べて Apple って会社は,てなもんや。ま,バグの多さ,継承性のなさは Mac に染み付いた瑕疵のようなものなので,覚悟はしていた。

可愛いけど,飽きっぽくて,軽薄な新物好きで,そうしてウソ吐きな女。私は Mac にはそんな女を見ているような印象を覚えてしまう。でも,こんな女でも,こちらが長い付き合いをしてしまう決定的な理由がある。見た目の可愛さではない。母親譲りの芯の強さである。なんか幼稚な擬人化をするようで申し訳ないが,要するに,私が Mac を使い続ける理由は,この OS が堅牢な BSD UNIX であるというただ一点にある。Photoshop,Illustorator など古い版が使えなくなっても,UNIX であるがゆえに Gimp,Inkscape などの良質のオープンソース・ソフトウェアを利用することができるし,なにより,開発ツールが無償で提供され自分の課題解決をなすための最高の環境を備えている。

閑話休題。Mavericks に Mac OS 用にビルドされた多言語エディタ GNU Emacs 24 (Version 24.3, 2013.3.11) をインストール。私にとっていちばん大事な文房具である。初期状態でもそれなりに使えるのだけれども,フォント表示(とくに日本語)がいただけないので,日本語フォントとして Mac OS のヒラギノを,外国語用フォントとして DejaVu を使うようにした。

DejaVu フォントは Mac OS 標準ではないので,http://dejavu-fonts.org/wiki/Download から 2.34/dejavu-fonts-ttf-2.34.tar.bz2 をダウンロードし,FontBook ツールでインストールする。その後,Fontconfig ユーティリティ(あらかじめ MacPorts でインストールしておく)の fc-cache コマンドでフォントキャッシュを生成し直し,fc-list でフォントの一覧を取得し,その情報から GNU Emacs のフォントフェース設定を行う。

手順はこの通りでよいはずだったのだが,fc-list のフォント一覧に DejaVu フォントがまったく出てこなかった。インストールした DejaVu フォントが Fontconfig(とその下請けである FreeType)に認識されておらず,つまりは使えないということである。ちょっとこれには悩んだ。インターネットを探しまわって,#121 (fontconfig configuration missing ~/Library/Fonts) - XQuartz で,ようやく解決のヒントが見つかった。

Mac OS FontBook ツールでフォントをインストールするとホームディレクトリ下の Library/Fonts に格納されるが,Fontconfig の標準設定がここを対象にするものになっていないらしい。よって $HOME/Library/Fonts を Fontconfig 設定ファイル: /opt/local/etc/fonts/fonts.conf のチェック対象ディレクトリの定義に追加してやり直せばよい。これで,再度 fc-cache, fc-list を実行すると,ばっちり DejaVu がフォント一覧に出力された。これで Emacs の文字の見栄えも望む通りとなった。日本語だけでなく,キリル文字,古スラヴ文字,古典ギリシア文字,中国語簡体字・繁體字,ハングル,タイ文字等々がきちんと表示できるようになった。以下スナップショット。

20140119-emacs.png

参考までに,フォント設定の Emacs-Lisp を掲載しておく。

;; charset priority
;; とくにキリル文字・ギリシア文字が日本語フォントで食われないため
(set-charset-priority
 'cyrillic-iso8859-5 'greek-iso8859-7 'hebrew-iso8859-8
 'latin-iso8859-1 'latin-iso8859-2 'thai-tis620
 'mule-unicode-0100-24ff
 'japanese-jisx0208
 'japanese-jisx0213-1 'japanese-jisx0213-2 'japanese-jisx0213-a
 'japanese-jisx0213.2004-1
 'korean-ksc5601 'chinese-gb2312 'chinese-big5-1 'chinese-big5-2
 'unicode
)
;; char width (for Mew summary)
;;; iso 8859-5
(map-charset-chars
 (lambda
   (range ignore)
   (set-char-table-range char-width-table range 1))
 'cyrillic-iso8859-5)
;;; iso 8859-7
(map-charset-chars
 (lambda
   (range ignore)
   (set-char-table-range char-width-table range 1))
 'greek-iso8859-7)
;; Font face フォントフェースの設定
;; デフォルトフォント: DejaVu Sans Mono
(set-face-attribute 'default nil
                    :family "DejaVu Sans Mono"
                    :height 130)
;; Coding system 毎のフォントフェース
;; あとの指定が有効になるため,指定順序には注意が必要
;; 韓国語
(set-fontset-font
 (frame-parameter nil 'font)
 'korean-ksc5601
 '("AppleGothic" . "iso10646-1"))
;; 中国語簡体字 Hiragino Sans GB
(set-fontset-font
 (frame-parameter nil 'font)
 'chinese-gb2312
 '("Hiragino Sans GB W3" . "iso10646-1"))
;; 中国語繁体字 Heiti TC
(set-fontset-font
 (frame-parameter nil 'font)
 'chinese-big5-1
 '("Heiti TC" . "iso10646-1"))
(set-fontset-font
 (frame-parameter nil 'font)
 'chinese-big5-2
 '("Heiti TC" . "iso10646-1"))
;; 日本語フォント: ヒラギノ角ゴシック ProN W3 
(set-fontset-font
 (frame-parameter nil 'font)
 'japanese-jisx0208
 '("Hiragino Kaku Gothic ProN W3" . "iso10646-1"))
(set-fontset-font
 (frame-parameter nil 'font)
 'katakana-jisx0201
 '("Hiragino Kaku Gothic ProN W3" . "iso10646-1"))
(set-fontset-font
 (frame-parameter nil 'font)
 'japanese-jisx0213-1
 '("Hiragino Kaku Gothic ProN W3" . "iso10646-1"))
(set-fontset-font
 (frame-parameter nil 'font)
 'japanese-jisx0213-2
 '("Hiragino Kaku Gothic ProN W3" . "iso10646-1"))
(set-fontset-font
 (frame-parameter nil 'font)
 'japanese-jisx0213-a
 '("Hiragino Kaku Gothic ProN W3" . "iso10646-1"))
(set-fontset-font
 (frame-parameter nil 'font)
 'japanese-jisx0213.2004-1
 '("Hiragino Kaku Gothic ProN W3" . "iso10646-1"))
;; キリル文字フォント: DejaVu Sans Mono
(set-fontset-font
 (frame-parameter nil 'font)
 'cyrillic-iso8859-5
 '("DejaVu Sans Mono" . "iso10646-1"))
;; ギリシア文字フォント: DejaVu Sans Mono
(set-fontset-font
 (frame-parameter nil 'font)
 'greek-iso8859-7
 '("DejaVu Sans" . "iso10646-1"))
;; Hebrew 文字フォント: Raanana
(set-fontset-font
 (frame-parameter nil 'font)
 'hebrew-iso8859-8
 '("DejaVu Sans" . "iso10646-1"))
;; Unicode フォント: DejaVu Sans
(set-fontset-font
 (frame-parameter nil 'font)
 'mule-unicode-0100-24ff
 '("DejaVu Sans" . "iso10646-1"))
;; Thai 文字フォント: Ayuthaya
(set-fontset-font
 (frame-parameter nil 'font)
 'thai-tis620
 '("Ayuthaya" . "iso10646-1"))