仿照我的代码,让auto-save跳过有yas展开的buffer吧
改了,加了个:
;; yas overlay and company-select-next has problem with this.
(when (and (not yas--active-snippets) (not company-candidates))
...)
没把predicate抽出来,也没防御yas和company这两个变量不存在的问题,我是自己用这个函数而且无论怎么配这两个包一定会用。
可以写成(unless (or ))
,短一点。
我的大脑只能理解if not
,理解不了unless
。。。
company也有冲突?好像没感觉到啊,除了yas里C-g终止company总会打断snippet以外,没觉得自动保存有啥问题?
我是在company active的时候company-select-next
,第一下正常,第二下就会跑到文件内容的下一行去(next-line
)。
C-g的问题可以用这里的abort-company-or-yas
,binding和函数分别如下:
(general-define-key
:keymaps 'yas-keymap
"C-g" 'abort-company-or-yas)
能否录个gif?我看看怎么打个补丁
帮我提交一个 PR 吧: GitHub - manateelazycat/auto-save: Automatically save files without temporary files to protect your finger. ;)
谢谢
又测试了一下,这两个都是在buffer内容比较多的时候才会发生,下面的gif分别录制于web-mode和emacs-lisp-mode,都是一百多行这样,而我新建了两个文件,在它们为空或者有二三十行内容的时候,不会有这两个问题。
company active时选择next在由第二行跳到第三行时变成了next-line
(注意左下角的已保存标志):
yas在保存后一个field的占位单词不会被覆盖(注意左下角的已保存标志):
我的防御方法就是上面说的
(when (and (not yas--active-snippets) (not company-candidates))
...)
我的意思, 你把下面代码的上下文都粘贴一下, 我看看能否写一个补丁, 让 auto-save.el 天生避免这种问题.
(when (and (not yas--active-snippets) (not company-candidates))
...)
谢谢
(run-with-idle-timer 1 t #'jester/save-all-buffers)
会有bug的代码:
(defun jester/save-all-buffers ()
"Save all buffers."
;; https://github.com/manateelazycat/lazycat-emacs/commit/da13a688ef89f8ab2c577a3e9d2a7bcf0ef9b71d
(with-temp-message
(with-current-buffer " *Minibuf-0*" (buffer-string))
(save-some-buffers t #'(lambda () (and (buffer-file-name) (buffer-modified-p))))))
修复后的代码:
(defun jester/save-all-buffers ()
"Save all buffers."
;; yas overlay and company-select-next has problem with this.
(when (and (not yas--active-snippets) (not company-candidates))
;; https://github.com/manateelazycat/lazycat-emacs/commit/da13a688ef89f8ab2c577a3e9d2a7bcf0ef9b71d
(with-temp-message
(with-current-buffer " *Minibuf-0*" (buffer-string))
(save-some-buffers t #'(lambda () (and (buffer-file-name) (buffer-modified-p)))))))
我推送了一个补丁: https://github.com/manateelazycat/auto-save/commit/99e2dcbe4cbc43ae46db7ceb1d07157148264b6f
可以帮我验证一下是否修正了你的问题了吗?
我的版本是针对每个 buffer 验证的, 如果当前 buffer 的 yas/company 激活的时候, 后台的 buffer 依然可以自动保存.
ok了。
是的
Reference:Emacs 中的 minibuffer 如何实现类似Google实时补全的效果? - #31,来自 cireu
可能这样好一点
(if auto-save-silent
(with-temp-message ""
(let ((inhibit-message t))
(basic-save-buffer)))
(basic-save-buffer))
eldoc
helm/ivy
Cc: @JJPandari
最近在用懒猫大神的auto-save,发现一个问题,就是在使用脚本语言pyhton的时候,每次自动保存,光标都会调到第一行起始位置
你的版本太老了,更新一下吧,没这个问题
好的,先试试
应该是你在 write-file-hook 里面加了 yapf 或 autopep8 之类的自动格式化工具, 因此每次保存都会格式化,导致光标跑了。去掉就好了,和 auto-save 无关。
还真是yapf惹的祸,谢谢了