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-processcom aset-process-filtere 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 usandoinsertpara 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 umarsyncsessã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.