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

标签 emacs elisp

我试图解决的具体问题是

  1. 向正在运行的 telnet session 发送命令
  2. 使用消息回显命令的结果

但普遍的问题是向下级(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 想法

最佳答案

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

关于emacs:如何从发送到 comint 缓冲区的命令返回输出(又名劣质进程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15344288/

相关文章:

emacs - 组织模式 - 用于 latex 导出的并排图标题

vim - Emacs 相当于 vim 的 vertsplit (vs)?

Emacs 函数对不区分大小写的排序行?

c - 如何让 Emacs 正确处理 C 预处理器条件

emacs - 在 Emacs Lisp 中获取当前监视器的宽度

emacs - 折叠 magit 中的所有差异?

emacs - 如何在 Emacs 中复制/选择整个文件或缓冲区?

emacs - 在 emacs 中更新字体锁定关键字而无需重新加载主要模式

emacs - 在 global-set-key 中使用分号作为 .emacs 中的函数

windows - 从 emacs 中使用默认 Windows 应用程序打开文件