Doom Emacs中Noto Color Emoji与阿拉伯语字体配置冲突解决方案问询
解决方案
你可以从Emacs配置或系统字体配置两个维度修复该问题,优先推荐Emacs层面的修改,不会影响其他应用的字体渲染规则:
方案1:Emacs配置层面修复(推荐)
1.1 提高阿拉伯语字体配置优先级
原有配置没有显式指定优先级,安装Noto Color Emoji后Emacs的默认字体匹配规则会优先使用后加载的字体,修改配置为如下形式,显式将阿拉伯语字体规则前置:
;; 显式指定阿拉伯语字体优先级最高,避免被 emoji 字体覆盖 (set-fontset-font t 'arabic (font-spec :family "Noto Naskh Arabic") nil 'prepend)
1.2 单独指定Emoji字体(可选)
如果同时需要保证Emacs内emoji正常显示,可以追加emoji专属字体配置,和阿拉伯语字体规则互不干扰:
(set-fontset-font t 'emoji (font-spec :family "Noto Color Emoji") nil 'prepend)
1.3 Doom Emacs专属适配
将上述配置放在~/.config/doom/config.el的末尾,或者包裹在after-init-hook中,确保配置在Doom的默认字体加载逻辑完成后执行:
(add-hook! 'after-init-hook (set-fontset-font t 'arabic (font-spec :family "Noto Naskh Arabic") nil 'prepend) (set-fontset-font t 'emoji (font-spec :family "Noto Color Emoji") nil 'prepend))
修改完成后执行doom sync重启Emacs即可生效。
方案2:系统字体配置层面修复
如果希望所有应用都遵循阿拉伯语优先使用Noto Naskh Arabic的规则,可以修改Fontconfig配置:
- 新建字体优先级配置文件:
~/.config/fontconfig/conf.d/99-prefer-arabic-font.conf - 写入如下内容:
<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <match target="pattern"> <test name="lang" compare="contains"> <string>ar</string> </test> <edit name="family" mode="prepend" binding="strong"> <string>Noto Naskh Arabic</string> </edit> </match> </fontconfig>
- 执行
fc-cache -fv刷新字体缓存即可生效。
内容的提问来源于stack exchange,提问作者zakissimo
相关产品推荐
相关产品推荐

