我想编写一个函数,如果已经存在一个给定缓冲区名称,它将采取行动.例如:
(if (buffer-exists "my-buffer-name")
; do something
)
Run Code Online (Sandbox Code Playgroud)
elisp是否有一个函数来检查是否存在类似于我的"缓冲存在"函数的缓冲区的存在?
谢谢
Gar*_*ees 55
从文档:
(get-buffer name) Return the buffer named name (a string). If there is no live buffer named name, return nil. name may also be a buffer; if so, the value is that buffer. (get-buffer-create name) Return the buffer named name, or create such a buffer and return it. A new buffer is created if there is no live buffer named name. If name starts with a space, the new buffer does not keep undo information. If name is a buffer instead of a string, then it is the value returned. The value is never nil.
这就是我做的:
(when (get-buffer "*scratch*")
(kill-buffer "*scratch*"))
Run Code Online (Sandbox Code Playgroud)
这将检查缓冲区划痕.如果有这样的事情,就杀掉它.如果没有,什么都不做.
不确定这个谓词出现的版本,但现在 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.
Run Code Online (Sandbox Code Playgroud)
小智 5
如果你想定义你的假设函数如上,这有效:
(defun buffer-exists (bufname) (not (eq nil (get-buffer bufname))))
Run Code Online (Sandbox Code Playgroud)
我使用它*scratch*在启动时自动关闭缓冲区,因此我不必在我的缓冲区列表中循环它,如下所示:
(defun buffer-exists (bufname) (not (eq nil (get-buffer bufname))))
(if (buffer-exists "*scratch*") (kill-buffer "*scratch*"))
Run Code Online (Sandbox Code Playgroud)