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.
sumber
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.Jawaban:
Jadi ini bukan solusi yang tepat tetapi saya menjalankan tes Anda sebaliknya (mis. Sementara [1] pada shell kedua) dan itu berfungsi dengan baik. Sebagai pekerjaan di sekitar Anda dapat memastikan bahwa setiap buffer shell yang cenderung menghasilkan output yang berat dibuat lebih lambat daripada yang Anda inginkan interaktivitas. Dengan begitu shell interaktif adalah yang pertama ditangani oleh polling rendah Emacs sebelum akhirnya menangani yang menghasilkan banyak output.
Dalam praktiknya jika Anda menjalankan pilihan shell interaktif, Anda mungkin tidak akan berada dalam situasi di mana seseorang memakan I / O begitu lama. Jika Anda secara teratur membutuhkan hal seperti itu, mungkin mengarahkan kembali output ke file dan menggunakan mode tampilan adalah solusi yang lebih baik?
sumber