我想評估一個緩衝區並將結果發送到一個新的緩衝區。如何將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?
我想評估一個緩衝區並將結果發送到一個新的緩衝區。如何將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?
此評估緩衝區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"))
你value
出現計算錯誤:因爲set-buffer
將切換到新的緩衝區,eval-buffer
將評估新的空緩衝區的內容。我的理解是,你要評估之前的緩衝區的內容,並在新的緩衝區打印它的價值:如果你想在新的緩衝區是對用戶可見
(let ((value (eval-buffer)))
(set-buffer (get-buffer-create "test"))
(print value))
,與switch-to-buffer
更換set-buffer
。