从comint-redirect-send-command获取结果

时间:2017-07-05 23:01:29

标签: emacs comint-mode

我希望在comint完成的进程启动后读取缓冲区的输出。

(comint-redirect-send-command-to-process 
                 command-string ;; tested to work in the commint buffer
                 output-buffer-name ;; random text
                 buffer-process ;; (get-buffer-process (current-buffer))
                 nil ;; don't echo input back
                 t) ;; don't show output buffer immediatly

在运行comint过程的缓冲区中评估此sexp。我想在过程完成后阅读output-buffer-name的所有文本。

我已经尝试通过在流程启动命令下面添加以下内容来应用发布到此问题的解决方案:sleep in emacs lisp

(defun on-status-change (process status)
        (message "status done"))

(set-process-sentinel buffer-process 'on-status-change)

此消息未显示在*Messages*

输出缓冲区文本中没有提示,但是我可以根据完整输出文本编写一个返回t的函数。

如何对缓冲区完成/更改做出反应,或者如何强制comint同步运行此功能。

comint-redirect-send-command-to-process的来源是here on line 3717

1 个答案:

答案 0 :(得分:1)

如果其他人有类似的问题,我最终“解决”了这个问题。

.plugin(...)
  

(while (not comint-redirect-completed) (sleep-for 0.01)) 的值为nil

     

文档:   如果在当前缓冲区中完成重定向,则为非零。

显然不是一个好的解决方案,但我无法得到任何其他工作。