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)) …