Получить результат обратно из команды comint-redirect-send-command

Я хочу прочитать вывод буфера после завершения процесса, запущенного 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

Этот sexp оценивается в буфере, запускающем процесс comint. Я хочу прочитать весь текст 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 здесь на линии 3717

1 ответ

Если у кого-то еще есть подобная проблема, я заканчивал тем, что "решил" это.

(while (not comint-redirect-completed)
  (sleep-for 0.01))

comint-redirect-completedзначение ноль

Документация: Не ноль, если перенаправление завершено в текущем буфере.

Очевидно, что это не лучшее решение, но я не мог заставить работать что-либо еще.

Другие вопросы по тегам