Google Code Prettify

2010年5月7日

Emacs23 の フォント設定

新し目の Emacs ではフォントエンジンの改良が進んでおり、 antialiasing が効いた奇麗な表示が出来る。また、沢山の種類のフォントを扱えるようになっている。

プログラムの編集等をしてると等幅フォントが必要である。 特に、日本人としてはASCII文字と日本語文字の幅が 1:2 である事が強く望ましい

まぁ、いくつか設定方法が流れてるので、コピペして使えば良いのだが。。。 みんなどうやって見やすい設定を探してるのだろうか?

疑問に思ったので、次のような機能のelispを書いてみた

my-sample-ascii.el
my-sample-ascii
既定のフェース default/bold/italic/bold-italic それぞれで同じメッセージを 同一のバッファに出力する
my-sample-face-size
defaultのフェースを継承し(書体を引き継ぎ)、高さが 6〜20ptのフェースを作成し、同じメッセージを 同一のバッファに出力する

適当にdefaultフェースを設定した後だが、CocoaEmacs/NTEmacs/Emacs(onUbuntu)での、 my-sample-face-sizeの結果は次のようになる

ss-20100507-cocoaemacsss-20100507-ntemacs23 ss-20100507-ubuntu10.04

いくつか設定してみたが、全ての pt で、1:2 に揃うフォントの組み合わせはほんとに稀で、日常的に使うサイズに合わせて、サイズの微調節が必要のようである。 やはり、IPAフォントの恩恵は結構でかいなぁ。

今現在、いい感じに設定できたのは次の通り。

