2

私が解決しようとしている特定の問題は

  1. telnet実行中のセッションにコマンドを送信する
  2. コマンドの結果をエコーし​​ますmessage

しかし、一般的な問題は、下位 (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 は新しい出力を待っていません。

私はこの質問accept-process-outputからアイデアを得ました

4

1 に答える 1

3

accept-process-outputいくつかの出力を受け入れるとすぐに戻るため、あなたのケースでは戻りが早すぎますが、あなたのケースでは、新しいプロンプトが表示されるまで出力を受け入れ続けたいと考えています。リモート プロセスは Emacs に「ここにプロンプ​​トがあります」と通知しないことに注意してください。そのため、プロセス フィルタを微調整して「ああ、プロンプトのようなものを受け取りました」と認識する必要がありaccept-process-output、プロセスが終了するまでループで呼び出す必要があります。 filter は、(おそらく何らかのグローバル変数を介して) プロンプトが表示されたことを通知します。

于 2013-03-11T19:27:48.423 に答える