Pour être clair, je ne parle de rien qui devrait nécessiter le multithread d'emacs (bien que cela résoudrait probablement aussi cela). Reproduire:
- emacs -Q # J'utilise 24.4.1
- Faire un deuxième cadre
- Revenir à la première image
- Coque MX
- Mx renommer de façon unique (nous allons faire un deuxième shell plus tard)
- Commencer à courir:
while true; do echo "hello world"; done
- Dans la deuxième image, coque Mx
Le deuxième shell ne s'affichera presque jamais (il fonctionne rarement après des tentatives répétées). Apparemment, emacs ne prendra jamais de pause pour lire la sortie du premier shell pour écouter la sortie provenant de tout autre processus. Il serait beaucoup plus judicieux de procéder à un round robin lorsqu'il existe plusieurs processus avec une sortie en attente. Existe-t-il un moyen d'obtenir un meilleur comportement?
La seule astuce que je connais serait de faire du shell shell son propre processus, mais malheureusement cela ne fonctionnera pas pour moi. Même si je fais cela, je dois exécuter un sous-processus pour écouter un socket pour que mon logiciel de reconnaissance vocale fonctionne afin que je puisse réellement contrôler le shell en premier lieu, c'est ainsi que j'ai découvert cela; exécuter une boucle infinie comme ci-dessus empêche toute donnée d'être retirée du socket.
start-process
avec unset-process-filter
et unset-process-sentinel
- cela me permet de continuer joyeusement en faisant d'autres choses pendant que le processus s'exécute - j'envoie même parfois ma sortie au*Messages*
tampon en utilisant deinsert
sorte que ma zone d'écho soit intacte, ou j'utilise un tampon de sortie de processus dédié (si nécessaire). Par exemple, je peux exécuter une longuersync
session. Je n'ai aucune expérience en essayant d'exécuter plusieurs simultanés / longsstart-process
, donc je ne sais pas comment Emacs gérerait une multitude d'entre eux.