Emacs是gtk1.x程序,字体管理选择的是X11核心字体系统。因此前面所说的X11
核心字体的设置已经比较详细了,这里再加一条,xlsfonts列出的字体如下所示:
-misc-simsun-medium-r-normal--0-0-0-0-c-0-gbk-0
里面的“c”有如下选择:p: 可变长度, c 是正方形, m是固定宽度。下面进入具体
设置:如果我们不指定 fontset, 那么 emacs 会使用默认的 fontset-default来显示
字体;如果你觉得这种字体不好看,就需要自己定义 fontset。定义fontset有两种方式,
一种是在~/.emacs 中使用 create-fontset-from-fontset-spec 函数,另一种是在
~/.Xdefaults 中定义资源。我们分别介绍这两种方法。---- 第二种方法是比较好的选
择。不过安装emacs21时还要把那个mule-euc中文编码支持包安装好,在~/.emacs中
写好中文环境,eg:
(set-language-environment 'Chinese-GB)
(set-keyboard-coding-system 'euc-cn)
(set-clipboard-coding-system 'euc-cn)
(set-terminal-coding-system 'euc-cn)
(set-buffer-file-coding-system 'euc-cn)
(set-selection-coding-system 'euc-cn)
(set-default-coding-systems 'euc-cn)
(setq locale-coding-system 'euc-cn)
(modify-coding-system-alist 'process "*" 'euc-cn)
(setq default-process-coding-system '(euc-cn . euc-cn))
(setq-default pathname-coding-system 'euc-cn)
(1)使用 create-fontset-from-fontset-spec
X11核心字体的每个 fontset 都有一个很长的正规名称,例如:
-adobe-courier-medium-r-normal--14-*-*-*-*-*-fontset-courier
为了方便起见也可以使用短名称,就是最后两段:fontset-courier, 那么这个名称是怎
么生成的呢?首先我们用xlsfonts命令找到自己满意的字体,eg:
-adobe-courier-medium-r-normal--14-100-100-100-m-90-iso8859-1
然后把最后两段去掉,也就是把 iso8859-1 去掉,换上自己起的字体集名称,比如
fontset-courier,最后把我们不关心的部分用 '*' 号取代就可以了。用xlsfonts列出来
的字体名称中,有些字段为 0,这些是可缩放的矢量字体,这些 0 不能保留,必须用数
字或 `*' 号取代,例如,
-adobe-courier-medium-r-normal--0-0-0-0-p-0-iso8859-1
要改为:
-adobe-courier-medium-r-normal--14-*-*-*-p-*-fontset-courier
还有一点需要注意,尽量不要选用可缩放的矢量字体,因为 emacs 不支持 xft,因此无
法打开抗锯齿,这些字体会显得很毛糙,不好看。选定了字体就可以用
create-fontset-from-fontset-spec 函数定义 fontset 了,这个函数很简单,它的参
数是个字符串:
(create-fontset-from-fontset-spec
(concat
"-*-courier-medium-r-normal-*-14-*-*-*-*-*-fontset-courier,"
"chinese-gb2312:-*-simsun-medium-r-*-*-14-*-*-*-c-*-gb2312*-*,"
"mule-unicode-0100-24ff:-*-simsun-medium-r-*-*-14-*-*-*-c-*-iso10646*-*,"
"korean-ksc5601:-*-*-medium-r-*-*-14-*-*-*-*-*-ksc5601*-*,"
"chinese-cns11643-5:-*-simsun-medium-r-*-*-14-*-*-*-c-*-gbk*-*,"
"chinese-cns11643-6:-*-simsun-medium-r-*-*-14-*-*-*-c-*-gbk*-*,"
"chinese-cns11643-7:-*-simsun-medium-r-*-*-14-*-*-*-c-*-gbk*-*,"
"sjis:-*-medium-r-normal--14-*-jisx0208*-*"))
这个字符串的第一段是 fontset 的名称,实际上也指定了英文(ascii字符集)字体,后面的
各段格式都是“字符集:字体”,分别为不同的字符集指定字体,例如上面的定义中,ascii
采用courier字体,chinese-gb2312采用simsun字体,以此类推。定义好fontset以后,
我们就可以让 emacs 使用这个fontset了:
(set-default-font "fontset-courier")
另外,为了让 emacs 创建新的 frame 时(C-x 5 系列命令)采用我们指定的fontset,
还要进行下面的设置:
(setq default-frame-alist
(append
'((font . "fontset-courier")) default-frame-alist))
(2)第二种定义fontset的方法是在 ~/.Xdefualts 中定义资源字符串, 例如在里面写入:
Emacs.Fontset-0:-adobe-courier-medium-r-normal-*-14-*-*-*-*-*-fontset-courier,/
chinese-gb2312:-*-simsun-medium-r-*-*-14-*-*-*-c-0-gb2312*-0,/
mule-unicode-0100-24ff:-*-simsun-medium-r-*-*-14-*-*-*-c-*-iso10646*-*,/
korean-ksc5601:-*-*-medium-r-*-*-14-*-*-*-*-*-ksc5601*-*,/
chinese-cns11643-5:-*-simsun-medium-r-*-*-14-*-*-*-c-*-gbk*-*,/
chinese-cns11643-6:-*-simsun-medium-r-*-*-14-*-*-*-c-*-gbk*-*,/
chinese-cns11643-7:-*-simsun-medium-r-*-*-14-*-*-*-c-*-gbk*-*,/
sjis:-*-medium-r-normal--14-*-jisx0208*-*
Emacs.font:fontset-courier
更改了 ~/.Xdefaults 的内容以后要执行:xrdb -merge .Xdefaults 或者重启X,这样
更改才能起作用。
上述两种方法都可以实现同样的效果。但是有一点细微的差别,采用第一种方法时,
fontset 的定义是写在 ~/.emacs 中的,而emacs 启动过程中,是先建立了第一个窗口,
然后才读取~/.emacs 的,建立第一个窗口时,因为还没有读到我们定义的fontset, 因此
它会采用 fontset-default 创建第一个窗口,当读到我们定义的 fontset 时,再进行调
整,如果我们定义的fontset 与默认的fontset-default 字体差别比较大,就会看到emacs
进行了一个调整窗口大小的动作,这个动作延缓了 emacs 的启动过程。而采用第二种方法
则不会出现这个问题,因此推荐使用第二种方法。
** 另附设置字体的技巧:
(1)在*scratch* buffer中输入
(frame-parameter nil 'font)
光标放在行末按C-x C-e就可以看到当前字体;
(2)Shift + MouseLeftClick可以出来字体选择对话框;
(3)M-x describe-font可以查看当前字体描述
(4)M-x set-default-font <RET><TAB>可以看到可以选择的字体
爽,妈的一下子就搞定了,但是也用了俺一天的时间,用第二种方法,记得要在重启X-WINDOW就什么都搞定了,原来linux管理操作弄清楚了也不是那么难的,关键是要把来龙去脉搞清楚