Żeby było jasne, nie mówię o niczym, co wymagałoby wielowątkowości emacsa (choć prawdopodobnie to by również rozwiązało). Powielać:
- emacs -Q # Używam 24.4.1
- Zrób drugą ramkę
- Wróć do pierwszej klatki
- Powłoka MX
- Unikalna zmiana nazwy MX (później zrobimy drugą powłokę)
- Zacznij biec:
while true; do echo "hello world"; done
- W drugiej ramce powłoka Mx
Druga powłoka prawie nigdy się nie wyświetli (rzadko działa po wielokrotnych próbach). Najwyraźniej emacs nigdy nie zrobi przerwy w czytaniu danych wyjściowych pierwszej powłoki, aby nasłuchiwać danych wyjściowych pochodzących z innych procesów. Byłoby znacznie lepszym zachowaniem, gdyby zaokrąglał robin, gdy istnieje wiele procesów z oczekującymi wynikami. Czy jest jakiś sposób na lepsze zachowanie?
Jedyną sztuczką, jaką znam, jest utworzenie z bufora powłoki własnego procesu, ale niestety to nie zadziała. Nawet jeśli to zrobię, muszę uruchomić podproces, aby odsłuchać gniazdo, w którym moje oprogramowanie do rozpoznawania mowy będzie działało, aby móc w pierwszej kolejności kontrolować powłokę - oto jak to odkryłem; uruchomienie nieskończonej pętli, jak wyżej, zapobiega wyjmowaniu danych z gniazda.
start-process
aset-process-filter
i aset-process-sentinel
- pozwala mi to robić na wesoło, robiąc inne rzeczy podczas procesu - czasami nawet wysyłam swoje dane wyjściowe do*Messages*
bufora,insert
dzięki czemu mój obszar echa pozostaje nietknięty, lub używam dedykowany bufor wyjściowy procesu (w razie potrzeby). Na przykład mogę uruchomić długąrsync
sesję. Nie mam doświadczenia w próbie uruchomienia wielu jednoczesnych / długichstart-process
, więc nie jestem pewien, jak Emacs poradziłby sobie z nimi wszystkimi.