哦哦 懂了…
实现了一个比较满意的方案:
(setq auto-save-disable-predicates
'((lambda ()
(if (boundp 'org-default-notes-file)
(and (buffer-live-p (get-buffer (concat "CAPTURE-" (buffer-name))))
(string-suffix-p (buffer-name) org-default-notes-file t))))))
这样可以不让 capture buffer 所关联的文件进行自动保存,但是完成 captue 后再去编辑这个文件还是可以自动保存的。
(add-hook 'org-capture-mode-hook #'(lambda nil (setq auto-save-delete-trailing-whitespace nil)))
我是这样设置的,caputure的时候不会自动保存。
你说的这个方法我试过,不行的。
原因是 M-x,org-capture
会打开一个名字为 ~/.notes
的文件,文件名的值由 org-default-notes-file
决定。
当前编辑的 buffer名称是 CAPTURE + org-default-notes-file
拼接而来。当前编辑的 org-capture buffer 本身就不会触发自动保存,因为它没有保存为文件。但是修改当前 org-capture buffer 时会触发与它关联的~/.notes
文件自动保存,所以会自动清理空格。
不知道为什么你们都是可以通过hook来实现,可能是因为我设置了org-default-notes-file 为 “~/org/agenda/inbox.org”,改变了它的 Major-mode 为 org mode?
另外,我更希望 auto-save 搭配 ws-butler 使用,因为它清除空格后会保留虚幻空格。
没看明白什么是修改当前org-capture buffer。
流程不是 org-capture → XXX(key)-> 写内容-> C-c C-c吗?
只要写内容的时候不自动保存就可以了啊。
我看 org-default-notes-file里写的是:
Used as a fall back file for org-capture.el, for templates that do not specify a target file.
所以是不是你的 capture template 的问题?
我上面贴的 github issue 有重现的步骤,你试试看就明白了。emacs -Q 下就可以重现,你当前输入的buffer 名字叫 CPTURE-xxx,他本身已经被auto-save 排除了。
就是这个流程,当前org-capture buffer 意思是指当前你写内容的这个名字叫CAPTURE-xxx 的buffer
已经习惯手动保存在潜意识下按c x c s了。
最小化步骤:
(add-to-list 'load-path "~/.emacs.d/packages/auto-save")
(require 'auto-save)
(setq auto-save-delete-trailing-whitespace t)
(add-hook 'org-capture-mode-hook #'(lambda nil (setq auto-save-delete-trailing-whitespace nil)))
我emacs -q试过了,使用
(add-hook 'org-capture-mode-hook #'(lambda nil (setq auto-save-delete-trailing-whitespace nil)))
可以啊,在org-capturre buffer 里面是不会删空格的。
你再试试。
GNU Emacs 29.0.50 (build 1, aarch64-apple-darwin21.5.0, NS appkit-2113.50 Version 12.4 (Build 21F79)) of 2022-07-17
习惯可以改,我以前也习惯手动保存。 自从用了 auto-save 1 秒保存后,1年多没按过 C-x,C-s 了😄
好,晚上有空再试试看。
auto-save在保存的时候会把org-capture窗口也一并保存了,相当于按下C-c C-c
。
很好奇,为啥大家都不提auto-save-visited-mode
呢?
auto-save-visited-mode is an interactive native compiled Lisp function
in ‘files.el’.
(auto-save-visited-mode &optional ARG)
Toggle automatic saving to file-visiting buffers on or off.
Unlike ‘auto-save-mode’, this mode will auto-save buffer contents
to the visited files directly and will also run all save-related
hooks. See Info node ‘Saving’ for details of the save process.
<省略部分内容>
Probably introduced at or before Emacs version 26.1.
根据官方文档介绍空闲5秒会自动保存。
When auto-save-visited-mode is enabled, Emacs will auto-save file-visiting buffers after five seconds of idle time. You can customize the variable auto-save-visited-interval to change the idle time interval.
也有一些更多的选项可以设置。默认的就是预期的行为。
这个 auto-save-visited-mode 确实也行。 不过在开启 ws-butler 时,还是会自动清楚空格。
如果用默认的 5s 是没什么问题,5s 内有足够时间输入,设置为 1s 保存,就不合适了。
我的理解是后面的 (setq auto-save-delete-trailing-whitespace nil)
是全局的,退出后,所有 buffer 不再自动删除空格了,需要配合
(add-hook 'org-capture-after-finalize-hook #'(lambda nil (setq auto-save-delete-trailing-whitespace t)))
另外尝试了 setq-local
替代 setq
,还是会删掉org-capture里的空格。
因为 org-capture 的buffer 本身就没参与 auto-save,参与的是另外一个 buffer,它在后台打开了。你可以 C-x,b 切换过去看。
目前我这个方案是可以解决的,你可以试试看:
(setq auto-save-disable-predicates
'((lambda ()
(if (boundp 'org-default-notes-file)
(and (buffer-live-p (get-buffer (concat "CAPTURE-" (buffer-name))))
(string-suffix-p (buffer-name) org-default-notes-file t))))))
可以给pr发个补丁,默认增加对org的支持
好的,我晚上再测试下各种情况。没问题的话,再去提个 PR
(add-hook 'org-capture-mode-hook #'(lambda nil (setq auto-save-delete-trailing-whitespace nil)))
(add-hook 'org-capture-after-finalize-hook #'(lambda nil (setq auto-save-delete-trailing-whitespace t)))
我这样使用完全ok。不知道你们的为什么不行?