Mac OS X Tiger, X11-Emacs 22.0.50
since May 3 2005
non omnia possumus omnes.
我々すべての者は萬事を爲す能はず.
Verg. ウェルギリウス, Ecl. VIII, 63.

はじめに

 

Mac OS X を手に入れた.素晴らしい.早速私の文房具である Emacs と pTeX をインストールした.

Mac OS X 10.3 Panther では EasyPackage によって簡単に Emacs バイナリが導入できたが, Tiger(切替え時期に購入した恩恵で無償提供された)にバージョンアップした瞬間に動作しなくなってしまい,頭にきつつソースコードからビルドするはめになった. 意を決して Power Mac G5 を購入した直後に新モデルが登場し,我が見通しの甘さにさらに頭にきた.

X11-Emacs 22.0.50 (CVS) 導入と多言語環境設定について述べる.右も左も分かたぬ Mac 文化に足を踏み入れ,一から Emacs-22 を組み立てたお蔭でいろいろ勉強になった.Mac に乗り換えた UNIX ユーザの参考になればと思う.とはいえ Mac OS でのポイントは事前準備にあり, Emacs そのものの構築手順は FreeBSD, Linux とほとんど変わらないはずである.

Mac OS X
Emacs

 

Mac OS では Aqua Carbon アプリケーションとして動作する Carbon-​Emacs と, UNIX X Window System 環境で動作する X11-Emacs の二つのビルド・パターンが存在する.それぞれの特徴を私なりに整理する.両方の長所を併せもつ Emacs は実現できないものかと思ってしまう.

  Carbon-Emacs
(1) Mac ヒラギノフォントなどが利用できる.中国語,韓国語も文字がきれいである.
(2) Emacs と carbon アプリとの間で相互にテキストをコピー・ペーストできる.
(3) BDF フォントが利用できないようである.多言語 Emacs のために作成された intlfonts 等が適用できないため, "C-h h" HELLO の表示は文字の脱落が目立つ.
(4) 表示できない Unicode 文字の入力は当然困難.主要な言語は Leim で入力できるので,そう大きな問題ではない.
(5) 仮名漢字変換に「ことえり」が利用可能.
(6) ヒラギノ利用は JIS X 0208 の範囲内のようである.
  X11-Emacs
(7) X11 で扱えるフォントが利用できる.BDF フォントが主体である.
(8) Emacs サポート言語がすべて入力・表示できる.
(9) Carbon アプリとの間のコピー・ペーストは, carbon → X11 は可能だが,逆は不可である.

私は (7)(8) を重視し,Mac OS X においても X11-Emacs の方が優れていると思う. テキストに集中した作業を行う場合フォントは,アンチエイリアスのかかったアウトラインより,ビットマップのほうが明晰で視認性がよい.(美しいとは言わない)

もちろん上記素描はいま現在の私の判断であり,できないと書いたことを自前でハックして可能にしている凄腕の方もいるかもしれない.その場合はご教示いただけるとありがたい.また編集作業フォントは趣味の問題かもしれない.根からの Mac ファンの多くにとっては私が瑕疵と思う多言語関連部分は些細な点であろうし,それくらい Aqua の世界は優れている.ことに Tiger に進化して Spotlight と Dashboard の使い勝手にはあっと驚く. X11 利用中にスリープさせるとしばしばハングアップするという致命的な問題があるんですけど(あまり話題にならないようである). BDF フォントが扱え,ヒラギノ実装文字セット,中韓の全文字が編集できるようになれば, Carbon-​Emacs は最強のエディタになるはずである.それは近いうちに到来しそうな気がする.

X11-Emacs 構築

 

GNU CVS Repositories から開発中の最新 Emacs-22.0.50 をチェックアウトして,コンパイルを行うとともに,フォント環境を調整する. Emacs-22 は Unicode サポートを標準で実装した.従来のように Mule-UCS を別途組み込む必要はなくなった.

事前準備

 

あらかじめ, Mac OS X 10.4 Tiger, Xcode 2.0, X11 for Mac OS X 1.1 (XFree86 4.4.0) を Apple 提供メディアからインストールしておく. X11 は Aqua と違和感なく馴染むルートレスモード,Quartz ウィンドウマネージャ(いずれも標準構成)を用いるものとする.

