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

问题描述 投票:0回答:3

时不时地,当我打算只按 C-x 或 C-c 时,我会不小心在 Emacs 中按 C-x C-c。当然,这会关闭所有打开的帧和缓冲区,而无需确认。我知道我可以让 Emacs 提示“你确定要退出吗?”,但我不想一直这样做,这会很烦人。我只是希望它在打开超过 N 个文件(或缓冲区)时执行此操作。

所以我想将 C-x C-c 绑定到一个函数,如下所示:

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

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

emacs lisp
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
来提示用户。

下面是一个示例,如果少量缓冲区打开则退出,否则会出现提示。将其添加到您的

custom-set-variables
中的
init.el
表达式中。

 '(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))
来计算打开的帧数。

© www.soinside.com 2019 - 2024. All rights reserved.