如何在org模式捕获中添加标签完成?

myo*_*tis 7 org-mode

我使用org模式的捕获功能来制作我所有的待办事项.它干净实用,让我为我的所有待办事项添加一致的内容,包括标题提示,标签提示和创建日期的自动插入.这是我的代码:

(setq org-capture-templates '((
     "t"                ; key
     "Todo"             ; description
     entry              ; type
     (file+headline "C:/.../org/notes.org" "tasks")       ; target
     "* TODO [#B] %^{Todo} :%^{Tags}: \n:PROPERTIES:\n:Created: %U\n:END:\n\n%?"  ; template
     :prepend t        ; properties
     :empty-lines 1    ; properties
     :created t        ; properties
     )))
Run Code Online (Sandbox Code Playgroud)

但是,我对标签的提示迫使我从内存中输入标签.如何从以下代码设置的标签列表中添加标签:

(setq org-tag-alist `(
              ("OFFICE"   . ?o)
              ("HOME"     . ?h)
              ("ERRAND"   . ?e) ))
Run Code Online (Sandbox Code Playgroud)

当我的观点位于已经创建的任务的标题中时,当我点击Cc Cc并让我通过他们的捷径单字母"o","h"或"e"选择标签时,会弹出此列表.

所以我的问题是:是否可以在我的捕获代码中包含此弹出式标记列表?

小智 9

内置的解决方案是使用%^g.从帮助org-capture-templates:

%^ g提示标记,在目标文件中的标记上完成.

%^ G提示标签,完成所有议程文件中的所有标签.

您也可以通过调用添加标记的某个函数"手动"执行此操作.通常使用添加标签org-set-tags(这就是C-c C-c正在做的事情).因此,我们所要做的就是在模板中使用以下%(func)语法调用它:

(setq org-capture-templates '((
     "t"                ; key
     "Todo"             ; description
     entry              ; type
     (file+headline "C:/.../org/notes.org" "tasks")       ; target
     "* TODO [#B] %^{Todo} %(org-set-tags) \n:PROPERTIES:\n:Created: %U\n:END:\n\n%?"  ; template
     :prepend t        ; properties
     :empty-lines 1    ; properties
     :created t        ; properties
     )))
Run Code Online (Sandbox Code Playgroud)

如果您有一个特定的标签列表(例如org-tag-alist),您可以completing-read选择从中进行选择:

(completing-read "Tag: " (mapcar #'first org-tag-persistent-alist) nil t)
Run Code Online (Sandbox Code Playgroud)

  • @EmmanuelGoldstein - 认为功能已经改变 - 尝试`org-set-tags-command`? (2认同)