とりあえず関数に(Cocoa Emacs のフォント)
Emacs Lisp の素人だからちゃんとしたものは書けないけど、とりあえず「こういう事ができます」のエントリー。日本語を必要としない場合は set-frame-font でインタラクティブにフォントを変更できる。日本語と英字フォントを設定するそういう関数を書いてみた。アルファベット表記のフォントファミリー名で設定する。もしこういう関数を用意しておけば、初期設定ファイルでのフォント設定は次の1行で終わり。
(when window-system (set-font-ascii_japanese "Menlo" "Hiragino Maru Gothic ProN" "14") )
初期設定だけではなく、インタラクティブに M-x set-font-ascii_japanese と使う事もできる。
関数の定義は以下の通り。一応動作するけど未完成版。
(defun set-font-ascii_japanese (ascii-font-family jp-font-family size) "フレーム上の英字フォントと日本語フォントをASCII-FONT-FAMILY と JP-FONT-FAMILY に 設定する(フォントはファミリー名で指定)。英字フォントのサイズを SIZE に設定する。" (interactive (let* ((completion-ignore-case t) (af (completing-read "ascii font: " '("Menlo" "Monaco" "Courier"))) (jf (completing-read "japanese font: " '("Hiragino Maru Gothic ProN" "Hiragino Kaku Gothic ProN" "Hiragino Mincho ProN" "Osaka"))) (si (completing-read "size: " nil))) (list af jf si))) (let* ((h (* (string-to-number size) 10)) (fontspec (if (string= ascii-font-family "") nil (font-spec :family ascii-font-family))) (jp-fontspec (if (string= jp-font-family "") nil (font-spec :family jp-font-family)))) (if (and fontspec jp-fontspec) (progn (if (eq h 0) (setq h 140)) (set-face-attribute 'default nil :family ascii-font-family :height h) (set-fontset-font nil 'japanese-jisx0213.2004-1 jp-fontspec) (set-fontset-font nil 'japanese-jisx0213-2 jp-fontspec) (set-fontset-font nil 'katakana-jisx0201 jp-fontspec) ; 半角カナ (set-fontset-font nil '(#x0370 . #x03FF) fontspec) ; ギリシャ文字 (set-fontset-font nil '(#x0080 . #x024F) fontspec) ; 分音符付きラテン )))) (dolist (elt '(("^-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))) (add-to-list 'face-font-rescale-alist elt))
まだ何か不備がありそうだけど、こういう感じの関数を完成させればいいかな。
途中でフォントを変えたい場合には、やはりターゲットを日本語に指定してappend を使わずに、set-fontset-fontする必要があった。