[ホーム]-> [emacs]-> [22to23]

Emacs 22 から 23 への移行の備忘録

2009/7/29 に 23.1 がリリースされた。以下の内容は、主にそのしばらく前の pretest の emacs 23.0.94 以降を試したときの状況。

Emacs 23 に附属の NEWS をざっと見る。 最大の違いはフォントの指定で、Emacs 23 からは TrueType フォントをアンチエイリアスをかけて使用することができ、その指定の仕方もとても簡単になった。これにより見た目が随分と改善された。また UNICODE の扱いもずっと良くなっている。

フォント

フォントの指定

.Xresources には

Emacs.geometry: 80x50-34+10
Emacs*FontBackend: xft
Emacs*font: Inconsolata\-dz-9
のように書いておいた。フォントは Inconsolata-dz を 9pt に指定した。(名前は、コマンドラインから fc-list で確認した。フォント名にハイフンが含まれている時には\でエスケープしないといけないようだ。) .Xresources でも font を指定するのは、現在の .emacs.elの設定では、そうしないと最初に開くフレームの大きさやフォントが正しく設定されなかったため。

.emacs.elのフォントの設定部分は次のようにした。

(if (and (window-system) 
	 (string-match "^23\." emacs-version))
    (progn
      (set-frame-font "Inconsolata\-dz-9")
      (set-fontset-font (frame-parameter nil 'font)
			'japanese-jisx0208
			(font-spec :family "M+1M+IPAG" :size 14)
			)
      (setq default-frame-alist
	    (append
	     '((width . 82) (height . 50)
	       )
	     default-frame-alist))
      (global-font-lock-mode t)
      (setq font-lock-maximum-decoration t) 
      (setq fast-lock nil)
      (setq lazy-lock nil)
      (setq jit-lock t)
      )
  )
set-fontset-fontの部分では、 (frame-parameter nil 'font)の値のフォントセットのjapanese-jisx0208 に対するフォントをその次の引数の font-specで指定されるフォントに修正している。 .Xresource に上のように書いた場合は (frame-parameter nil 'font) の値のフォントセット名は
"-unknown-Inconsolata-dz-normal-normal-normal-*-12-*-*-*-m-0-iso10646-1"
になる。ここではそのjapanese-jisx0208に対するフォントを M+フォント系の M+1M+IPAG に指定しているわけである。 この font-spec の指定の仕方はいくつかバリエーションがある。 :size 14 を指定したのは、そうしないと日本語のフォントの幅が欧文フォントの幅の2倍にならないため。 ただし、このように指定すると、たとえば auctex 付属の font-latex で、セクション名のスケールが効かなくなったりするなどの副作用もある。日本語の文字幅にこだわらないなら付けない方がいいかもしれない。

face-font-rescale-alistを設定することで日本語と欧文の文字幅を設定することもできそうなのだが、今のところ成功していない。

また、欧文フォントと日本語のフォントでは高さが違う。実際にはそれほど気にならないだろうが、例えば欧文のみの行に日本語が追加された場合、行の高さが微妙に変化する。

実際のフォント

TrueType とか OpenType が使えるようになったので、フォントをいろいろと検討してみた。 私の場合、それなりにプログラムも書くし、ノートの狭い画面でも使うことが多いので、選択の条件としては、次のような基準が考えられる。

その他、個人的趣味として、次のようなものがある。

google で検索すると、次のような候補が見つかる。

アスキーの範囲だと Bitstream Vera Sans Mono と DejaVu Sans Mono の 違いはアンダースコアくらいで両者はとても似ている。上には入っていないが Mac の monaco などもいいフォントだと思う。ただし小文字の a が個人的に趣味ではなかった。 Windows の Meiryo系は、上下の余分なスペースを削ったものがあって印象は悪くなかったが、欧文用としては backslash が円記号になるので却下。 Inconsolata 系を選んだ他の理由としては、TeX ではハイフンをマイナス記号として使うので、これがあまり短いと嫌だというのもある。

