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惹的祸,谢谢了
请问一下使用auto-save进行自动保存的时候,即使开了silent模式,还是会在minibuffer中不断出现提示信息。有什么办法彻底让auto-save安静呢?
Omitting...
Omitted 2 lines.
Omitting...
已解决:这个跟自动保存没有关系,是dired-x的锅。
(setq dired-omit-verbose nil)
(setq auto-revert-verbose nil)
这样就不会提示了。
歪个楼,在任何编辑工具中都会关闭自动保存。感觉自己不按C-xC-s心里总是没底(我把系统的C-s也绑定了C-xC-s)。
能告诉我你们为什么这么喜欢自动保存么?我怎么get不到它的一点好处?靠自己手点不香么?手动保存完全不会打断思路,就是下意识的动作
用modeline
背景颜色提示当前文件状态(已保存或已修改),
;; {{ change mode-line color by evil state
(defconst my-default-color (cons (face-background 'mode-line)
(face-foreground 'mode-line)))
(defun my-show-evil-state ()
"Change mode line color to notify user evil current state."
(let* ((color (cond ((minibufferp) my-default-color)
((evil-insert-state-p) '("#e80000" . "#ffffff"))
((evil-emacs-state-p) '("#444488" . "#ffffff"))
((buffer-modified-p) '("#006fa0" . "#ffffff"))
(t my-default-color))))
(set-face-background 'mode-line (car color))
(set-face-foreground 'mode-line (cdr color))))
(add-hook 'post-command-hook #'my-show-evil-state)
;; }}
在追求极致编程速度的同时,也可以用工具解决人需要可视地确认文件状态的问题。
手动保存按的手累啊,用了自动保存以后,从来就没关心过保存的事情。写完直接关,写错直接undo。C-x,C-s的按键我都取消了。
这个你要亲自试试看,就能get到了。