Carbon Emacsの(脱carbon-font)フォント設定
Carbon Emacs Package で carbon-font.el を使わずフォントをいろいろ試したメモです。
なぜ carbon-font を使わないかというと
- carbon-font (+ fixed-width-fontset) では、文字幅が漢字がASCIIの2文字分を取るようになるが、日本語とASCIIで高さが合わなくなる。(日本語がある行*だけ*行間が高くなる。間延びに見えたりちぐはぐに見えたりする。)
- 個人的には ASCII:漢字 = 1:2 にそこまでこだわる必要はないと思っている。プログラムではあんまり日本語書かない。
- M+ OUTLINE FONTS がなぜか使えなかった
Macemacsjp-MLで、「行の高さをそろえたければ fixed-width-set-default-fontset は使わない方がよい」というのを目にしたので取りかかってみた。
(が、ムズい。書くために調べること多杉。)
いろいろ調べるために使う関数(説明は C-h f で調べる):
- x-list-fonts
- x-font-family-list
- describe-fontset
- list-fontsets
- list-character-sets
*scratch* で書いては試し、の繰り返しで組み立てていきます。
以下に、コード書き向けの設定をいくつか。
(japanese-jisx0208とkatakana-jisx0201以外の文字集合での指定は必要になったらする。たぶん必要にならない。)
以下のスクリーンショットでは mac-allow-anti-aliasing は t。
Consolas + ヒラギノ角ゴ
ASCII:漢字 は 1:2 ではない。
;; fontset-consolas (create-fontset-from-mac-roman-font "-apple-consolas-medium-r-normal--14-*-*-*-m-0-mac-roman" nil "consolas") (set-fontset-font "fontset-consolas" 'japanese-jisx0208 '("ヒラギノ角ゴ pro w3" . "jisx0208.1983")) (set-fontset-font "fontset-consolas" 'katakana-jisx0201 '("ヒラギノ角ゴ pro w3" . "jisx0201.1976"))
Bitstream Vera Sans Mono + ヒラギノ角ゴ
;; fontset-bitstream (create-fontset-from-mac-roman-font "-apple-bitstream vera sans mono-medium-r-normal--13-*-*-*-*-*-iso10646-1" nil "bitstream") (set-fontset-font "fontset-bitstream" 'japanese-jisx0208 '("ヒラギノ角ゴ pro w3" . "jisx0208.1983")) (set-fontset-font "fontset-bitstream" 'katakana-jisx0201 '("ヒラギノ角ゴ pro w3" . "jisx0201.1976"))
ASCII:漢字 は 1:2 ではない。
Monaco + ヒラギノ角ゴ
(create-fontset-from-mac-roman-font "-apple-monaco-medium-r-normal--12-*-*-*-*-*-iso10646-1" nil "monaco") (set-fontset-font "fontset-monaco" 'japanese-jisx0208 '("ヒラギノ角ゴ pro w3" . "jisx0208.1983")) (set-fontset-font "fontset-monaco" 'katakana-jisx0201 '("ヒラギノ角ゴ pro w3" . "jisx0201.1976"))
ASCII:漢字 は 1:2 ではない。(この組合せで幅の比を 1:2 にしたかったら carbon-font で。)
M+ 1m light + 漢字はヒラギノ角ゴ
(create-fontset-from-mac-roman-font "-apple-m+ 1m-medium-r-normal--14-*-*-*-*-*-iso10646-1" nil "mplus") (set-fontset-font "fontset-mplus" 'japanese-jisx0208 '("m+ 1m light" . "iso10646")) (set-fontset-font "fontset-mplus" (cons (make-char 'japanese-jisx0208 #x30 #x20) (make-char 'japanese-jisx0208 #x74 #x7f)) '("ヒラギノ角ゴ pro w3" . "jisx0208.1983")) (set-fontset-font "fontset-mplus" 'katakana-jisx0201 '("m+ 1m light" . "iso10646"))
ASCII:漢字 は 1:2。
- japanese-jisx0208 の m+ 1m light の指定で、素直に '("m+ 1m light" . "jisx0208.1983") と書くと、全角文字が半角の幅になってしまい文字どうしが重なって乱れる。(これはFirefoxでM+を指定しても同じ現象になる。)"iso10646" にしたら幅が正しくなる。
- JIS X 0208のM+にない範囲(漢字)は、明示的に別のを指定すると、boldも使える。漢字の範囲を特に指定しなくても、自動で合成されて漢字の表示はできるが、テキストがboldになったとき、ひらがなやカタカナだけが太字になって汚い。
- M+で表示される文字とヒラギノ角ゴで表示される文字で、文字の下のラインがずれて多少でこぼこしている。ぎりぎり許容範囲か。文字を大きくすると目立つ。(下のスクリーンショットを参照)
ASCIIだけ M+ 1m
;; fontset-asciimplus (create-fontset-from-mac-roman-font "-apple-m+ 1m-medium-r-normal--14-*-*-*-*-*-iso10646-1" nil "asciimplus") (set-fontset-font "fontset-asciimplus" 'japanese-jisx0208 '("ヒラギノ角ゴ pro w3" . "jisx0208.1983")) (set-fontset-font "fontset-asciimplus" 'katakana-jisx0201 '("ヒラギノ角ゴ pro w3" . "jisx0201.1976"))
ASCII:漢字 は 1:2。
作ったfontsetを使う
default-frame-alist に fontset を指定する。M-xで使えるような関数にしてみた。
(defun my-set-default-fontset (fontset) (interactive ; borrowed from describe-fontset code (if (not (and window-system (fboundp 'fontset-list))) (error "No fontsets being used") (let ((fontset-list (nconc (fontset-list) (mapcar 'cdr fontset-alias-alist))) (completion-ignore-case t)) (list (completing-read "Fontset: " fontset-list nil t "fontset-"))))) (let ((old (assoc 'font default-frame-alist))) (if old (setcdr old fontset) (add-to-list 'default-frame-alist (cons 'font fontset)))) (set-frame-font fontset))
上の関数を使って、実際に使うfontsetを指定するには次のように書くか、 M-x my-set-default-fontset を実行する。
(my-set-default-fontset "fontset-mplus")
M+ outline font が癒し系なので、基本はこれで行くことにしてみた。まあ、どれでも、プログラムを書くのには十分見やすい感じなので、上の設定は全部書いて、気分で変えたりしている。