Inconsolata-g とか Inconsolata-dz とかは、Inconsolata の一部を改変したものだが、 引用符が傾いていないところが趣味に合う。また、全体的に大きくなって日本語との組み合わせがオリジナルよりかはしっくりくる。M+ は、あたり前だが日本語との相性はバッチリ。ただ個人的に & の字形があまり好きでないのと、英文のみだと個人的に若干上下にまのびして見える印象がある。VLゴシックも同様。

スクリーンショット

日本語は M+1M+IPAG (size は見やすいように 18pt に変更) で、アスキーの部分を変更してみた。 いずれも Vine Linux 4.2 の Emacs 23.0.94 上でとったもの。

Bitstream Vera Sans Mono
Bitstream Vera Sans Mono

DejaVu Sans Mono
DejaVu Sans Mono

M+1M+IPAG
M+1M+IPAG

Consolas
Consolas

Inconsolata
Inconsolata

Inconsolata-g
Inconsolata-g

Inconsolata-dz
Inconsolata-dz

ちなみに Inconsolata は TeX 用のパッケージもある。listings 環境とかで使ってみると、かなりいい感じ。今は Inconsolata-dz を M+1M+IPAG と組み合わせて利用。

ちなみに、上のスクリーンショットを取る際に使った使い捨て emacs lisp はこのmycapture.el. ImageMagick の import を利用している。 sample.txt を用意して単独のフレームで開き、最後の S式を評価すると (Emacs にとっての) カレントディレクトリに PNG 形式で保存するようになっている。使い捨てなので汎用性なし。

行移動

C-nC-pで行を移動する際には、以前のように論理行ではなく画面で見えている行 (以下、画面行) で移動するようになった。これで長い行を含むファイルを編集する際にも特別な emacs lisp パッケージを使う必要がなくなって便利。ただし、C-kなどは以前と同様論理行に対して作用する。

移動だけでなく編集も画面行に対して行うために、Visual Line Mode というマイナーモードができた。このモードでは適当な単語の位置で折り返して表示し、フリンジの改行マークも表示しない。ただ、日本語のようにスペースで単語を区切らない言語ではあまり使い勝手は良くなさそう。

言語環境

C-u C-\で french-prefix などを選んでラテン文字を入力しようとしたら、Invalid code(s) とか言われて入力できなかった。

(set-keyboard-coding-system 'utf-8-unix)
とすると、普通に入力できるようになった。

パッケージ

Wanderlust

Wanderlust を使う際は、最新の flim (flim-1.14.9以降) でないと、添付ファイルの展開に失敗する。またパッチをあてないと quoted-printable のデコードなどに問題があるようだ。 GMANEの記事 を参照。

その他

野鳥 (TeX統合環境), imaxima (maxima インターフェース), lookup (辞書検索), slime (Common Lisp 開発環境), emacs-w3m (w3m 利用のウェブブラウザ), などは特に問題なく使えている。

以前は GnuPG での暗号化、復号化に gpg.el を使っていたのだが、これを使用しなくても拡張子が gpg のファイルはデフォルトで読み書きしてくれるようになった。これは、はじめから EasyPG がついてくるようになったため。 他にも ruby mode や nXML mode が最初からついてくるようになった。

transient-mark-modeがデフォルトで on になった。 これは目障りだったので、.emacs.el

(setq transient-mark-mode nil)
と書いておいた。

emacsclient

emacslient に --tty オプションがついた。 これは便利なのだが、背景色とかモードラインの色がおかしい。要調整。

気づいた問題点

pretest の emacs-23.0.94 では、ちょっと大きな日本語ファイル (1MBを切るくらい) を保存しようとすると、core2 duo でも5秒くらいかかってしまう。utf-8 で保存しても同様。英文だと結構巨大なファイルでも問題なく保存できるので、日本語関連の問題だと思われる。

という話を同僚のY氏にしたところ、翌日にパッチが送られてきた。試してみると10倍ほど保存にかかる時間が短かくなっていた。これならストレスなく使用できそう。バグレポートもその日に送ったそうで、23.0.95 では修正されていた。ありがたいことです。


[ホーム]-> [emacs]-> [22to23]