emacs的org-mode下设置的org-todo-keywords无效
Last Updated:2022-08-12
问题描述
我的org配置文件里头,设置了变量org-todo-keywords
的值。
当我打开我的agenda.org的时候,我运行C-c h v
(即,查看变量),然后输入org-todo-keywords
,发现和我在配置文件里头设置的值一样。
但是,当我通过C-c C-t
去改变一个todo事项的状态的时候,发现还是只有todo
和done
这两个状态(默认值,即我的org-todo-keywords
里头的值没有生效)。
我希望C-c C-t
去改变一个todo事项的时候,能使用到我org-todo-keywords
变量里头的值。
我的emacs 是26.3,运行在macbook pro上
解决方案
通过分别在具体的org文件(agenda.org,xxx)里头运行org-mode-restart
(按键M-x org-mode-restart
)即可。即,重启buffer。
原因
参见这个回答的post。
该post具体内容:
Org-mode caches various things on load. In this case
org-todo
relies on todo keyword state cached inorg-todo-kwd-alist
which is generated byorg-set-regexps-and-options
which is run when setting the mode to org-mode for the buffer. If some org-mode customization doesn't seem to be taking effect it's usually a good idea to refresh things by reloading the buffer. Either by saving, closing, and re-opening the file or reverting the file byC-x C-v [return]
(find-alternate-file
). I would personally consider this a bug. When emacs gets watchpoints (in v26.1 hopefully) minor caching issues like this should be easily addressed.
原因(中文)
原因是Org-mode
会在加载之时,缓存很多信息。
而我们C-c C-t
去改变一个todo事项状态的时候,只有默认的keyword(没有我们设置在org-todo-keywords
)里头的原因是。在org-mode加载的时候,org-set-regexps-and-options
运行起来去设置org-todo-kwd-alist
的时候,可能此时我们的org-todo-keywords
还没生效,所以使用了默认的keyword(只有todo
和done
)。
然后等加载完成之后,我们才设置了想要的org-todo-keywords
,从而导致缓存的信息(org-todo-kwd-alist
)里头是默认的keywords。
所以我们通过org-mode-restart
,重新跑一遍加载逻辑。此时org-set-regexps-and-options
发现了我们设置的org-set-keywords
,从而能正确。
不足之处
导致我们要到每一个org文件里头,去跑一遍org-mode-restart
。