;;
;; フォントの設定
;;
;; VMware 上の X Server であるか?
(defvar my-x-on-vmware nil)
(if (string-match "^HOSTNAME-ON-VMWARE" (system-name))
(setq my-x-on-vmware t))
(when window-system
(cond
;; Ver.21 以前
((<= emacs-major-version 21)
(set-default-font "fontset-standard"))
;; X / emacs22
((and (eq window-system 'x)
(= emacs-major-version 22))
(dolist (fspec '("-*-fixed-medium-r-normal--12-*-*-*-*-*-fontset-12"
"-*-fixed-medium-r-normal--14-*-*-*-*-*-fontset-14"
"-*-fixed-medium-r-normal--16-*-*-*-*-*-fontset-16"
"-*-fixed-medium-r-normal--18-*-*-*-*-*-fontset-18"))
(if (not (assoc fspec fontset-alias-alist))
(create-fontset-from-fontset-spec fspec)))
(add-to-list 'default-frame-alist '(font . "fontset-14") t))
;; CarbonEmacs
((eq window-system 'mac)
(require 'carbon-font)
(setq mac-allow-anti-aliasing t)
(fixed-width-set-fontset "hirakaku_w3" 12))
;; Emacs 23 以上
((>= emacs-major-version 23)
(let (my-font-height my-font my-font-ja my-font-size my-fontset)
(cond
;; for X (debian/ubuntu/fedora)
((eq window-system 'x)
;;(setq my-font-height 90)
(setq my-font-height 105)
;;(setq my-font-height 120)
;;(setq my-font "Monospace")
(setq my-font "Inconsolata")
;;(setq my-font "Takaoゴシック")
;;(setq my-font-ja "VL ゴシック")
;;(setq my-font-ja "Takaoゴシック")
(setq my-font-ja "IPAゴシック")
(setq face-font-rescale-alist
'(("-cdac$" . 1.3)))
;; VMware 上のX11では、800x600 のとき 96 dpi になるように調節されている。
;; なので、別のサイズやフルスクリーンにすると、dpi の値が変化する。
;; 結果、Emacs Xft では同じ pt に対するpixel値が大きくなってしまう。
;; 対処不明。。。取り敢えず直接 pixel サイズで指定して対処?
(when my-x-on-vmware
(setq my-font-size 14))
)
;; Cocoa Emacs
((eq window-system 'ns)
(setq mac-allow-anti-aliasing t)
(setq my-font-height 120)
;;(setq my-font "Courier")
;;(setq my-font "Courier New")
;;(setq my-font "Osaka-Mono")
;;(setq my-font "Monaco") ;; XCode 3.1 で使っているフォント
(setq my-font "Menlo") ;; XCode 3.2 で使ってるフォント
;;(setq my-font "Consolas")
(setq my-font-ja "Hiragino Kaku Gothic Pro")
;;(setq my-font-ja "Hiragino Maru Gothic Pro")
;;(setq my-font-ja "IPAゴシック")
;; フォントサイズの微調節 (12ptで合うように)
(setq face-font-rescale-alist
'(("^-apple-hiragino.*" . 1.2)
(".*osaka-bold.*" . 1.2)
(".*osaka-medium.*" . 1.2)
(".*courier-bold-.*-mac-roman" . 1.0)
(".*monaco cy-bold-.*-mac-cyrillic" . 0.9)
(".*monaco-bold-.*-mac-roman" . 0.9)
("-cdac$" . 1.3)))
)
;; NTEmacs
((eq window-system 'w32)
(setq scalable-fonts-allowed t)
(setq w32-enable-synthesized-fonts t)
(setq my-font-height 100)
;;(setq my-font "MS ゴシック")
;;(setq my-font "VL ゴシック")
;;(setq my-font "IPAゴシック")
;;(setq my-font "Takaoゴシック")
;;(setq my-font "Inconsolata")
(setq my-font "Consolas")
;;(setq my-font "DejaVu Sans Mono")
;;(setq my-font-ja "MS ゴシック")
;;(setq my-font-ja "VL ゴシック")
(setq my-font-ja "IPAゴシック")
;;(setq my-font-ja "Takaoゴシック")
;;(setq my-font-ja "メイリオ")
;; ime-font の設定がわからん
;; フォントサイズの微調節 (10ptで合うように)
(setq face-font-rescale-alist
'((".*MS.*bold.*iso8859.*" . 0.9)
(".*MS.*bold.*jisx02.*" . 0.95)
(".*DejaVu Sans.*" . 0.9)
(".*メイリオ.*" . 1.1)
("-cdac$" . 1.3)))
;;(dolist (e face-font-rescale-alist)
;; (setcar e (encode-coding-string (car e) 'emacs-mule)))
)
)
;; デフォルトフォント設定
(cond
;; pixel 単位で指定
((and my-font-size my-font)
(setq my-fontset
(create-fontset-from-ascii-font (format "%s:size=%d" my-font my-font-size))))
;; 高さを pt 単位で指定
(my-font
(set-face-attribute 'default nil :family my-font :height my-font-height)
;;(set-frame-font (format "%s-%d" my-font (/ my-font-height 10)))
)
)
(when my-fontset
(add-to-list 'default-frame-alist `(font . ,my-fontset) t))
;; 日本語文字に別のフォントを指定
(when my-font-ja
(let ((fn (or my-fontset (frame-parameter nil 'font)))
(rg "iso10646-1"))
(set-fontset-font fn 'katakana-jisx0201 `(,my-font-ja . ,rg))
(set-fontset-font fn 'japanese-jisx0208 `(,my-font-ja . ,rg))
(set-fontset-font fn 'japanese-jisx0212 `(,my-font-ja . ,rg)))
)
))
))
view raw 25font.el hosted with ❤ by GitHub

まとめ

なんか Emacs をガンガン使い倒したくなってきた!!

追加 (2010/11/03)

VMware 上の X で画面サイズの変化で dpi が変化し pt 単位でフォント指定すると、実際のフォントの大きさがまちまちになるので、 明示的にpixel単位?で指定する方法に切り替えてみた。

0 件のコメント:

久しぶりの投稿

かなり期間が空いてしまったが、ブログを再開してみようと思う。 2013年3月が直前の投稿だったが、頻繁に更新していた時期が 2011年11月までなので、8年間ぶりとなる。 8年間なにをしていたのかと言えば、2回転職して未だにIT技術者の職を得ている。 その...