UP | HOME

🔙回到目录 | 🔻 本网页更新于 [2026-09-11 五 23:09]

emacs-为todo关键字设定不同字体


其实我们能发现, org-mode 的 todo 关键字并不局限于默认的 TODO/DONE ,还可以自定义。既然如此,是否可以自定义为中文呢?当然可以。

不过,在自定义为中文的情况下,恐怕比起直接加粗默认字体,还是将关键字另设一个字体更好吧。

我们首先定义创造可变字体集的函数

(defun create-variable-pitch-fontset (name ascii-font han-font)
  "Create fontset named NAME with given ASCII-FONT and HAN-FONT."
  (let ((registry (concat "fontset-variable pitch " name)))
    (create-fontset-from-fontset-spec
     (font-xlfd-name
      (font-spec :family ascii-font
                 :registry registry)))
    (set-fontset-font registry 'han
                      (font-spec :family han-font))
    (set-fontset-font registry 'cjk-misc
                      (font-spec :family han-font))))

然后设置一个名字为 bold 的字体集。注意,在 Windows 上,如果我们要指明某个字体的变种,需在名字中声明。

(if (eq system-type 'windows-nt)
    (create-variable-pitch-fontset "bold"
                               "LXGW Bright Code GB"
                               "HarmonyOS Sans SC Medium")
  (create-variable-pitch-fontset "bold"
                                 "LXGW Bright Code GB"
                                 "HarmonyOS Sans SC"))

然后就开始酣畅淋漓地设置吧

;; 设置org-TODO-keywords及快速选择按键
(setq org-todo-keywords '((sequence "待办(t)" "等待(h)" "|" "完成(d)" "放弃(x)")
                          (sequence "子项(s)" "|" "完毕(f)")))
;; 设置org-TODO-keywords颜色
(defface my/org-todo-todo nil "待办类关键字。" :group 'org)
(defface my/org-todo-done    nil "完成类关键字。" :group 'org)
(defface my/org-todo-hold    nil "子项/步骤类关键字。" :group 'org)
(defface my/org-todo-xxxx    nil "子项/步骤类关键字。" :group 'org)
(defface my/org-todo-step    nil "子项/步骤类关键字。" :group 'org)
(defface my/org-todo-fini    nil "子项/步骤类关键字。" :group 'org)
(set-face-attribute 'my/org-todo-todo nil
                    :foreground (modus-themes-get-color-value 'red-warmer)
                    :weight 'medium
                    :fontset "fontset-variable pitch bold")
(set-face-attribute 'my/org-todo-step nil
                    :foreground (modus-themes-get-color-value 'red-cooler)
                    :weight 'medium
                    :fontset "fontset-variable pitch bold")   ; 换个中文字体也行
(set-face-attribute 'my/org-todo-done nil
                    :foreground (modus-themes-get-color-value 'green-warmer)
                    :weight 'medium
                    :fontset "fontset-variable pitch bold")
(set-face-attribute 'my/org-todo-xxxx nil
                    :foreground (modus-themes-get-color-value 'magenta-warmer)
                    :weight 'medium
                    :fontset "fontset-variable pitch bold")
(set-face-attribute 'my/org-todo-fini nil
                    :foreground (modus-themes-get-color-value 'green-cooler)
                    :weight 'medium
                    :fontset "fontset-variable pitch bold")
(set-face-attribute 'my/org-todo-hold nil
                    :foreground (modus-themes-get-color-value 'yellow-warmer)
                    :weight 'medium
                    :fontset "fontset-variable pitch bold")

(setq org-todo-keyword-faces '(("待办" . my/org-todo-todo)
                               ("子项" . my/org-todo-step)
                               ("等待" . my/org-todo-hold)
                               ("放弃" . my/org-todo-xxxx)
                               ("完成" . my/org-todo-done)
                               ("完毕" . my/org-todo-fini)))

© Published by Emacs 32.0.50 (Org mode 10.0-pre) | RSS 评论