以组织模式重新列出列表项

时间:2012-10-15 21:53:28

标签: emacs org-mode

我一直在努力改进我的org-fu,我的一个任务就是重新列出列表项。 我通常更喜欢使用列表项目有各种原因(主要是 - 不要乱丢我的内容视图,并考虑到我的任务量,有一个真正的轮廓)。

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

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

编辑: 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))))

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

2 个答案:

答案 0 :(得分:1)

确实,更好的方法:为什么不使用capture templates

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

(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(如果您按照standard customizations绑定到 Cc c ),请输入您的注释已经是列表项模板, Cc Cc ,你已经完成了!

所有细节都在manualsettings syntaxautomagically expanding elements ...)

答案 1 :(得分:1)

在深入查看邮件列表档案后,到目前为止我找到的最佳解决方案是org-refile-active-region-within-subtree选项。它允许重新移动文本的任意区域,但它在重新移动之前也会将该文本转换为标题(使用org-toggle-heading)。

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

以下是内联文档:

  

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

     

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

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