如何在Emacs中计算打开的缓冲区/文件数量?

10
有时候,我在使用Emacs时,意图按下C-x或C-c键,却不小心按到了C-x C-c键。这样做会关闭所有打开的框架和缓冲区,并且没有任何提示。我知道可以设置Emacs提示“确定要退出吗?”,但我不想每次都要进行确认,那样很烦人。我只想在打开的文件(或缓冲区)数量超过N个时才提示。

因此,我希望将C-x C-c键绑定到一个类似以下函数的功能:

(if (< number of open buffers n)
    (save-buffers-kill-emacs)
    (are-you-sure))

但是我不知道如何获取打开缓冲区的数量(或打开框架的数量、打开文件的数量等)。

3个回答

9

这是我使用的:

(defun count-buffers (&optional display-anyway)
  "Display or return the number of buffers."
  (interactive)
  (let ((buf-count (length (buffer-list))))
    (if (or (interactive-p) display-anyway)
    (message "%d buffers in this Emacs" buf-count)) buf-count))

我偷了它,但是不记得从哪里偷的。来自John Sturdy,听起来像个迷人的家伙;可以在他的网站上找到。


4
此外,您可以考虑使用桌面模式,这将在您再次启动Emacs时自动恢复您的缓冲区。只需添加以下代码:

(desktop-save-mode 1)

将内容保存到您的.emacs文件中。 请参阅GNU Emacs手册Emacswiki


0
标题问题的答案很简单,就是`(length (buffer-list)`。
内置变量`kill-emacs-query-functions`可以自定义以提示用户。
以下是一个示例,如果打开的缓冲区数量较少,则退出,否则提示用户。将其添加到您的`init.el`中的`custom-set-variables`表达式中。
 '(kill-emacs-query-functions
   '((lambda nil
       "Kill Emacs if 16 or fewer buffers open or user says yes."
       (if
           (> (length (buffer-list)) 16)
           (yes-or-no-p "Kill Emacs? ")
         t))))

你可以用(length (frame-list))来计算开放框架的数量。

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