Emacs 20 にしてよかった

(今さら, , な話題ですが. . )

とにもかくにも Emacs は, Linux 生活を送るための生活環境そのものです. Emacs で寝て食べて恋をして, じゃなかった, プログラムを書いて, メールを読み書きして, グラフを書いて, 論文を書いて, 辞書をひいて, さめがめで遊んで, . . とまぁ, すっかり GNU な生活なわけですが.

それなもんですから, いくらバージョンが上がったからといって, なかなか手に馴染んだ環境を手放してまで生活環境を変えたいとは 思わないもんです. で, 私なんざ人様のためにプログラムを書いたり しないものですから, あんまり (新しいプログラムをすぐに 導入するという意味で) 先進的な人々とおつき合いするわけでもありませんし, 何よりも使っているハードウェアが Pentium 120 MHz なマシンなもんですから, バージョンを上げたことによって Emacs が「重く」なっては, それこそ 死活問題なわけです.

因みに, 今までは一番良く使うマシンでは Mule 2.3 (Emacs 19.34) , 主に ネットワークサーバに使っているマシンでは Mule 2.3 (Emacs 19.28), PocketBSD では Nemacs 3.3.2 , と枯れた Emacs を使っておりました. それ以外のマシンでも似たりよったりで, 基本的に Mule 2.3 です.

XEmacs は, ここ数年大流行ですが, 私のハードだと重い. Emacs 20 があるのは, 知ってはおりましたが, どうも 日本語 (multi lingual ?) の処理が Mule 2.3 に追い付いていないという指摘があったり, 基本的に「重く」なってるんじゃないかと思ってみたりして, 躊躇しておりました. Windows な Emacs としては, Emacs20 である Meadow を他人の環境に入れたりしていましたが, 基本的に重いのは嫌だという気分なので, 自分も Emacs20 を使おうとは 思いませんでした.

ところがどっこい. Debian 2.1 (Slink) では, Emacs20 しかサポート されていないそうです. 自宅のマシンを多少増強 (といっても, i486 から K6 ですが) したついでに, Debian を入れて みたのですが, どうも Emacs20 は良い感じ. . ということで, 仕事場のメインマシンも Emacs20 にしてみました. だって知らない間に(笑), Emacs は進歩しているようです. 本家 Emacs が Ver.19 から 20 に なって, はや 3 年以上経っているのですね.

GNU Emacs + Gnus + Mew の環境を作ろう
は, Emacs20 を導入するための懇切丁寧な情報が満載です. そこで, つい先日アップデートされたばかりの Emacs 20.5a を 導入しました. 因みに, 私の環境は今でも Slackware 3.4 をベースにした, Kernel 2.0.37, libc5, XFree86 3.3.2 で, 他も自分の好きなようにいじっています. 基本的には, Emacs-20.5 についての情報 どおりにインストールすれば宜しかったです. ただし, 今まで
/usr/local/share/emacs/site-lisp
に入れていた, Emacs 19.34 の el は,
/usr/local/share/emacs/19.34/site-lisp
に移しました. 同様に, Emacs 20.5 でも, site-lisp のディレクトリは
/usr/local/share/emacs/20.5/site-lisp
だけを使うようにしました. site-lisp にインストールするものは, 後から導入する Mew, YaTeX など 日本語処理が絡んでいるものが多くて, 内部コードの処理の問題からか Emacs 19.34 でバイトコンパイルしたプログラムは不具合を起こす可能性が 高いからです.

私は, 本体である emacs-20.5.tar.gz と, leim-20.5.tar.gz の他に, Canna を使うので, emcws-20.5-19991210.gz のパッチを当てています. 因みに, 20.5 では行間を空けるための line-space のパッチは emcws-20.5-19991210.gz に統合されているそうなので, 必要ありませんでした. したがって, configure は
configure \
 --with-canna \
 --with-canna-includes=/usr/local/canna/include \
 --with-canna-libraries=/usr/local/canna/lib  \
 --with-line-space \
 --with-x \
 --with-x-toolkit \
 --with-gcc   
てな感じで, --with-line-space を入れれば良い, と.

