emacs:如何从发送到comint缓冲区的命令返回输出(又名劣质进程)

时间:2013-03-11 17:00:12

标签: emacs elisp

我想解决的具体问题是

  1. 向正在运行的telnet会话
  2. 发送命令
  3. 使用message
  4. 回显命令的结果

    但一般的问题是向劣等(comint)进程发送命令 并等待输出返回并出现一个新提示,并返回输出。

    我有:

    (defun dired-vlc-test ()
      (interactive)
      (let* ((buf (process-buffer dired-vlc-telnet-proc))
             (old-max (with-current-buffer buf
                        (point-max))))
        (telnet-simple-send dired-vlc-telnet-proc "get_time")
        (accept-process-output dired-vlc-telnet-proc 5)
        (message (buffer-substring-no-properties old-max (with-current-buffer buf
                                                           (point-max))))))
    

    然而,我总是得到的输出是“get_time”,即Emacs没有等待新的输出。

    我从question

    获得了accept-process-output的想法

1 个答案:

答案 0 :(得分:3)

accept-process-output在你的情况下太早返回,因为它在接受一些输出后立即返回,但在你的情况下,你希望继续接受输出,直到你得到一个新的提示。请注意,远程进程不会告诉Emacs“这是一个提示”,因此您必须调整您的进程过滤器以识别“哦,我们收到的内容看似提示”,您必须调用accept-process-output in一个循环,直到进程过滤器告诉它(可能通过一些全局变量)它已经看到一个提示。