Mac OS X のターミナルのシェルは Bash が標準であるが,私は好みというか使い慣れた Tcsh に変更している.以下の説明も Tcsh のコマンドラインである.

Mac OS X 標準設定では,通常の Emacs の修飾キーが Aqua にトラップされて使えないものがある. Command キーや Option キーが Meta キーとして認識されないし,とくに C(Control)-スペースで Spotlight が起動されて, Emacs として致命的である. Command キーと Option キーを Meta キーに割当て, C-スペースでテキストリージョン先頭をマークできるようにするためには,以下の3点を実施しておく.

  1. 「X11—環境設定—入力」を呼び出して,「システムのキーボード配列を使用する」と「X11のキーボードショートカットを使用可能にする」をオフにする.【図1】

    図1 X11 入力環境設定
  2. Command キーと Option キーを Meta キーとして再定義するため, ~/.Xmodmap ファイルに以下を記述する. Xev で検査すると Command キー, Option キーの keycode はそれぞれ 63,66 であり,これを Meta にアサインする.ファイルを格納したら,ターミナルで "xmodmap ~/.Xmodmap" を実行するか, X11 を再起動する.

    clear mod1
    keycode 66 = Meta_L
    keycode 63 = Meta_R
    add mod1 = Meta_L Meta_R
    	

  3. 「システム環境設定—キーボードとマウス—キーボードショートカット」において,「Spotlight検索フィールドを表示する」と「Spotlightウインドウを表示する」を,Emacs とバッティングしないであろう適当なショートカットに変更する.私はそれぞれ "Control `" と "Option Control `" とした("`" は私の US キーボードで ESC 下の操作しやすい位置にある).【図2】

    図2 ショートカットキー変更

Emacs-22.0.50 のビルド

 

ビルドのためのワークディレクトリを $HOME/tmp として説明する.まず, Emacs の CVS リポジトリからワーキングコピーを作成する. cvs コマンドを投入すると RSA key fingerprint の確認を求められるかもしれないが, yes を応答すればよいはずである.

% mkdir ~/tmp; cd ~/tmp
% setenv CVS_RSH ssh
% cvs -z3 -d :ext:anoncvs@savannah.gnu.org:/cvsroot/emacs \
  checkout -P emacs
	

CVS のワーキングコピーが完了したら, X11 用にコンパイル,インストールを順次行う. Emacs は巨大なシステムであり,コンパイルにかなりの時間を要する.

% cd emacs
% ./configure --prefix=/usr/local --without-carbon --with-x
% make bootstrap
% sudo make install
Password:xxxxx(スーパユーザのパスワード:以下省略)
	

BDF 多言語フォントのインストール

 

多言語編集のために別途以下のフォントをダウンロードし,設定を行う.インド系言語用のフォントはなくても困らないかもしれないが, HELLO【図3】の表示が化けないようにするこだわりである.

- intlfonts: Emacs 多言語標準フォント
- cdacfonts: インド系言語のための Emacs 標準フォント
- /efont/: キリル,古典ギリシア拡張,日本語等の Unicode フォント集成

ダウンロードしたらインストールする.手順では ~/tmp/fonts にダウンロードしたものと仮定している.

/efont/ はソースから BDF フォントを生成することとする.このため,Bdfresize-​1.5 ユーティリティが必要であり,これも組み込む.しかしながら,Bdfresize のコンパイルは, Mac OS X Tiger 開発キット附属の gcc-​4.0 では型のチェックでエラーとなってしまう. gcc_​select コマンドで一時的にコンパイラを gcc-​3.3 に変更し,バイナリを生成しよう.

cdacfonts は pcf フォントを組み込む.このため, FreeType-1 に附属する ttf2bdf ユーティリティが必要である.

FreeType-1 の configure コマンドは Darwin を検出できずエラー停止する.対策として FreeType 附属の config.guess 及び config.sub を Mac OS X automake 添付のもので置換する.

