如何保存在org-clock-resolve 之后自动保存buffer?

问题是这样的,我发现在org-clock-resolve 之后 ‘gtd.org’ buffer是没有保存的, 如果没有人为的手动保存gtd.org就会导致经常出现需要reslove 300min 600mim等离谱时间的情况。所以需要在运行org-clock-resolve之后自动保存buffer.

因为org-clock-resolve没有hook,所以我尝试了add-advice:

      (defun my/save-buffer (&rest r)
        (save-buffer)
        )
      (advice-add 'org-clock-resolve :after #'my/save-buffer)

但是,尴尬的是保存的是当前我正在操作的buffer,不是gtd.org buffer,代码要怎么改呢? 加上save-excursion也不行

      (defun my/save-buffer (&rest r)
        (save-excursion
        (save-buffer))
        )

我是直接用这个包进行自动保存。 https://github.com/manateelazycat/auto-save

你也可以参考这个包里面的保存buffer的核心代码来实现你的函数。这里是作者详细的解释保存的机制

可以参考org-clock-goto获得当前 clock 的buffer,或者无脑一点直接 org-save-all-org-buffers

谢谢,这个包确实好,就用它了

从auto-save 提取出来的这个函数,其实就可以干你需要的保存一个自己知道名字的buffer。 那些判断条件,是为防止干扰yasnppet 和 company,如果不需要可以去掉的。

(defun my-save-buffer (buf-name)
  (interactive)
  (ignore-errors
    (save-excursion
      (set-buffer buf-name)
      (when (and
             ;; Buffer associate with a filename?
             (buffer-file-name)
             ;; Buffer is modifiable?
             (buffer-modified-p)
             ;; Yassnippet is not active?
             (or (not (boundp 'yas--active-snippets))
                 (not yas--active-snippets))
             ;; Company is not active?
             (or (not (boundp 'company-candidates))
                 (not company-candidates))
             )
        (basic-save-buffer)
        ))))

谢谢,第一个办法会跳到gtd.org, 第二个办法应该是可行的

谢谢,直接用这个包了,还能解决我其他问题,赞