我使用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*")
)
Run Code Online (Sandbox Code Playgroud)
但是下面会出现错误.我不知道为什么.
Debugger entered--Lisp error: (error "Selecting deleted buffer")
Run Code Online (Sandbox Code Playgroud)
PS:在elsip中有更优雅的方法来实现这一点(将标准输出重定向到文件).谢谢
发生此错误是因为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$"))))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
852 次 |
| 最近记录: |