如何在Emacs中删除临时缓冲区之前得到警告?

8

我曾经因为不小心在Emacs中清除了临时缓冲区而失去了工作。我是否可以设置Emacs在我清除未与文件关联的缓冲区时发出警告?

2个回答

11

编写一个函数,当缓冲区已被编辑且未与文件关联时,它会询问您是否确定。然后将该函数添加到列表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)

还有,有没有办法让它排除其他缓冲区,比如Open Recent - James Sulak
buffer-modified-p'之后的and'中,您可以将以下内容放入:(not (equal (buffer-name) "Open Recent")) - EfForEffort

2
(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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接