Um es klar auszudrücken, ich spreche nicht von irgendetwas, bei dem Emacs Multithreading erfordern sollten (obwohl dies wahrscheinlich auch das lösen würde). Reproduzieren:
- emacs -Q # Ich verwende 24.4.1
- Machen Sie einen zweiten Frame
- Wechseln Sie zurück zum ersten Frame
- Mx Shell
- Mx eindeutig umbenennen (wir werden später eine zweite Shell erstellen)
- Lauf:
while true; do echo "hello world"; done
- Im zweiten Frame Mx-Shell
Die zweite Shell wird fast nie angezeigt (selten funktioniert sie nach wiederholten Versuchen). Anscheinend machen Emacs niemals eine Pause vom Lesen der Ausgabe der ersten Shell, um die Ausgabe zu hören, die von einem anderen Prozess eingeht. Es wäre viel besser, ein Round-Robin-Verfahren durchzuführen, wenn mehrere Prozesse mit ausstehender Ausgabe vorhanden sind. Gibt es eine Möglichkeit, sich besser zu verhalten?
Der einzige Trick, den ich kenne, wäre, den Shell-Puffer zu einem eigenen Prozess zu machen, aber das funktioniert leider nicht für mich. Selbst wenn ich das mache, muss ich einen Unterprozess ausführen, um einen Socket abzuhören, damit meine Spracherkennungssoftware funktioniert, damit ich die Shell überhaupt steuern kann. So habe ich das entdeckt. Durch Ausführen einer Endlosschleife wie oben wird verhindert, dass Daten aus dem Socket entfernt werden.
start-process
mit aset-process-filter
und aset-process-sentinel
- dies ermöglicht es mir, meinen lustigen Weg zu gehen, andere Dinge zu tun, während der Prozess ausgeführt wird - ich sende meine Ausgabe manchmal sogar mit an den*Messages*
Puffer,insert
damit mein Echo-Bereich unberührt bleibt, oder ich benutze einen dedizierten Prozessausgabepuffer (falls erforderlich). Zum Beispiel kann ich eine langersync
Sitzung durchführen. Ich habe keine Erfahrung damit, mehrere gleichzeitig / lang laufen zu lassenstart-process
, daher bin ich mir nicht sicher, wie Emacs mit einer Menge von allen umgehen würde.