2013-05-18 120 views
1

我想評估一個緩衝區並將結果發送到一個新的緩衝區。如何將eval-buffer函數的結果「發送」到新緩衝區的內容?在這裏我嘗試:Emacs:發送eval的輸出到一個新的緩衝區

(set-buffer (get-buffer-create "test")) ; create new buffer 

(let ((value (eval-buffer)) .... ; how to put this inside the new buffer? 

回答

3

此評估緩衝區evaluate-me的內容,每個頂層形式的值打印到緩衝區output

(eval-buffer "evaluate-me" (get-buffer-create "output")) 

˚Feval-buffer看到的文檔這解釋了爲什麼這個工作。到eval-buffer第二個參數被命名爲PRINTFLAG,其中的文檔字符串說:

PRINTFLAG controls printing of output: 
A value of nil means discard it; anything else is stream for print. 

的稍顯混亂的事情有關,這是Emacs的年代「輸出流」真正重要的不同尋常的概念。緩衝區,標記(緩衝區中的位置)和回聲區域都可以視爲「流」,任何採用字符參數的函數都可以視爲「流」。請查閱print函數的文檔字符串或standard-output變量了解更多信息。

在另一個緩衝區內發生事件的更一般方法是宏with-current-buffer。與set-buffer不同,即使包裝的代碼中發生錯誤,它也會很好地恢復原始上下文。

(with-current-buffer (get-buffer-create "output") 
    (insert "some text")) 
1

value出現計算錯誤:因爲set-buffer將切換到新的緩衝區,eval-buffer將評估新的空緩衝區的內容。我的理解是,你要評估之前的緩衝區的內容,並在新的緩衝區打印它的價值:如果你想在新的緩衝區是對用戶可見

(let ((value (eval-buffer))) 
    (set-buffer (get-buffer-create "test")) 
    (print value)) 

,與switch-to-buffer更換set-buffer

相關問題