test/ftdump.c を gcc-4.0 でコンパイルするとエラーとなる.どうも gcc 新バージョンは厳格のようである. ttf2bdf のビルドに必要な libttf ライブラリは直前で作成されているため無視してよいが,気持ち悪いのでソースコードを手直しして make することとする.なお,ここでの目的物は ttf2bdf であり, FreeType ライブラリそのものをシステムにインストールする必要はない.

% mkdir ~/tmp/fonts; cd ~/tmp/fonts
[ ここにフォント関連アーカイブをダウンロード ]
% ls
bdfresize-1.5.tar.gz                  freetype-1.3.1.tar.gz
cdacfonts.tar.gz                      intlfonts-1.2.1.tar.gz
efont-unicode-bdf-0.4.2-src.tar.bz2
% setenv XFONTDIR /usr/X11R6/lib/X11/fonts
	

Bdfresize-1.5

% cd ~/tmp/fonts
% tar zxvf bdfresize-1.5.tar.gz
% cd bdfresize-1.5
% sudo gcc_select 3.3
[ gcc バージョン 3.3 に変更 ]
% ./configure --prefix=/usr/local
% make
% sudo make install
% sudo gcc_select 4.0
[ gcc バージョン 4.0 に戻す ]
	

FreeType-1 ttf2bdf

% cd ~/tmp/fonts
% tar zxvf freetype-1.3.1.tar.gz
% cd freetype-1.3.1
% cp /usr/share/automake-1.6/config.{guess,sub} .
[ configure ホストタイプエラー対策 ]
% ./configure
% cd test
% cp -p ftdump.c ftdump.c.orig
% sed 's/##//g' ftdump.c.orig > ftdump.c
[ 上2行はコンパイルエラー対策 ]
% cd ..
% make
% cd contrib/ttf2bdf
% ./configure
% make
% sudo make install
	

intlfonts

% cd ~/tmp/fonts
% tar zxvf intlfonts-1.2.1.tar.gz
% cd intlfonts-1.2.1
% ./configure --with-fontdir=$XFONTDIR/intlfonts \
  --with-pcf=yes --with-bdf=no
% sudo make install
% sudo mkfontdir $XFONTDIR/intlfonts
    

cdacfonts

% cd ~/tmp/fonts
% tar zxvf cdacfonts.tar.gz
% cd cdacfonts
% sudo make CDACDIR=$XFONTDIR/cdacfonts install-pcf
% sudo mkfontdir $XFONTDIR/cdacfonts
	

/efont/

% cd ~/tmp/fonts
% tar jxvf efont-unicode-bdf-0.4.2-src.tar.bz2
% cd efont-unicode-bdf-0.4.2-src
% ./configure
% make
% sudo mkdir $XFONTDIR/efont
% sudo cp -p *.pcf.gz $XFONTDIR/efont
% sudo mkfontdir $XFONTDIR/efont
% xset fp+ $XFONTDIR/intlfonts,$XFONTDIR/cdacfonts,\
$XFONTDIR/efont
% xset fp rehash
	

これでフォントが利用可能となった.次回 X11 起動時からフォントが自動的に認識されるように .xinitrc ($HOME 直下になければ /usr/​X11R6/​lib/​X11/​xinit/​xinitrc をコピーする) に xset コマンドを書いておく. FreeBSD 5.3-​RELEASE では X コンフィギュレーションファイル (/etc/​X11/​xorg.conf) にフォントパスを記述するのだが,Mac OS X では .xinitrc で対応するしかないのだろうか.

.xinitrc ファイル末尾の "exec quartz-wm" の前あたりに次の4行を追加する.

xset fp+ /usr/X11R6/lib/X11/fonts/intlfonts
xset fp+ /usr/X11R6/lib/X11/fonts/cdacfonts
xset fp+ /usr/X11R6/lib/X11/fonts/efont
xset fp rehash
	

X リソースの設定

 

さらに Emacs で Unicode コードポイント U+2500 〜 U+33FF 及び U+E000 〜 U+FFFF の文字のフォントを /efont/ に指示するよう, X リソース設定を行う.これを行わないと, JIS X 0213 で定義された文字のうち,なぜか Emacs のエンコーダーが japanese-​jisx0213* ではなく mule-​unicode-​2500-​33ff または mule-​unicode-​e000-​ffff に指示するもの(「ヷ」「ゔ」仮名など)が表示できない.ただし,すべてのコードポイントの文字フォントが実装されているわけではない.

