4

我一直在尝试改进我的 org-fu,我的任务之一是重新归档列表项。出于各种原因,我通常更喜欢使用列表项(主要是 - 考虑到我的任务量,不要乱扔我的 CONTENT 视图,并且有一个真实的大纲)。

但是,唉,当我尝试重新填写使用捕获系统创建的列表项时,我收到一个错误 - 我不允许这样做,因为它“没有意义”。

有没有办法覆盖这种行为?

编辑:ATM 我只设法重新归档条目(即标题),然后将它们手动转换为列表项。我认为有比这更好的解决方案...

我在 org-capture.el 中找到了这个函数:

(defun org-capture-refile ()
  "Finalize the current capture and then refile the entry.
Refiling is done from the base buffer, because the indirect buffer is then
already gone.  Any prefix argument will be passed to the refile command."
  (interactive)
  (unless (eq (org-capture-get :type 'local) 'entry)
    (error
     "Refiling from a capture buffer makes only sense for `entry'-type templates"))
  (let ((pos (point))
    (base (buffer-base-buffer (current-buffer)))
    (org-refile-for-capture t))
    (org-capture-finalize)
    (save-window-excursion
      (with-current-buffer (or base (current-buffer))
    (save-excursion
      (save-restriction
        (widen)
        (goto-char pos)
        (call-interactively 'org-refile)))))))

如何删除部分(unless (eq (org-capture-get :type 'local) 'entry)使其生效?

编辑:23.10.12

到目前为止,我设法让它工作:

(defun narrow-and-reveal ()
    "Narrow and reveal all content"
    (org-narrow-to-subtree)
    (org-show-subtree)
    )
(defun widen-and-outline ()
    "Widen and move to beginning of file"
    (widen)
    (beginning-of-buffer)
    (org-overview)
    (org-content)
    )
(defun org-goto-symbol ()
  "Will navigate to the symbol at the current point of the cursor"
  (widen-and-outline)
  (interactive)
  (let ((current-prefix-arg 4)) ;; emulate C-u
    (call-interactively 'org-refile)) ;; invoke org-refile interactively
  (narrow-and-reveal)
  )
(defun custom-org-prompt-headline ()
  (org-goto-symbol) ;; invoke org-refile interactively
  (end-of-buffer))
(setq org-capture-templates`(
    ("t" "ToDo" item (file+function (concat org-directory "ToDo.org") custom-org-prompt-headline))))

但在输入列表项本身之前,它会提示我输入文件中的部分,我觉得这有点让人分心。我只想选择重新归档列表项。我无法想象它应该那么难实现..是吗?

4

2 回答 2

1

在浏览了邮件列表档案之后,到目前为止我找到的最佳解决方案是org-refile-active-region-within-subtree选项。它使 refile 能够移动任意文本区域,但它 refile 还在org-toggle-heading移动它之前将该文本转换为标题(使用 )。

所以至少文本被移动了,但它可能不是你想要的 100%(它不再是一个列表)。虽然它可能是一个很好的起点,但可以寻找更好的解决方案。也许通过org-toggle-heading在文本移动后运行。

这是内联文档:

非零意味着也重新归档子树中的活动区域。

默认情况下,如果区域不包含一组子树,则 `org-refile' 不允许重新归档区域,但有时这样做可能很方便:在这种情况下,区域的第一行在之前转换为标题重新归档。

我在这个线程中找到了它 - http://lists.gnu.org/archive/html/emacs-orgmode/2011-08/msg00535.html

于 2014-01-14T06:34:04.217 回答
1

确实,有一个更好的方法:为什么不使用捕获模板

基本上,你只需要定义你喜欢的模板,比如:

(setq org-capture-templates
 '(("t" "something" item (file+olp "~/path/to/you/file.org" "Header" "Subheader")
        "- %?\n  %i")
   ("n" "notes" checkitem (file+olp "~/somewhere/notes.org" "Notes")
        "- [ ] %?\n")))

然后,在使用时,调用(如果您遵循标准自定义(M-x) org-capture,则绑定),在已经是列表项模板中输入您的注释,然后您就完成了!C-ccC-cC-c

所有细节都在手册中(设置语法自动扩展元素......)

于 2012-10-22T16:32:46.740 回答