“差异,保存或杀死”当在Emacs中杀死缓冲区时 [英] "Diff, save or kill" when killing buffers in Emacs
问题描述
当尝试杀死包含Emacs更改的缓冲区时,会显示消息:
缓冲区[缓冲区]已修改;仍然会杀死(是或否)。
When trying to kill a buffer that contains changes in Emacs, the message: " Buffer [buffer] modified; kill anyway? (yes or no)" is displayed.
而不是这样我想让Emacs问我是否要:
1.查看更改的差异
2 。保存缓冲区
3.杀死缓冲区。
Instead of this I'd like to have Emacs ask me if I want to: 1. View a diff of what changed, 2. Save the buffer, 3. Kill the buffer.
如何?
推荐答案
答案在于使用建议,因为当您要更改的缓冲区修改提示符后,当杀毒缓冲区运行时,挂钩通常运行。
The answer lies in using advice, because the hooks normally run when killing buffers run after the "buffer modified" prompt you want to change.
以下建议可以做你想要的(我想)。一些注释:
The following advice does what you want (I think). A couple of notes:
- 当运行diff时,原始缓冲区被标记为未被修改 - 但是你真的需要保存它。
- diff中的另一个缓冲区不会被删除
(defadvice kill-buffer (around my-kill-buffer-check activate)
"Prompt when a buffer is about to be killed."
(let* ((buffer-file-name (buffer-file-name))
backup-file)
;; see 'backup-buffer
(if (and (buffer-modified-p)
buffer-file-name
(file-exists-p buffer-file-name)
(setq backup-file (car (find-backup-file-name buffer-file-name))))
(let ((answer (completing-read (format "Buffer modified %s, (d)iff, (s)ave, (k)ill? " (buffer-name))
'("d" "s" "k") nil t)))
(cond ((equal answer "d")
(set-buffer-modified-p nil)
(let ((orig-buffer (current-buffer))
(file-to-diff (if (file-newer-than-file-p buffer-file-name backup-file)
buffer-file-name
backup-file)))
(set-buffer (get-buffer-create (format "%s last-revision" (file-name-nondirectory file-to-diff))))
(buffer-disable-undo)
(insert-file-contents file-to-diff nil nil nil t)
(set-buffer-modified-p nil)
(setq buffer-read-only t)
(ediff-buffers (current-buffer) orig-buffer)))
((equal answer "k")
(set-buffer-modified-p nil)
ad-do-it)
(t
(save-buffer)
ad-do-it)))
ad-do-it)))
这篇关于“差异,保存或杀死”当在Emacs中杀死缓冲区时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!