48

我想编写一个函数,如果给定的缓冲区名称已经存在,它会采取行动。例如:

(if (buffer-exists "my-buffer-name")
    ; do something
 )

elisp 是否有一个函数可以检查缓冲区是否存在,类似于我制作的“缓冲区存在”函数的功能?

谢谢

4

4 回答 4

66

文档中:

(获取缓冲区名称)

返回名为 name 的缓冲区(字符串)。
如果没有名为 name 的实时缓冲区,则返回 nil。
name 也可以是一个缓冲区;如果是这样,则该值是该缓冲区。

(获取缓冲区创建名称)

返回名为 name 的缓冲区,或者创建这样的缓冲区并返回它。
如果没有名为 name 的活动缓冲区,则会创建一个新缓冲区。
如果名称以空格开头,则新缓冲区不保留撤消信息。
如果 name 是缓冲区而不是字符串,则它是返回的值。
该值永远不会为零。
于 2009-02-25T16:30:07.123 回答
8

这就是我所做的:

(when (get-buffer "*scratch*")
  (kill-buffer "*scratch*"))

这将检查缓冲区划痕。如果有这种事,杀了它。如果没有,什么也不做。

于 2014-04-29T12:47:46.130 回答
6

不确定这个谓词出现的版本,但现在 Emacs 有buffer-live-p

buffer-live-p is a built-in function in `buffer.c'.

(buffer-live-p OBJECT)

Return non-nil if OBJECT is a buffer which has not been killed.
Value is nil if OBJECT is not a buffer or if it has been killed.
于 2015-08-11T09:55:00.753 回答
5

如果您想如上所述定义您的假设函数,则可以:

(defun buffer-exists (bufname)   (not (eq nil (get-buffer bufname))))

我使用它在启动时自动关闭*scratch*缓冲区,因此我不必在缓冲区列表中循环通过它,如下所示:

(defun buffer-exists (bufname) (not (eq nil (get-buffer bufname))))
(if (buffer-exists "*scratch*")  (kill-buffer "*scratch*"))
于 2010-01-12T17:35:19.773 回答