48

指定されたバッファ名が既に存在する場合にアクションを実行する関数を書きたいと思います。例えば:

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

elisp には、作成した「buffer-exists」機能と同様に、バッファの存在をチェックする機能がありますか?

ありがとう

4

4 に答える 4

66

ドキュメントから:

(取得バッファ名)

name (文字列) という名前のバッファを返します。
name という名前のライブ バッファがない場合は、nil を返します。
name はバッファの場合もあります。その場合、値はそのバッファーです。

(get-buffer-create name)

name という名前のバッファを返すか、そのようなバッファを作成して返します。
name という名前のライブ バッファがない場合は、新しいバッファが作成されます。
name がスペースで始まる場合、新しいバッファーは元に戻す情報を保持しません。
name が文字列ではなくバッファの場合、それが返される値です。
値が nil になることはありません。
于 2009-02-25T16:30:07.123 に答える
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 に答える