等待comint模式缓冲区

时间:2012-08-06 08:40:55

标签: emacs erlang elisp

我正在尝试用一个comint erlang-shell打开一个后台缓冲区,一旦启动,就在emacs中运行一个函数调用(使用distel将它的二进制文件发送到erlang节点)。

即:

...
(let ((args (append (list "-sname" node-name "-pa") path)))
    (get-buffer-create buffer-name)
    (apply #'make-comint-in-buffer node-name buffer-name "erl" nil args)
  (erl-check-backend (make-node-name node-name))
...

问题在于,当我调用distel时,节点尚未启动(epmd没有注册名称),因此失败。我猜这是因为劣质过程还没有机会运行。有没有办法等到comint-buffer完成设置?

我尝试在上面函数的参数中发送缓冲区的缓冲区进程上的accept-process-output,但是这只是挂起。

任何帮助表示赞赏:)

托马斯

2 个答案:

答案 0 :(得分:1)

在python-mode.el中检查正在运行的进程是这样​​做的

(or (get-buffer-process (py-buffer-name-prepare pyshellname))
      (get-buffer-process 
          (py-shell nil dedicated pyshellname 
               switch sepchar py-buffer-name t)))))

即。如果Python shell不存在,它的start将返回process-symbol。

答案 1 :(得分:1)

在Dave Love撰写的python.el中,使用了以下内容:

(while (progn
     (accept-process-output proc 5)
     (null python-preoutput-result)))