“差异,保存或杀死”当在Emacs中杀死缓冲区时 [英] "Diff, save or kill" when killing buffers in Emacs

查看:126
本文介绍了“差异,保存或杀死”当在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:


  1. 当运行diff时,原始缓冲区被标记为未被修改 - 但是你真的需要保存它。

  2. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