目前的情况是:
打开org-mode文件,自动加载org-mode,查看org-mode-hook,值为config中设置的(自动加载real-auto-save-mode等)。但是org-mode-hook并没有生效(org-mode文件并没有启用real-auto-save-mode)。
当前文件手动执行org-mode,org-mode-hook中的函数才生效。
似乎org-mode-hook的定义没有问题,但是生效的时机不对。直觉与doom-emacs有关,但是回滚过多个版本但没有生效
环境如下:
- GNU Emacs v29.3 nil
- Doom core 5da8304c4(2024-07-01), 03d692f12(2023-12-08)
- Org-mode: 9.8(39272e2), 9.6.15
现在不太有调试思路,恳请指教!
jkg
2
org-mode 是通过 define-derived-mode 定义的
define-derived-mode 里通过 run-mode-hooks 来执行对应 mode 的 hook
所以,edebug-defun run-mode-hooks 跟踪一下,应该能看到你定义的 hook 中的函数有没有被执行。
感谢提供思路,现在定位到问题是因为我修改了doom中的hook:
(defalias '+org--restart-mode-h #'ignore)
因为启用该功能,在使用org-capture时无法正常格式化,所以参考Capture template 'X': Wrong type argument: stringp, nil · Issue #4832 · doomemacs/doomemacs · GitHub 进行了此项设置。
但是禁用该功能之后,导致doom在switch buffer时不会restart org-mode。而restart org-mode时会加载org-mode-hook,否则org-mode-hook失效。这就导致了本帖所说的问题。
看来简单粗暴地禁用是不行的,我现在要想办法解决org-capture无法正常格式化的问题…… 感觉hook 导致的问题比普通函数要难排查
我的是这样设置
(eval-after-load 'org-mode
;; [[https://emacs.stackexchange.com/questions/30613/adding-modifying-todo-keywords][org mode - Adding/Modifying TODO keywords - Emacs Stack Exchange]]
;;org-todo-keywords 有 bug, 需要restart
(progn
(when (derived-mode-p 'org-mode)
(org-mode-restart)
)
(require 'org-eldoc)
)
)