Щоб було зрозуміло, я не говорю про те, що повинно вимагати багатомодерності emacs (хоча це, ймовірно, також вирішило б це). Для відтворення:
- emacs -Q # Я бігаю 24.4.1
- Зробіть другий кадр
- Перейти назад до першого кадру
- Оболонка Mx
- Mx однозначно перейменувати (ми пізніше зробимо другу оболонку)
- Почніть працювати:
while true; do echo "hello world"; done
- У другому кадрі оболонка Mx
Друга оболонка майже ніколи не відображатиметься (рідко вона працює після повторних спроб). Мабуть, emacs ніколи не перерветься з читанням результатів першої оболонки, щоб слухати вихід, який надходить з будь-якого іншого процесу. Було б набагато кращою поведінкою для того, щоб кругообіг, коли існує декілька процесів з очікуваним виходом. Чи є спосіб покращити поведінку?
Єдиним фокусом, який я знаю, було б зробити буфер оболонки власним процесом, але, на жаль, це не спрацює для мене. Навіть якщо я це роблю, мені потрібно запустити підпроцес, щоб прослухати сокет для того, щоб моє програмне забезпечення для розпізнавання мови працювало, щоб я міг реально керувати оболонкою в першу чергу, саме так я і виявив це; запуск нескінченного циклу, як описано вище, запобігає виведенню будь-яких даних з сокета.
start-process
з aset-process-filter
і aset-process-sentinel
- це дозволяє мені продовжувати свій веселий шлях, роблячи інші речі, поки процес працює - я навіть надсилаю свій вихід іноді в*Messages*
буфер, використовуючиinsert
так, що моя область ехо не торкається, або я використовую виділений буфер виводу процесу (за потреби). Наприклад, я можу запустити тривалийrsync
сеанс. Я не маю жодного досвіду спроб запустити кілька одночасних / тривалихstart-process
, тому я не впевнений, як Emacs впорається з усім, що відбувається.