Untuk lebih jelasnya, saya tidak berbicara tentang apa pun yang harus memerlukan emacs untuk multithreaded (meskipun itu mungkin juga akan menyelesaikan masalah ini). Untuk mereproduksi:
- emacs -Q # Saya menjalankan 24.4.1
- Buat bingkai kedua
- Beralih kembali ke bingkai pertama
- Shell mx
- Mx ganti nama-secara unik (kita akan membuat shell kedua nanti)
- Mulai berlari:
while true; do echo "hello world"; done
- Dalam bingkai kedua, shell Mx
Shell kedua hampir tidak akan pernah ditampilkan (jarang berhasil setelah upaya berulang). Rupanya emacs tidak akan pernah berhenti dari membaca output dari shell pertama untuk mendengarkan output yang datang dari proses lain. Ini akan menjadi perilaku yang jauh lebih baik baginya untuk round robin ketika ada beberapa proses dengan output yang tertunda. Apakah ada cara untuk mendapatkan perilaku yang lebih baik?
Satu-satunya trik yang saya tahu adalah membuat buffer shell prosesnya sendiri, tetapi sayangnya itu tidak akan berhasil untuk saya. Bahkan jika saya melakukan itu, saya harus menjalankan subproses untuk mendengarkan soket agar perangkat lunak pengenalan suara saya bekerja sehingga saya dapat benar-benar mengontrol shell di tempat pertama, itulah bagaimana saya menemukan ini; menjalankan infinite loop seperti di atas mencegah data diambil dari soket.
start-process
dengan aset-process-filter
danset-process-sentinel
- ini memungkinkan saya melakukan cara merry melakukan hal-hal lain saat proses berjalan - saya bahkan mengirim output kadang-kadang ke*Messages*
buffer menggunakaninsert
sehingga area gema saya tidak tersentuh, atau saya menggunakan buffer output proses khusus (jika perlu). Misalnya, saya bisa menjalankanrsync
sesi yang panjang . Saya tidak punya pengalaman mencoba menjalankan beberapa secara simultan / panjangstart-process
, jadi saya tidak yakin bagaimana Emacs akan menangani banyak dari mereka semua terjadi.