Para ser claro, não estou falando de nada que exija que o emacs seja multithread (embora isso provavelmente também resolva isso). Reproduzir:
- emacs -Q # Estou executando 24.4.1
- Faça um segundo quadro
- Voltar ao primeiro quadro
- Mx shell
- Mx renomear-exclusivamente (vamos fazer um segundo shell mais tarde)
- Comece a correr:
while true; do echo "hello world"; done
- No segundo quadro, o shell Mx
O segundo shell quase nunca será exibido (raramente funciona após tentativas repetidas). Aparentemente, o emacs nunca fará uma pausa na leitura da saída do primeiro shell para ouvir a saída de qualquer outro processo. Seria um comportamento muito melhor para arredondar o robin quando houver vários processos com saída pendente. Existe alguma maneira de obter um melhor comportamento?
O único truque que eu sei seria tornar o shell um buffer para seu próprio processo, mas infelizmente isso não funcionará para mim. Mesmo se eu fizer isso, tenho que executar um subprocesso para ouvir um soquete para o meu software de reconhecimento de fala funcionar, para que eu possa realmente controlar o shell em primeiro lugar, foi assim que descobri; executar um loop infinito como o acima evita que quaisquer dados sejam retirados do soquete.
start-process
com aset-process-filter
e aset-process-sentinel
- isso permite que eu siga meu caminho alegre fazendo outras coisas enquanto o processo é executado - eu até envio minha saída às vezes para o*Messages*
buffer usandoinsert
para que minha área de eco fique intocada ou uso um buffer de saída do processo dedicado (se necessário). Por exemplo, eu posso executar umarsync
sessão longa . Eu não tenho nenhuma experiência tentando executar vários simultâneos / longosstart-process
, por isso não tenho certeza de como o Emacs lidaria com muitos deles.