Как проверить, существует ли текущий буфер в Emacs?
Я хотел бы написать функцию, которая принимает действие, если имя буфера выдачи уже существует. Например:
(if (buffer-exists "my-buffer-name")
; do something
)
Имеет ли elisp функцию, которая будет проверять наличие буфера, аналогичного тому, как работает моя сделанная функция "buffer-exists"?
Спасибо
Ответы
Ответ 1
В документации :
(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.
Ответ 2
Это то, что я сделал:
(when (get-buffer "*scratch*")
(kill-buffer "*scratch*"))
Это проверяет наличие буфера. Если есть такая вещь, убейте ее.
Если нет, ничего не делайте.
Ответ 3
Если вы хотите определить свою гипотетическую функцию, как указано выше, это работает:
(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*"))
Ответ 4
не уверен в версии, этот предикат появился, но теперь 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.