Получить результат обратно из команды 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
значение нольДокументация: Не ноль, если перенаправление завершено в текущем буфере.
Очевидно, что это не лучшее решение, но я не мог заставить работать что-либо еще.