2012-06-07 2 views
3

표준 출력을 리디렉션하고 파일에 저장하고 이전 버퍼로 다시 전환 한 다음 임시 버퍼.EMACS를 사용하여 표준 출력을 Elisp의 파일로 리디렉션하는 방법

(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") 

추 신 : elsip (표준 출력을 파일로 리디렉션)에서이를 달성하는보다 우아한 방법이 있습니까? 감사

답변

8

이 오류는 with-output-to-temp-buffer이 본문을 평가 한 후에 버퍼를 표시하려하지만이 시점에서 버퍼를 이미 삭제했기 때문에 발생합니다. 제 생각에는 with-temp-file이 당신이 찾고있는 매크로입니다. 그 문서화 문자열은 말한다 :

(with-temp-file FILE &rest BODY)

가 BODY를 평가하고, 새로운 버퍼를 만들고 파일에 버퍼를 작성합니다. 그런 다음 새로운 버퍼에 standard-output을 결합 할 수

, 뭔가 같은 :

(with-temp-file "test.txt" 
    (let ((standard-output (current-buffer))) 
    (mapc 'print (find-lisp-find-files "~/project/clisp" "\\.lisp$")))) 
+1

LouXiu 참조 :'C-H F를 출력 - 투 - 임시 버퍼 RET' 해당 오류에 대한 자세한 설명합니다. – phils

+0

@phils 감사 :-) – louxiu

관련 문제