Org-mode的标题符号,用了org-bullets做美化,但是有些字体不完全支持utf8的符号,然后在论坛找到大神的解决方案:
(when (display-graphic-p)
(dolist (character '(?\x25C9 ?\x25CB ?\x2738 ?\x273F))
(set-fontset-font nil character "DejaVu Sans Mono"))
)
现在是这个情况:
如果打开emacs,创建一个org文件,可以正常加载用DejaVu字体显示的utf8符号,
但是,如果是上次关闭emacs的时候是一个org文件,再打开的时候就不会自动加载上面的语句。
求助一下,应该怎样让emacs打开的时候自动加载,而不是在打开org-mode的时候才进行加载。
byhc
2
上面的配置有没有放到 org-mode-hook 中呀?
放到这里了,新建或者打开一个org文件的时候,会起作用。但是不是打开emacs就加载的。
(use-package org-bullets
:ensure t
:defer t
:hook
(org-mode . org-bullets-mode)
:config
(when (display-graphic-p)
(dolist (character '(?\x25C9 ?\x25CB ?\x2738 ?\x273F))
(set-fontset-font nil character "DejaVu Sans Mono"))
)
;; (setq org-bullets-bullet-list '("◉" "⁑" "⁂" "❖" "✮" "✱" "✸"))
(message "Loading Org-bullets...DONE")
)
byhc
4
粗看起来是因为:config是在加载org-bullets时才会执行的,而配置中声明了 :defer t,做了延迟加载。
你试下去掉 :defer t 看看?
现在是这么个想法:
不想让这个配置在这里边待着了。
怎么写成全局调用这个配置?
add-hook,还是with-eval-after-load?
byhc
6
都可以吧,我倾向放在org-mode-hook中来设置。
不是全局设置的话,会有这种情况:
关闭emacs的时候,当前文件是一个org文件,然后再打开emacs,默认就打开上次关闭的文件,他不会加载。
byhc
8
默认就打开上次关闭的文件——这个是怎么设置的?
我刚刚测了下你的配置,应该没问题,在我这里是正常的。上面我说的延迟加载有误,因为如果org-mode正常的话,org-bullets应该也加载了。
所以我感觉是默认打开上次关闭文件时,org-mode实际没有触发。
你可以看下再打开emacs时,默认打开的org文件的major-mode是啥。
byhc
11
无法复现你的问题,可能是其他配置干扰。我这里有个最小配置,你可以试下。
用 emacs --init-directory=<init.el path> 来启动。
;;; -*- lexical-binding: t -*-
(setq package-archives '(("gnu" . "https://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/")
("nongnu" . "https://mirrors.tuna.tsinghua.edu.cn/elpa/nongnu/")
("melpa" . "https://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/")))
(package-initialize) ;; You might already have this line
(setq inhibit-splash-screen 1)
(add-to-list 'load-path "/Users/user/test/org-bullets")
(use-package org-bullets
:defer t
:hook
(org-mode . org-bullets-mode)
:config
(when (display-graphic-p)
(dolist (character '(?\x25C9 ?\x25CB ?\x2738 ?\x273F))
(set-fontset-font nil character "DejaVu Sans Mono"))
)
;; (setq org-bullets-bullet-list '("◉" "⁑" "⁂" "❖" "✮" "✱" "✸"))
(message "Loading Org-bullets...DONE")
)
(use-package org)
(require 'recentf)
(recentf-mode 1)
(recentf-open-most-recent-file 1)
Kinney
12
你放在org-bullets 的 use-package 里面,又是延迟加载的,自然就只会在加载 org-bullet 这个 package 时配置才会生效。最简单的,把这段配置从 org-bullet 里面拿出来,直接放在外面就可以。(不知道你这个要达成什么效果,我没有测试)
另外这属于配置的加载顺序问题,不是 utf-8 的显示问题。
用
显示
这几个符号。
拿出来试了,就是要解决加载顺序问题。
拿出来以后重新启动emacs的时候,不自动加载。
看到你在那个帖子下的问题了,我在这里回你吧,这个代码并不需要和 mode 有关联,你完全可以放在 use-package
之外
此外,对于 org-bullets 来说,应该可以通过 org-bullets-face-name
设置 face
最后再顺便说一下我目前的配置,我现在是在使用 org-superstar,它是有相应的 face 的,所以可以这样设置
(use-package org-superstar
:defer t
:hook
(org-mode . org-bullets-mode)
:custom-face
(org-superstar-header-bullet
((t (:family "DejaVu Sans"))))
(org-superstar-item
((t (:family "Roboto Mono")))))
byhc
15
他这里延迟加载没问题,因为添加了org-mode的hook,但神奇的是用recentf打开org文件后,org-mode加载了,但没有带上org-bullets加载。
我上面放了个最小配置,在我机器上是可以正常加载的。所以我怀疑是他其他的配置影响了org-bullets的加载,比如实际init.el执行出错中断了什么的。