2013-05-18 80 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

相关问题