~/.Xdefaults ファイルに以下を記述する.ここでは 16 ドットフォントを標準に設定している. "→" は折り返しを示す.

Emacs*fontSetList: 0,1,2
Emacs.Fontset-0:-*-fixed-medium-r-normal-*-14-*-*-*-*-*→
-fontset-14,\
    mule-unicode-e000-ffff:-efont-biwidth-medium-r-normal→
        -*-14-*-*-*-*-*-iso10646-1,\
    mule-unicode-2500-33ff:-efont-biwidth-medium-r-normal→
        -*-14-*-*-*-*-*-iso10646-1
Emacs.Fontset-1:-*-fixed-medium-r-normal-*-16-*-*-*-*-*→
-fontset-16,\
    mule-unicode-e000-ffff:-efont-biwidth-medium-r-normal→
        -*-16-*-*-*-*-*-iso10646-1,\
    mule-unicode-2500-33ff:-efont-biwidth-medium-r-normal→
        -*-16-*-*-*-*-*-iso10646-1
Emacs.Fontset-2:-*-fixed-medium-r-normal-*-24-*-*-*-*-*→
-fontset-24,\
    mule-unicode-e000-ffff:-efont-biwidth-medium-r-normal→
        -*-24-*-*-*-*-*-iso10646-1,\
    mule-unicode-2500-33ff:-efont-biwidth-medium-r-normal→
        -*-24-*-*-*-*-*-iso10646-1
Emacs.Font: fontset-16
	

.Xdefaults を格納したら, X リソースデータベースに反映する.次回起動時からは,このコマンド実行は不要である.

% xrdb -merge ~/.Xdefaults
	

以上で Emacs-22 多言語環境の構築は完了である.

多言語表示確認

 

/usr/local/bin/emacs コマンドを投入して Emacs を起動し, "C-h h" とタイプして多言語文書のサンプル HELLO 【図3】が閲覧できるか確かめてほしい. Hindi や Kannada, Malayalam などのインド系言語も表示されると思う.


図3 Emacs-22 HELLO

キリル文字では,教会スラヴ語,辺境キリル言語で使われる文字,ストローク付き文字が,ギリシア文字では,古典ギリシア語で用いられる複式アクセントや下書きのイオタなどがきちんと表示できるはずである.【図4】


図4 Unicode Slavonic, Greek-Extended

漢字・多言語文字入力

 

Emacs のインストールが終了したら,仮名漢字変換の環境を整える. FreeWnn を用いる場合, NetInfo マネージャで wnn ユーザを登録しておく必要がある.参考になるページをリンクしておくので,ここでは詳細は割愛する.

Emacs-22 は文字のエンコードやフォントセット情報を表示したり (M-x describe-​char), Unicode 文字を UCS 十六進コードポイントで入力する (M-x ucs-​insert) インタフェースを有している.とはいえ現時点 (2005.5.3) での実装はまだ完全ではないようで,文字を入力・表示できないコードポイントもある.前者 M-x describe-​char の例を【図5】に示す.


図5 M-x describe-char

JIS漢字字典 ucs-insert コマンドによって Unicode 文字を UCS 十六進コードポイントで入力することができる. M-x ucs-​insert RET とすると, Unicode (hex): と問い合わせがくる.これに対し, 9dd7 RET と応答するとカーソル位置に Unicode U+9DD7 の文字「鷗」が挿入される. CJK 統合漢字の Unicode コードポイントは『増補改訂 JIS漢字字典』(芝野耕司 編著, 日本規格協会) などの字典で調べることができる.

.emacs に以下のようなコードを書いておくと, C-c​C-i, C-c​C-d というショートカットにより,それぞれ ucs-​insert, describe-​char を呼び出すことができるようになる.もちろん,ショートカットのキー割当ては利用者の裁量で決めることができる.

