1

簡単なテスト (kill-buffer-test.el) を書いてみました:

:; exec emacs -Q --script "$0" -- "$@"

(setq debug-on-error t)

(setq n 0)
(dolist (idx (buffer-list))
  (message "%d '%s' %s" n idx (buffer-list))
  (setq n (+ 1 n))
  (message "result: %s cb='%s'\n" (kill-buffer idx) (current-buffer)))

そしてそれを実行します:

$ ./kill-buffer-test.el
0 '*scratch*' (*scratch*  *Minibuf-0* *Messages*  *code-conversion-work*  *load*)
result: t cb='*Messages*'

1 ' *Minibuf-0*' ( *Minibuf-0* *Messages*  *code-conversion-work*  *load*)
result: nil cb='*Messages*'

2 '*Messages*' ( *Minibuf-0* *Messages*  *code-conversion-work*  *load*)
result: t cb='*scratch*'

3 ' *code-conversion-work*' ( *Minibuf-0*  *code-conversion-work*  *load* *scratch* *Messages*)
result: t cb='*scratch*'

4 ' *load*' ( *Minibuf-0*  *load* *scratch* *Messages*)
result: t cb='*scratch*'

Selecting deleted buffer
$ echo $?
255

*Minibuf-0*バッファが強制終了されず (なぜ?)、*scratch*復活し、emacs が奇妙なエラー メッセージで終了したことに注意してください。

では、(current-buffer) が失敗する可能性があることを心配する必要がありますか? そして、私がすべきなら、それをテストする方法は? (current-buffer) はエラーを発生させるか、単に nil を返しますか?

M-x version
linux.9bf016 上の 2013 年 2 月 8 日の GNU Emacs 24.3.50.1 (i686-pc-linux-gnu、X ツールキット)

4

1 に答える 1

2

心配する必要はありません:(current-buffer)失敗することはありません (失敗した場合、Emacs はクラッシュして焼き付きます)。 *scratch*他のいくつかの内部バッファと同様に、必要に応じて再生成されます。

于 2013-02-20T14:53:49.097 に答える