3

我使用 with-output-to-temp-buffer 函数,将标准输出重定向到它,将其保存到文件中,切换回上一个缓冲区,然后终止临时缓冲区。

(require 'find-lisp)
(with-output-to-temp-buffer "*my output*" 
  (mapc 'print (find-lisp-find-files "~/project/clisp" "\\.lisp$"))
  (setq prev-buffer (buffer-name))
  (switch-to-buffer "*my output*")
  (write-region nil nil "test")
  (switch-to-buffer prev-buffer)
  (kill-buffer "*my output*")
  )

但出现以下错误。我不知道为什么。

Debugger entered--Lisp error: (error "Selecting deleted buffer")

PS:在 elsip(将标准输出重定向到文件)中是否有更优雅的方法来实现这一点。谢谢

4

1 回答 1

9

发生此错误是因为with-output-to-temp-buffer尝试在评估其主体后显示缓冲区,但此时您已经删除了缓冲区。我认为with-temp-file是您正在寻找的宏。它的文档字符串说:

(with-temp-file FILE &rest BODY)

创建一个新缓冲区,在那里评估 BODY,然后将缓冲区写入 FILE。

然后,您可以绑定standard-output到新缓冲区,例如:

(with-temp-file "test.txt"
  (let ((standard-output (current-buffer)))
    (mapc 'print (find-lisp-find-files "~/project/clisp" "\\.lisp$"))))
于 2012-06-07T13:41:52.383 回答