Wednesday, April 15, 2009

[Emacs]调整字体

update @ 2009/6/09
对于最新的emacs 23版本,字体描述格式,已经从X Logical Font Description (XLFD)转变为更为简单的fontconfig方式.关于两种字体系统,可以参见本blog里这个帖子.不过为了向前兼容,XLFD依然被支持.比如同是描述13pt的Courier New字体,两种格式分别如下:
  •      XLFD: -*-Courier New-normal-r-*-*-13-*-*-*-c-*-iso8859-1
  •      Fontconfig: Courier New-13
在emacs 23里,set-default-font已经过时.实际如果在.emacs中使用了set-default-font,普通模式下emacs字体依然正确.但是如果是用daemon模式运行emacs23的client时候, client会不正常的设置字体.解决方法是在set-frame-font,或是使用default-frame-alist来添加字体, 如下
(add-to-list 'default-frame-alist '(font . "DejaVu Sans Mono-14"))
这样普通和daemon模式就都可以正确设置字体了.
对于emacs22以及更早版本的字体设置如下:
-------------------------------------------------------------------------------
说实话emacs里要调整个字体什么的还真挺麻烦的。一般的基于GUI的editor都比它来的简单直接。

1 关于Linux下的字体
使用xlsfonts来查看系统里有哪些字体
$xlsfonts
得到像如下格式的输出
-adobe-courier-medium-r-normal--17-120-100-100-m-100-iso8859-1
-dejavu-dejavu sans mono-medium-r-normal--0-0-0-0-c-0-iso8859-1
每一行都是一种系统支持的字体。每一行的格式参见 Font specification , 简单说来遵循“-maker-family-weight-slant-widthtype-style-pixels-height-horiz-vert-spacing-width-registry-encoding"这样的格式。需要特别指出的是pixels代表的是字体的高度(单位是像素),height代表的是字体在屏幕上的高度*10(单位是磅), pixels和height两个当中通常只指定一个值,另一个用*代替。另外我们注意到列出来的字体当中有些字段为0,这说明这些字体是矢量字体。对于这些字段我们使用的时候需要用数字或者*来替换。

可以通过xfd来预览你想尝试的字体, 比如
$xfd -fn "-dejavu-dejavu sans mono-medium-r-normal--16-*-*-*-c-*-iso8859-1"   


2 回到Emacs
可以通过M-x set-default-font 然后输入字体名称(如果不知道可以用tab来complete)来设置当前字体。如果需要固定下来,可以在~/.emacs当中加入:
(set-default-font "-dejavu-dejavu sans mono-medium-r-normal--16-*-*-*-m-*-iso8859-1")

需要额外指出的是,这里我设置成了dejavu的等宽字体。不过我发现使用了这种字体以后,line spacing显得过大了,所以可以用以下语句来调整:
(setq-default line-spacing 0)
另外我这里的emacs有一点小bug所以set-default-font以后会有好几秒钟的延迟,需要在~/.emacs开头加入
(modify-frame-parameters nil '((wait-for-wm . nil)))


3 几个字体设置的小tip
  • M-x describe-char 我们可以使用这个命令查看光标所在的字符采用的是什么字体。
  • M-x describe-fontset 这个命令用来查看各个字符集分别采用了什么字体。
  • 在*scratch* buffer中输入(frame-parameter nil 'font) 光标放在行末按C-x C-e就可以看到当前字体
  • Shift + MouseLeftClick可以出来字体选择对话框;
  • M-x describe-font可以查看当前字体描述
  • M-x set-default-font 可以看到可以选择的字体。
参考:
[1] http://www.linuxquestions.org/questions/linux-software-2/emacs-changing-default-font-size-and-font-type-489000/
[2] http://www.yuanma.org/data/2006/0503/article_355.htm
[3] http://www.gnu.org/software/emacs/windows/Fonts-and-text-translation.html

No comments: