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)))