doom emacs中文字体与默认字体冲突

尝试在doom上配置中文字体,从帖子上看到过两种办法:

(defun +my/better-font()
  (interactive)
  ;; english font
  (if (display-graphic-p)
      (progn
        (set-face-attribute 'default nil :font (format "%s:pixelsize=%d" "Fira Code" 17)) ;; 11 13 17 19 23
        ;; chinese font
        (dolist (charset '(kana han symbol cjk-misc bopomofo))
          (set-fontset-font (frame-parameter nil 'font)
                            charset
                            (font-spec :family "Sarasa Mono SC")))) ;; 14 16 20 22 28
    ))

(defun +my|init-font(frame)
  (with-selected-frame frame
    (if (display-graphic-p)
        (+my/better-font))))

(if (and (fboundp 'daemonp) (daemonp))
    (add-hook 'after-make-frame-functions #'+my|init-font)
  (+my/better-font))

或者

(defun +my/better-font()
  (interactive)
  ;; english font
  (if (display-graphic-p)
      (progn
        (set-face-attribute 'default nil :font (format "%s:pixelsize=%d" "Fira Code" 17)) ;; 11 13 17 19 23
        ;; chinese font
        (dolist (charset '(kana han symbol cjk-misc bopomofo))
          (set-fontset-font (frame-parameter nil 'font)
                            charset
                            (font-spec :family "Sarasa Mono SC")))) ;; 14 16 20 22 28
    ))

(defun +my|init-font(frame)
  (with-selected-frame frame
    (if (display-graphic-p)
        (+my/better-font))))

(if (and (fboundp 'daemonp) (daemonp))
    (add-hook 'after-make-frame-functions #'+my|init-font)
  (+my/better-font))

但有个共同问题:doom默认字体是monaco-12。我如果把英文字体设成一样的monaco 12,这行代码doom就完全不读了,我需要手动C-x C-e才行。如果设置的不是monaco-12,那就完全没问题。

有没有人可以指教下这个问题的原因?

儞是怎麼設置旳 monaco-12 呢?

比如第一段代码里上面那个Fira Code 17替换成Monaco 12

改成

... :font (font-spec :family "Monaco"
                             :weight 'normal
                             :size    12))

而不是 format 形式呢?

刚试了下,无效,结果一样

攺完後運行

(+my/better-font)

然後分別在中文和英文上

C-u C-x =

看看是甚麼(

手动运行一直都是没问题的。C-u C-x显示的是英文 Monaco-normal-normal…12 中文是STKaiti-bold-normal-normal…14

手勭沒問題那就沒問題了呀

儞可以手勭加上 hook,有三个

(add-hook #'after-init-hook #'+my|init-font)
(add-hook #'after-make-frame-functions   #'+my|init-font)
(add-hook #'server-after-make-frame-hook #'+my|init-font)

原来的代码里最后一段有个add-hook,是after-make-frame-functions的,你的另外两个要放到和他平行的位置嘛

试了下,还是不行。后面我再想想办法看看是什么原因吧。

我的三个都是在最外面

刚又试了试,还是不行。

整段代码手动C-x C-e的没任何问题的。但无论怎么加hook,emacs启动的时候就是不运行。非要手动不可。

但只要English font不是Monaco-12,他就自己运行。 。。。。。。

那就手动吧(

另外你可以启动 emacs 的时候加上 -e ‘(+my/better-font)’

比如

emacsclient -nc -e ‘(+my/better-font)’

为啥大家都没提 doom emacs 默认就是配置妥当的,并不需要调整。。。

我只是把默认的 monaco 换成 menlo 了:

~/.doom.d/config.el:

;; Doom exposes five (optional) variables for controlling fonts in Doom. Here
;; are the three important ones:
;;
;; + `doom-font'
;; + `doom-variable-pitch-font'
;; + `doom-big-font' -- used for `doom-big-font-mode'; use this for
;;   presentations or streaming.
;;
;; They all accept either a font-spec, font string ("Input Mono-12"), or xlfd
;; font string. You generally only need these two:
;; (setq doom-font (font-spec :family "monospace" :size 12 :weight 'semi-light)
;;       doom-variable-pitch-font (font-spec :family "sans" :size 13))
(setq doom-font (font-spec :family "Menlo" :size 12 :weight 'semi-light)
      doom-unicode-font (font-spec :family "monospace"))

其实是因为想换个中文字体。问题就在于如果不改英文字体或大小,单写什么设中文字体的命令都没用。

doom 的话,像 doom-init-ui-hook 之类的也能用吧。

现在我 gui 用 doom-init-ui-hook ,daemon 用 server-after-make-frame-hook 看起来已经达到目的了。

可能是中文weight的问题,你改成light试试?

感觉好像是(set-face-attribute 'default nil :font (format “%s:pixelsize=%d” “Fira Code” 17))这句话,如果这里面的字体不变的话,后面咋变都没用。按说c-x c-e也不行,我是放在了(add-hook! 'doom-load-theme-hook xxx)这个hook里面。