Per essere chiari, non sto parlando di qualcosa che dovrebbe richiedere il multithreading di emacs (anche se questo probabilmente risolverebbe anche questo). Per riprodurre:
- emacs -Q # Sto correndo il 24.4.1
- Crea un secondo fotogramma
- Torna al primo fotogramma
- Mx shell
- Mx rinomina in modo univoco (faremo una seconda shell in seguito)
- Inizia a correre:
while true; do echo "hello world"; done
- Nel secondo frame, shell Mx
La seconda shell non verrà quasi mai visualizzata (raramente funziona dopo ripetuti tentativi). Apparentemente emacs non prenderà mai una pausa dalla lettura dell'output della prima shell per ascoltare l'output proveniente da qualsiasi altro processo. Sarebbe un comportamento molto migliore per il round robin quando ci sono più processi con output in sospeso. C'è un modo per ottenere un comportamento migliore?
L'unico trucco che conosco sarebbe quello di rendere il buffer della shell un suo processo, ma sfortunatamente non funzionerà per me. Anche se lo faccio, devo eseguire un sottoprocesso per ascoltare un socket affinché il mio software di riconoscimento vocale funzioni in modo da poter effettivamente controllare la shell in primo luogo, è così che l'ho scoperto; l'esecuzione di un ciclo infinito come sopra impedisce che qualsiasi dato venga rimosso dal socket.
start-process
con aset-process-filter
e aset-process-sentinel
- questo mi permette di andare per la mia strada facendo altre cose mentre il processo è in esecuzione - Mando persino il mio output a volte al*Messages*
buffer usando ininsert
modo che la mia area di eco non sia toccata, o uso un buffer di output del processo dedicato (se necessario). Ad esempio, posso eseguire una lungarsync
sessione. Non ho alcuna esperienza nel provare a eseguire più simultaneamente / lunghistart-process
, quindi non sono sicuro di come Emacs gestirà una serie di tutti loro in corso.