【发布时间】:2013-12-15 22:48:35
【问题描述】:
我正在尝试编写一个编译一些代码的函数,如果编译成功,它会生成进程并在新窗口中打开其输出。编译位工作正常,但第二部分发生了一些奇怪的事情。我写了一些看起来像这样的代码:
(defun test-function ()
(with-current-buffer (get-buffer-create "*output*")
(erase-buffer)
(start-process "echo" (current-buffer) "echo" "hi")
(pop-to-buffer (current-buffer))))
这段代码几乎可以运行,但是当它运行时,屏幕顶部似乎位于程序实际输出的正下方。所以,一旦echo 退出,屏幕看起来像
向上滚动一行给出(预期的)
废话 进程回显完成有没有办法让它从缓冲区的实际顶部开始?在开始该过程之前和之后,我已经尝试过scroll-up 和goto-char 之类的东西,但它们似乎没有任何影响。从其他一些来源来看,我似乎可以在进程中附加一个哨兵,并在有输出时让它向上滚动,但这似乎只是在开始时向上滚动。
【问题讨论】:
-
scroll-up和goto-char没有帮助,因为start-process异步工作:进程启动并且函数调用通常在任何进程有机会将任何内容写入缓冲区之前返回。恕我直言,在进程完成状态更改时将点移动到开头的哨兵并不是矫枉过正,而是一个有效的解决方案。