April 30, 2008

How to create fontset on Emacs

野首さんのこれに触発されて書いてみた。

Emacs上でfontsetを指定する場合二通りの方法がある。ひとつは.Xresourcesを使う方法。もうひとつはEmacs Lispで指定する方法。今回は後者を取り上げかつaliasも作ってみることにする。

Emacsにはfaceという概念があって、その中でボールドやイタリックなどの属性が管理されている。またそれぞれの場所で異なるfaceを使っているため、ツールバーのフォントを小さくしたいとか、modelineをboldにといった細かい指定などもこのfaceをいじることで可能である。これらのfaceの変更をするにはset-face-fontset-face-background, set-face-foreground, set-face-underlineなどの特定の属性に特化した関数を呼ぶか、set-face-attributeで任意の属性を指定する。

set-default-fontでdefaultフォントを変更するのとset-face-fontでdefault faceのフォントを変更することの違いは、前者は現在選択されたframeにのみ反映されるということ。もちろんset-face-fontで特定のframeにのみ作用させることも可能だけど、通常はすべてのframeに適用される。frameを多用しない環境であれば、どちらでも問題ないけど、常に一定のフォントを使いたい場合はset-face-fontで変更した方が何かと不都合がなくていいと思う。

で、肝心なfontsetの作り方。これも何通りかの方法があってEmacs Lispっぽいやり方をするならnew-fontset、もうちょっと細かくXLFDを指定したいとかなら、create-fontset-from-fontset-specを使う。他にもcreate-fontset-from-ascii-fontとかcreate-fontset-from-x-resourceとかあるけど、こちらは使ったことないので分からん。

まあ詳細はHelpを見ていただくとして、各charsetごとに異なるフォント、異なるサイズを指定できるので、環境にあった見やすいフォントを選択することも可能。どんなcharsetが指定できるかについては、mule-diagを実行してSection 5およびSection 6を見れば分かるはず。

ということで以下サンプル。

(create-fontset-from-fontset-spec
"-default-gothic-medium-r-*--10-*-*-*-*-*-fontset-10,
ascii:-*-liberation mono-medium-r-*--10-*-*-*-*-*-iso8859-1,
katakana-jisx0201:-*-vl gothic-medium-r-*--10-*-*-*-*-*-jisx0201.1976-*,
japanese-jisx0208:-*-vl gothic-medium-r-*--10-*-*-*-*-*-jisx0208.1990-*,
...")

みたいな感じにして、ボールドとイタリックのfontsetも作っておく。あとは

(set-face-font 'default "-default-gothic-medium-r-*--10-*-*-*-*-*-fontset-10")
(set-face-font 'italic "-default-gothic-medium-i-*--10-*-*-*-*-*-fontset-10")
(set-face-font 'bold "-default-gothic-bold-r-*--10-*-*-*-*-*-fontset-10")
(set-face-font 'bold-italic "-default-gothic-bold-i-*--10-*-*-*-*-*-fontset-10")

としとけばいい。

No comments: