我使用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)