Как я могу проверить, существует ли текущий буфер в Emacs? - PullRequest
37 голосов
/ 25 февраля 2009

Я хотел бы написать функцию, которая выполняет действие, если имя заданного буфера уже существует. Например:

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

Есть ли в elisp функция, которая будет проверять наличие буфера, аналогично тому, как это делает моя созданная функция "buffer-существующие"?

Спасибо

Ответы [ 4 ]

54 голосов
/ 25 февраля 2009

Из документации :

(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.
6 голосов
/ 29 апреля 2014

Вот что я сделал:

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

Это проверяет наличие царапин на буфере. Если есть такая вещь, убей ее. Если нет, ничего не делать.

4 голосов
/ 12 января 2010

Если вы хотите определить свою гипотетическую функцию, как указано выше, это работает:

(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*"))
2 голосов
/ 11 августа 2015

не уверен насчет версии, этот предикат появился, но теперь 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.
...