คำถามติดแท็ก async

3
ฉันจะเรียกใช้กระบวนการ async ในพื้นหลังโดยไม่ต้องเพิ่มบัฟเฟอร์ในบัฟเฟอร์ได้อย่างไร
ฉันได้กำหนดฟังก์ชั่นบางอย่างเพื่อเรียกใช้กระบวนการพื้นหลัง async โดยใช้async-shell-commandใน. emacs ของฉัน แต่ทุกครั้งที่ฉันเรียกใช้คำสั่งจะมีการสร้างหน้าต่างใหม่ (ไม่ใช่เฟรม) และบัฟเฟอร์ของกระบวนการจะปรากฏขึ้นที่นั่น ฉันจะรันคำสั่งโดยไม่มีบัฟเฟอร์ "ป๊อปอัป" ได้อย่างไร
23 shell  async  process 

1
เปิดใช้งาน M-! เป็น M- & (a'ka emacs equiv เพื่อ bash Ctrl-Z)
บางครั้งฉันM-! some_commandก็พบว่าคำสั่งทำงานนานกว่าที่ฉันคาดไว้และทำให้ emacs ของฉันหยุดนิ่งเป็นเวลานาน ดังนั้นฉันจึงเคลือบที่ emacs ที่แช่แข็งของฉันและเตะตัวเองเพื่อไม่ใช้M-& some_commandและสัญญากับตัวเองว่าจะใช้M-&ในครั้งต่อไป แต่M-!อยู่ในความทรงจำของกล้ามเนื้อมานานหลายสิบปี…และแน่นอนมีCtrl-Gแต่มีบางกรณีที่การสั่งการและสั่งการซ้ำอีกครั้งมันไม่ได้ดีกว่า (อาจเป็นไปได้ที่จะทำลายฏ ความผิดพลาดที่คล้ายกันในเปลือก konsole เป็นเล็กน้อยเพื่อแก้ไขCtrl-Z, bgและงานที่จะทำงานในพื้นหลัง มีเคล็ดลับที่คล้ายกันใน emacs หรือไม่ - วิธีเปลี่ยนคำสั่งเบื้องหน้า (ซิงโครนัส) ที่ทำงานอยู่ในขณะนี้ให้เป็นแบ็คกราวน์ (แบบอะซิงโครนัส) หรือไม่? หมายเหตุ: ในกรณีที่เป็นไปไม่ได้สำหรับการเริ่มต้น M-!ฉันเปิดให้คำแนะนำวิธีการ rebind M-!เป็นอย่างอื่น (สิ่งที่จะเป็นหน้าที่เทียบเท่านอกเหนือจากเคล็ดลับนี้)

1
แบบอะซิงโครนัสรอผลลัพธ์จากกระบวนการ comint
ก่อนอื่นข้อจำกัดความรับผิดชอบ ฉันค้นคว้ามาหลายครั้งแล้วและฉันค่อนข้างมั่นใจว่าฉันได้พบคำตอบแล้วไม่ทางใดก็ทางหนึ่ง แต่ฉันก็ไม่เข้าใจ ปัญหาของฉันคือต่อไปนี้: ฉันมีกระบวนการทำงานผ่าน comint ฉันต้องการส่งบรรทัดอินพุตจับเอาต์พุตและดูเมื่อมันจบ (เมื่อบรรทัดสุดท้ายของเอาต์พุตตรงกับ regexp สำหรับพรอมต์) เมื่อกระบวนการส่งเอาต์พุตเสร็จสิ้นแล้วเท่านั้นฉันต้องการส่งอินพุตอีกบรรทัดหนึ่ง (ตัวอย่าง) สำหรับพื้นหลังเล็กน้อยให้คิดว่าเป็นโหมดหลักที่ใช้การโต้ตอบกับโปรแกรมซึ่งอาจส่งคืนเอาต์พุตจำนวนเท่าใดก็ได้ในเวลานานโดยพลการ นี่ไม่ควรเป็นสถานการณ์ที่ผิดปกติใช่มั้ย โอเคบางทีส่วนที่ฉันต้องรอระหว่าง อินพุตนั้นผิดปกติ แต่ก็มีข้อดีเล็กน้อยในการส่งอินพุตโดยรวม: บัฟเฟอร์เอาต์พุตถูกจัดรูปแบบเป็นอย่างดี: อินพุตเอาต์พุตอินพุตเอาต์พุต ... ที่สำคัญกว่านั้นเมื่อส่งข้อความจำนวนมากไปยังกระบวนการข้อความจะถูกตัดเป็นชิ้น ๆ และชิ้นส่วนจะถูกวางกลับโดยกระบวนการ จุดตัดเป็นสิ่งที่ไม่แน่นอนและบางครั้งสิ่งนี้ทำให้อินพุตไม่ถูกต้อง (กระบวนการของฉันจะไม่วางกลับอย่างถูกต้องเช่นการป้อนข้อมูลที่อยู่ตรงกลางของตัวระบุ) อย่างไรก็ตามผิดปกติหรือไม่ปรากฏว่ามีความซับซ้อน ตอนนี้ฉันกำลังใช้บางสิ่งบางอย่างตามแนวของ (defun mymode--wait-for-output () (let ((buffer (mymode-get-buffer))) (with-current-buffer buffer (goto-char (point-max)) (forward-line 0) (while (not (mymode-looking-at-prompt)) (accept-process-output nil 0.001) (redisplay) (goto-char (point-max)) (forward-line 0)) …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.