日本語環境の設定などは, 上のページと, Debian-jp の Q & A が参考になります. 基本的に, 19.34 で使っていた ~/.emacs に加えて
(set-language-environment "Japanese")
(set-default-coding-systems 'euc-japan)
(set-terminal-coding-system 'euc-japan)
(setq-default enable-multibyte-characters t)
てな感じの設定で, 日本語を扱うことが出来るようです. あとは, 起動の際にエラーが出たら Debug の ページを参考に修正していきました. 上のサイトにはお世話になりっぱなしですね.

X Window で kinput2 が起動しているとき, canna モードに入ろうとすると (C-o など), kinput2 の窓が出てきてしまう, という問題(?)に対しては, /usr/local/bin/emacs を /usr/local/bin/emacs20 とかに mv して, 以下のような /usr/loca/bin/emacs という名前の wrapper を書くことによって解決しています.
#!/bin/sh
export XMODIFIERS="@im=none"
exec /usr/local/bin/emacs20 --line-space 1 -ib 2 $*
二行目の --line-space 以降はお好みでいいのですが.

で, 使ってみた感想.
・Mule 2.3 と軽さがほとんど変わらない. 
・日本語処理も, 基本的には不自由しない.
これで, Version 20 になったメリットが多ければ多いほどお得って感じですね.

使ってみて, まだ 2 日くらいなので, まだ細かいことはわかりませんが, Mew, YaTeX, xcal, gnuplot-mode, ... など良く使うモードについては そのまんま 19.34 のものが使えます. さすが発表されてから 3 年経ってるだけありますね(笑).

byte-compile するとき, ソースファイルに日本語が書かれているときは jis に変換した方が良いようです. nkf ではなく
% qkc -j *.el
で一発です. さらに, 今私が使っているのは yatex-1.67 ですが, エラーメッセージの中などに日本語が直接うめこまれている場合があります (yatex.el の 129 行目あたり, など). これがそのまま入っていると, 何故か emacs20 では byte-compile しても 使うことができなかったので, こまめにこの部分はコメントアウトしました.

前に ~/.emacs に
(setq display-time-string-forms  '(24-hours ":" minutes
    (if mail "♪")))
などとしておくと, biff 機能が使えるという話題 を書きましたが, ♪ といったマルチバイト文字は mode line に正しく 表示されないことがあります. これも, ~/.emacs を jis にしておくと 大丈夫でした. 正確には, emacs 19 と 20 を混在させているので ~/.emacs は
(if (string-match "20" emacs-version)
    (load "~/.emacs_20" nil t nil)
   (load "~/.emacs_19"nil t nil))
とだけ書いており, ~/.emacs_20.el に実質的な ~/.emacs の中身を書き, さらにそれを byte-compile しています. この方が起動が速い.

Mew の導入は, ソースのアーカイヴに書かれている方法のままで OK です. 細かいことですが, 最新の Mew 1.94.1 では, ~/.emacs に
(setq mew-decode-quoted t)
とすれば, MIME コードされたヘッダーが, 自動的にデコードされて見えます. これは, Mew の作者の方のポリシーのため, 古いバージョンでは使えなかった らしい. これは Mule 2.3 でも使えます.

さてさて, 何はともあれ, Emacs20 の説明は, info を読むに限ります. http://www.ascii.co.jp/pub/GNU/emacs20.3-man-jp.tgz にあるという情報が多数なのですが, 現在は接続できないようです. emacs の info だけじゃなくて, GNU 関係の info について, どんどん翻訳されているプロジェクト gnujdoc からいただいてくると, texi 形式のファイルがいただけますが, M-x texinfo-format-buffer で, うまくいかない場合もあるようです. Emacs-20 の info に, info に format したものを置いておきます.

後は, このページお約束のスクリーンショットですが,

スピードバーなんてのがあります.

電子辞書関係は, 今まで eldic というパッケージを使っていましたが, lookup (本家) の方が素晴らしい. 複数の辞書を 使えるし, 正規表現などで検索が出来ます (poly* と検索してみたところ).

私が一番嬉しいのは, 実は, Fortran モードが使いやすくなったことで, Mule 2.3 の Fortran モード に対して Emacs 20.5 の Fortran モード の方が, font-lock が美しいです.