我搜索了源,找不到任何明显的方法可以做到这一点。我知道Org-mobile使用过它,但是我对此没有太多经验。
作为入门者,以下代码段将循环遍历当前文件中的所有大纲标题(组织模式标题基本上是标准的Emacs大纲标题),并添加一个ID(如果还没有的话):
(require 'org-id)
(save-excursion
(goto-char (point-max))
(while (outline-previous-heading)
(org-id-get-create)))
Run Code Online (Sandbox Code Playgroud)
(如果您想知道为什么该循环在缓冲区上向后而不是向前,这是因为该while循环将始终至少调用一次大纲导航功能,并且如果您的组织模式文件以标题开头,则向前跳过)
通过遍历该函数返回的条目(org-agenda-files),或者将其添加到Org模式文件的保存钩子,可以很容易地在Org模式议程已知的所有文件的循环中使用此方法。
如果比我更灵活的手指没有首先到达那里,如果您可以确定何时添加ID,我可以将上述内容扩展为一个完整的解决方案。
我同意Stuart的观点 - 我认为org-id中没有任何内容可以自动执行此操作,因此当您想要添加ID 时,它真的可以归结为.
如果您使用org-capture添加所有项目,那么org-capture-prepare-finalize-hook放置代码是一个合理的位置:
(add-hook 'org-capture-prepare-finalize-hook 'org-id-get-create)
Run Code Online (Sandbox Code Playgroud)
或者你可以像Stuart建议的那样做,并为org-mode文件添加一个save hook.我认为处理文件中所有标题的最惯用方法是使用映射API:
(defun my/org-add-ids-to-headlines-in-file ()
"Add ID properties to all headlines in the current file which
do not already have one."
(interactive)
(org-map-entries 'org-id-get-create))
Run Code Online (Sandbox Code Playgroud)
最后我们只需添加一个before-save-hook只在org-mode中运行的东西:
(add-hook 'org-mode-hook
(lambda ()
(add-hook 'before-save-hook 'my/org-add-ids-to-headlines-in-file nil 'local)))
Run Code Online (Sandbox Code Playgroud)
应该这样做!
| 归档时间: |
|
| 查看次数: |
4794 次 |
| 最近记录: |