在杀死Emacs中的临时缓冲区之前,如何获得警告?

时间:2020-03-05 18:59:50  来源:igfitidea点击:

我不止一次地无意中杀死了Emacs中的临时缓冲区,从而失去了工作。杀死与文件无关的缓冲区时,可以设置Emacs发出警告吗?

解决方案

回答

创建一个函数,该函数将询问我们是否确定缓冲区何时已编辑并且未与文件关联。然后将该功能添加到" kill-buffer-query-functions"列表中。

查看有关"缓冲区文件名"的文档,我们会了解:

  • 当且仅当变量" buffer-file-name"为nil时,缓冲区才不访问文件

使用该见解来编写函数:

(defun maybe-kill-buffer ()
  (if (and (not buffer-file-name)
           (buffer-modified-p))
      ;; buffer is not visiting a file
      (y-or-n-p "This buffer is not visiting a file but has been edited.  Kill it anyway? ")
    t))

然后将函数添加到钩子中,如下所示:

(add-to-list 'kill-buffer-query-functions 'maybe-kill-buffer)

回答

(defun maybe-kill-buffer ()
  (if (and (not buffer-file-name)
           (buffer-modified-p))
      ;; buffer is not visiting a file
      (y-or-n-p (format "Buffer %s has been edited.  Kill it anyway? "
                        (buffer-name)))
    t))

(add-to-list 'kill-buffer-query-functions 'maybe-kill-buffer)