如何自动保存组织模式缓冲区?


22

我经常使用org-mode和议程来跟踪我的待办事项清单。由于我使用Dropbox同步列表,因此需要在所有计算机上使用相同的任务。有时,在清理过程中,我会忘记保存所做的更改,而当我进入办公室时,emacs会留在家里打开(因此在关闭emacs时不会提示我保存)。如何自动将更改保存到*.org通过议程修改的议程缓冲区?

编辑:为澄清起见,我使用任务的议程视图向我展示了概述。从这个角度来看,我可以更改任务的状态。另外,我使用记忆模式添加新任务,然后可以在议程视图中将其重新分类。议程中的这些更改导致修改的组织模式议程缓冲区,然后必须将其保存。进行这些更改后,我希望缓冲区自动保存。


您能否澄清“如何自动将对通过议程修改的* .org议程缓冲区的更改保存?” ?我无法确定它是“通过议程自动保存...”(似乎是自相矛盾的)还是“通过议程修改的缓冲区”(我不明白)
Sigma

@Sigma我已经更新了问题以进行澄清。
Ryan

1
到目前为止,我的解决方案是重新训练我的手指,以便s在“议程”视图中经常轻按按键。
mankoff 2014年

@mankoff我认为我对自己C-x C-s进行任何一次组织(无论是从议程还是直接)对组织议程文件进行任何更改时都可以进行打击的训练。不是自动的,但会保留所有内容。
乔纳森·里奇·佩平2014年

Answers:


16

一个快速的hack,我不确定是否可以满足您的用例

(add-hook 'org-agenda-mode-hook
          (lambda ()
            (add-hook 'auto-save-hook 'org-save-all-org-buffers nil t)
            (auto-save-mode)))

只要组织的议程缓冲区处于打开状态,所有组织缓冲区都将定期保存(这与s从议程视图中定期按下该缓冲区相同)。

auto-save-mode议程缓冲区本身auto-save而言,就所涉及的而言并没有多大意义,这在某种程度上令人不快。

如果您碰巧使用了这种黑客手段,则最好确保所有.org文件的备份文件都保留下来,以确保安全。


1
这种方法的主要问题是自动保存会将议程缓冲区保存到活动目录中的文件中。这创建了分散在我的文件系统中的大量孤立的自动保存文件。不知道如何补救。
holocronweaver

7

每当调用特定的议程功能时,您都可以保存所有组织缓冲区。例如,退出议程后要保存所有组织缓冲区:

(advice-add 'org-agenda-quit :before 'org-save-all-org-buffers)

另外,您可以在每次编辑后保存所有的组织缓冲区,例如在添加截止日期之后:

(advice-add 'org-deadline :after 'org-save-all-org-buffers)

这将在org-agenda和org缓冲区中都起作用。org-agenda-deadline如果您想限制自动保存到议程,请改用。

您可以对任何组织功能执行相同的操作,因此此方法可让您准确选择保存组织缓冲区的时间。这种方法涵盖了@Sigma遗漏的一些极端情况:即使您在auto-save有机会触发之前离开议程,也可以保存议程更改,或者在议程之外进行更改并忘记保存它们。我个人使用这两种方法来覆盖我的所有基础。[编辑:有关为什么我不再使用他的解决方案的信息,请参阅@Sigma解决方案的评论。]


2
这对我来说比接受的答案更好,因为我唯一忘记保存的时间是在重新提交之后。(advice-add 'org-refile :after 'org-save-all-org-buffers)重新提交到其他文件后,会自动保存组织文件。
该用户需要帮助

这是最好的答案,因为它可以应用于所需的任何组织功能。
KevinG

我发现,使用这org-refile意味着我可以不再“转到”某标题(而不是refiling光标下的一个),通过调用org-refile一个前缀参数..
quantum285


4

我使用以下代码段在新捕获后自动保存所有议程模式缓冲区,但是您可以将其挂接到您想要的任何位置:

(defun my/save-all-agenda-buffers ()
  "Function used to save all agenda buffers that are
currently open, based on `org-agenda-files'."
  (interactive)
  (save-current-buffer
    (dolist (buffer (buffer-list t))
      (set-buffer buffer)
      (when (member (buffer-file-name)
                    (mapcar 'expand-file-name (org-agenda-files t)))
        (save-buffer)))))

;; save all the agenda files after each capture
(add-hook 'org-capture-after-finalize-hook 'my/save-all-agenda-buffers)

将更'org-capture-after-finalize-hook改为'org-agenda-finalize-hook,我相信在显示议程缓冲区之前会调用它。


忘记提及我的功能需要dash.el可用,因此请记住这一点。
李H

2
在捕获期间,您可以立即将项目重新归档到任何org-refile-targets目的地,因此保存可能org-agenda-files不够。我可能会打电话给org-save-all-org-buffers自己。
sanityinc 2014年

1
PS无需在dash此处使用:mapcar内置且功能相同。
sanityinc 2014年

@sanityinc,谢谢,我更新了代码以使用mapcar而不是破折号!
李H
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.