新し目の 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の結果は次のようになる
いくつか設定してみたが、全ての pt で、1:2 に揃うフォントの組み合わせはほんとに稀で、日常的に使うサイズに合わせて、サイズの微調節が必要のようである。 やはり、IPAフォントの恩恵は結構でかいなぁ。
今現在、いい感じに設定できたのは次の通り。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; | |
;; フォントの設定 | |
;; | |
;; 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))) | |
) | |
)) | |
)) |
まとめ
なんか Emacs をガンガン使い倒したくなってきた!!
追加 (2010/11/03)
VMware 上の X で画面サイズの変化で dpi が変化し pt 単位でフォント指定すると、実際のフォントの大きさがまちまちになるので、 明示的にpixel単位?で指定する方法に切り替えてみた。
0 件のコメント:
コメントを投稿