(current-buffer)是否有可能不返回某个缓冲区?

时间:2013-02-16 20:08:50

标签: emacs elisp

我试过写一个简单的测试(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退出并显示一条奇怪的错误消息。

那么,我应该担心(当前缓冲区)可能会失败吗?如果我应该,如何测试? (当前缓冲区)会引发错误还是只返回nil?

M-x version
2013-11-08关于linux.9bf016的GNU Emacs 24.3.50.1(i686-pc-linux-gnu,X工具包)

1 个答案:

答案 0 :(得分:2)

无需担心:(current-buffer)不能失败(如果有的话,Emacs会崩溃并刻录)。 {/ 1}}以及其他一些内部缓冲区会在需要时重新生成。