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あなたが探しているマクロだと思います。そのdocstringは次のように述べています:

(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 に答える