问题是这样的,我发现在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))
)
我是直接用这个包进行自动保存。
你也可以参考这个包里面的保存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, 第二个办法应该是可行的