设置doom-emacs的字体,手动执行有效果,但是如果重启emacs的话就没有效果了。
我主要有下面几个方面想说明
-
我为什么要将unicode的字符改成sarasa?
Sarasa Mono
是中英文等高等宽的,很满足我这个强迫症,所以我想改成这个字体。我改了doom-font
的值之后,发现如果输入中文的一些标点符号,还是比其它的字符要高,开始以为是Sarasa
字体的问题,但是describe-char
之后发现其实不然,这几个属于cjk-misc
的范围,它显示的字体不是Sarasa
而是其它字体(ftcrhb:-MS -Meiryo-bold-normal-normal-*-24-*-*-*-*-0-iso10646-1 (#x642)
)。
如果将doom-unicode-font改成 Sarasa Mono T TC,再 doom/reload-font
的话,就可以解决上述问题。
-
既然如此,问题出在哪?
问题出在我如果C-x C-e手动运行,这个方案是可以解决问题的,但是当将其写入配置文件,再重新打开emacs的时候,却不起效果了。
更加奇怪的是,我看了下 doom-unicode-font
的值,为nil,而在doom-unicode-font
的定义处,我得知,如果是mac电脑它会是apple-emoji-font,如果是linux它会是symbola,而不可能是一个空值,我电脑上有symbola字体,况且即使没有symbola字体,那我也config.el
中设置了如下的语句,而且我可以保证它执行了,因为*Message*
中有相应的反馈。
;; Add this line to set unicode font.
(set-fontset-font (frame-parameter nil 'font) 'unicode (font-spec :family "Sarasa Mono T SC"))
(message "Setting font! Setting font! Setting font!")
这里的 linux 应该为其它操作系统吧! defvar
定义变量除非自己重新定义和没有执行它或默认为空,否则不可能为空。
是因为它在 doom-init-extra-fonts-h 之前执行,造成 Sarasa Mono T SC 的优先级下调了,不是没有生效。应该设置 doom-unicode-font 为 (font-spec :family "Sarasa Mono T SC")
. 或想办法让它在 doom-init-extra-fonts-h 之后执行.
忘了说了,我这样设置了我的doom-font
(setq doom-font (font-spec :family "Sarasa Mono T SC" :size 24 :weight 'regular)
doom-variable-pitch-font (font-spec :family "Sarasa Mono T SC" :size 24)
doom-unicode-font (font-spec :family "Sarasa Mono T SC")
doom-big-font (font-spec :family "Sarasa Mono T SC" :size 24))
但是其它三项都在初始化的时候设置完好,唯独doom-unicode-font
还是nil,没有改变,同样也是如果C-x C-e
就非nil,但是重新启动之后就没有效果了。
这里不是说了吗,你可能在不知道的地方定义了 doom-unicode-font, 不信你将
doom-unicode-font (font-spec :family "Sarasa Mono T SC")
注释了, 后重启看 doom-unicode-font 的值, 或者启动 doom/sandbox 后运行 doom–run-vanilla-doom , 再查看 doom-unicode-font
的值是否为 symbola
or apple-emoji-font
解決了,我居然参考过这个帖子,但是没有仔细看。
如果设置了doom的unicode模块的话就会忽略自己给unicode字符配置的字体。