doom-emacs 配置字体, C-x C-e 执行有效果,但是重新启动之后无效

设置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字符配置的字体。