以交互方式输入使用捕获放置条目的标题

时间:2012-01-25 16:03:06

标签: emacs org-mode

使用如下所示的捕获模板,我可以将条目添加到文件中的不同标题。如何在捕获过程中手动输入标题,而不是像我现在一样将每个标题设置为.emacs文件中的键?

(setq org-capture-templates
      '(
      ("l" "Log" entry
     (file+headline "c:/Org/log.org" "Log")
     "\n\n** %?\n<%<%Y-%m-%d %a %T>>"
     :empty-lines 1))

4 个答案:

答案 0 :(得分:5)

看起来,至少在较新版本的org中,可以在捕获模板中使用自定义函数来执行此操作。

而不是:

entry
(file+headline "~/Work/work.org" "Refile")

您可以使用:

entry
(file+function "~/Work/work.org" function-finding-location)

“功能查找位置”是您自己编写的自定义功能,可以轻松提示您标题。

或者,您可以更进一步,并定义一个自定义函数,它将提示文件名和标题名称(或您可以想到的任何其他内容):

entry
(function function-finding-location)

我自己并不太了解elisp来编写这些函数,但这看起来像是开始的地方。如果其他人可以提供一些代码,那就太好了。相关文档如下:

http://orgmode.org/manual/Template-elements.html

答案 1 :(得分:3)

我不相信你可以在捕获标题时提示它。但是,您可以在捕获窗口内进行重新调整,这将导致所需的行为。

我会定义一个包罗万象的目标标题/文件,这样如果您忘记了,您将始终在同一位置收集它们,然后只需在创建后重新编译它们。如果您还在此标题上设置了类别/标记,则可以轻松查看错误捕获的捕获条目并根据需要重新填充。 (以下示例)

然后选择使用C-c C-c重新选择C-c C-w,而不是使用 ("i" "Incidents" entry (file+headline "~/Work/work.org" "Refile") "* TODO %^{Ticket} - %^{User}\nSCHEDULED: %^t DEADLINE: %^t\n:PROPERTIES: \n:DATE: %^U\n:END:\n%^{MANAGER}p%^{HOSTNAME}p%^{LOCATION}p%^{TEL}p\n%c" :empty-lines 1 :clock-in t :clock-resume t) 完成,系统会要求您选择要将新条目发送到的标题。


我用于此捕获的捕获模板如下(改编自Bernt Hansen's capture settings

* Refile                                                             :refile:
:PROPERTIES:
:CATEGORY: Unsorted
:END:

(添加换行符以避免在此处阅读时滚动)

标题配置如下

Unsorted:     Deadline:    TODO <Headline>                          :refile::

有了这个,我最终将所有未重新编译的任务显示为

{{1}}

我目前倾向于使用标签作为参考,如果我正在等待同事/经理处理机票,或提醒我在看到它们时与他们交谈,以便最后的标签清晰可见,如果我正在努力记住问题是什么(因为我只是显示案例编号和用户名,条目中的详细信息)。

答案 2 :(得分:3)

我写了一个与文件+函数一起使用的函数,它会在捕获时提示一个位置。

它使用org-refile的内部提示功能,因此我们在提示符中完成标题的完成(maxlevels被覆盖为9)。当用户输入未知标题时,它会在文件末尾创建它。

(defun org-ask-location ()
  (let* ((org-refile-targets '((nil :maxlevel . 9)))
         (hd (condition-case nil
                 (car (org-refile-get-location nil nil t t))
               (error (car org-refile-history)))))
    (goto-char (point-min))
    (outline-next-heading)
    (if (re-search-forward
         (format org-complex-heading-regexp-format (regexp-quote hd))
         nil t)
        (goto-char (point-at-bol))
      (goto-char (point-max))
      (or (bolp) (insert "\n"))
      (insert "* " hd "\n")))
    (end-of-line))

在您的情况下,您可以像这样使用它:

(setq org-capture-templates
 '(("l" "Log" entry
    (file+function "c:/Org/log.org" org-ask-location)
    "\n\n** %?\n<%<%Y-%m-%d %a %T>>"
    :empty-lines 1))

答案 3 :(得分:2)

在捕获笔记时,在完成书写后按C-u C-c C-w以在所需的新标题下重新填充。

您还需要设置此变量

 (setq org-refile-allow-creating-parent-nodes (quote confirm))

您可以将其设置为t而不是确认。但我喜欢这样确认,因为我不经常重新使用新目标