;;; UCS コードポイントで文字を挿入
(global-set-key "\C-c\C-i" 'ucs-insert)
;;; カーソルの文字の情報を表示 
(global-set-key "\C-c\C-d" 'describe-char)
	

多言語入力は Leim-Quail インプットメソッドが利用できる.インプットメソッド名は Emacs-21 と若干異なる言語があるが,ほぼ同等である.私の書いたスラヴ語・ギリシア語汎用インプットメソッドも, Emacs-21 用がそのまま Emacs-22 で利用できる.詳細は「Emacs スラヴ語/古典ギリシア語汎用インプットメソッド」を参照いただきたい.

インプットメソッドの選択は C-x C-m C-\ もしくは M-x set-​input-​method RET を投入し, Select input method (default ...): プロンプトに対し,インプットメソッド名を応答することで行う. latin-postfix を応答すると,後置修飾式 (文字のあとに ', `, ", ^ などの修飾文字を付加することでアクセント付き文字入力を行う方式) でヨーロッパ言語を入力することができるようになる.私が配布しているスラヴ語汎用,古典/現代ギリシア語用の場合,それぞれ, slavonic, greek-polytonic と応答すればよい.英数字モードと選択言語メソッドとの切り替えは C-\ で行う.

.emacs に以下のような定義を入れておくと,プログラム・ファンクション・キーによってインプットメソッドを選択できるようになる. F5: スラヴ言語; F6: 日本語 (Wnn7); F7: ラテン系言語; F8: 古典ギリシア語;

;;
;; インプットメソッド関数定義
;;
(defun set-slavonic-input ()
 "Slavonic for Russian, Ukrainian, Old Slavonic, etc."
 (interactive)
 (set-input-method "slavonic")
 )

(defun set-japanese-input ()
 "Japanese egg Wnn7."
 (interactive)
 (set-input-method "japanese-egg-wnn7")
 )

(defun set-latin-input ()
 "Latin postfix for European languages."
 (interactive)
 (set-input-method "latin-postfix")
 )

(defun set-greek-input ()
 "Greek-polytonic for Classic and Modern Greek."
 (interactive)
 (set-input-method "greek-polytonic")
 )

;; ファンクションキーでインプットメソッド選択
(global-set-key [f5] 'set-slavonic-input)
(global-set-key [f6] 'set-japanese-input)
(global-set-key [f7] 'set-latin-input)
(global-set-key [f8] 'set-greek-input)
	

ここで,各インプットメソッドはすでにインストールされているものを指定しなければならない.上記 japanese-​egg-​wnn7 は OMRON の商用日本語入力システム Wnn7 Personal for Linux/​BSD の Emacs クライアントである. Wnn7 jserver サーバは Linux もしくは FreeBSD で動作する製品であるが, Emacs Lisp japanese-​egg-​wnn7 は Mac OS X でも利用可能である. Wnn7 jserver が稼働しているホスト名を環境変数 JSERVER にセットしておけば,ネットワーク経由で Wnn7 を利用することができる.

その他環境

 

その他,Emacs 各種モード,ユーティリティなど,お好みの Emacs Lisp を追加する.併せて, Emacs の個人用の初期設定ファイル .emacs を調整していただきたい.

Emacs-22 .emacs に関して注意すべきことのひとつは,auto-mode-alist を設定してもデフォルトでは有効にならないことである.つまり,たとえば拡張子が html の時に yahtml-mode を使用するように定義しても,附属の HTML-mode でオープンされてしまう.これは新バージョンで magic-mode がサポートされたためで,これまでどおり追加したモードを有効にしたい場合には,以下のとおり auto-mode-alist 追加の前に magic-mode-alist を偽 nil に設定しておく.

(setq magic-mode-alist nil)
(setq auto-mode-alist 
      (append '(
                 ・・・・・・
                ("\\.s?html?$" . yahtml-mode)
                ("\\.css$" . css-mode)
                ("\\.js$"  . java-mode)
                ) auto-mode-alist))
    

最後に私の Mac 用 .emacs を掲載しておく.

更新履歴

 

May 3, 2005 新規作成
June 5, 2005 Bdfresize 記述追加
Aug. 18, 2005 誤記訂正
Aug. 26, 2006 im 記述追記,誤記訂正