คำถาม
ผมอยากจะสร้างส่วนติดต่อผู้ใช้ในรูปแบบของเมนูป๊อปอัพ , เมนูป๊อปอัพที่คล้ายกันกับที่ใช้ใน Magit
คุณสมบัติ
ความหมายของป๊อปอัพ
ป๊อปอัปในบริบทของคำถามนี้หมายถึงหน้าต่างชั่วคราวขนาดเล็กที่มีการรวบรวมรายการเมนูเพื่อให้ผู้ใช้สามารถเลือกหนึ่งและหนึ่งในรายการเหล่านี้
ตำแหน่งบนหน้าจอ
ป๊อปอัพได้รับอนุญาตให้ปรากฏในส่วนใด ๆ ของหน้าจอ แต่เป็นที่พึงปรารถนาที่ควรจะค่อนข้างชัดเจนและดังนั้นจึงควรปรากฏขึ้นข้างหน้าต่างที่ใช้งานในปัจจุบัน
เนื้อหาของ Popup Buffer
รายการควรจะแสดงในรูปแบบของตารางสวย พริตตี้เป็นบริบทของคำถามหมายถึงการดึงดูดสายตาผลกระทบนี้สามารถทำได้ง่ายที่สุดโดยการวางรายการเมนูลงในแถวตรงดู
complete--insert-string
ตัวอย่าง ย่อหน้านี้ทำหน้าที่ชี้แจงเพิ่มเติมคุณสามารถทำได้ด้วยวิธีของคุณเองซึ่งจะไม่ทำให้คำตอบของคุณไม่ถูกต้อง
การเลือกรายการเมนู
การเลือกนั้นคาดว่าจะทำได้ด้วยการกดปุ่มเพียงปุ่มเดียวหรือเลือกด้วยเมาส์ (แม้ว่าจะไม่สำคัญนักดังนั้นคำตอบที่มีข้อเสนอที่ไม่สนับสนุนเมาส์นั้นถูกกฎหมาย) หากคุณเสนอวิธีแก้ปัญหาที่รองรับเมาส์โปรดทราบว่าผู้ใช้ควรสามารถเลือกรายการเมนูในวิธีที่ใช้งานง่ายนั่นคือโดยการคลิกปุ่มซ้ายบนตัวเลือกที่ต้องการ
สามารถใช้เม้าส์ NB ได้หลายวิธีและใช้เป็นทางเลือกเพื่อระบุทางเลือกที่ได้รับการต้อนรับ
กำจัดป๊อปอัพ
เมื่อผู้ใช้เลือกรายการเมนูตามวิธีที่อธิบายไว้ข้างต้นบัฟเฟอร์และหน้าต่างควรถูกกำจัดออกจากมุมมองรวมถึงการฆ่า หน้าต่างที่ใช้งานอยู่ก่อนที่จะเรียกใช้เมนูป๊อปอัพควรได้รับการโฟกัส (นั่นคือเปิดใช้งาน) อีกครั้ง
มูลค่าที่คืนและข้อโต้แย้ง
โดยเฉพาะอย่างยิ่งผลลัพธ์ของการดำเนินการนี้ควรส่งผลให้วัตถุ Lisp ถูกส่งคืน วัตถุ Lisp สามารถเป็นได้ทั้ง:
nil
- สิ่งนี้บ่งชี้ว่าผู้ใช้ยกเลิกเมนูป๊อปอัปโดยกดC-gหรือด้วยวิธีอื่น†string
- สตริง (อนุญาตให้ใช้สัญลักษณ์) ควรเป็นstring-equal
หนึ่งในสตริงที่ให้กับเมนูป๊อปอัพเป็นการรวบรวมรายการจริง
ทางเลือกอื่นเพื่อให้โปรแกรมส่วนที่เหลือทราบทางเลือกของผู้ใช้หรืออาจเป็นไปได้ว่ายอมรับได้ อย่างไรก็ตามหากยังไม่ชัดเจนว่าจะสามารถปฏิบัติได้อย่างไรฉันจะถามผู้ตอบคำถามทั้งหมดโดยทันทีและไม่ขอให้ฉันชี้แจงเพิ่มเติมในเรื่องนี้
นี่คือทั้งหมดสำหรับค่าส่งคืน สำหรับพารามิเตอร์อินพุตอย่างน้อยพวกเขาควรจะรวมชุดของสตริงที่แสดงถึงตัวเลือกที่เป็นไปได้ (นั่นคือรายการเมนู)
คำตอบที่ยอมรับได้
คำตอบที่คาดหวังอาจอยู่ในรูปแบบต่อไปนี้:
ตัวอย่างโค้ดที่เพียงพอที่ช่วยให้ผู้อ่านที่มีการศึกษาสามารถเขียนฟังก์ชันตามที่อธิบายไว้ข้างต้น มันไม่ได้คาดหวังหรือจำเป็นต้องเขียนฟังก์ชั่นการทำงานทั้งหมด อย่างไรก็ตามเพื่อหลีกเลี่ยงความไม่แน่นอน (สามารถตัดส่วนของรหัสจำนวนมากได้หรือไม่) ฉันควรทราบว่าส่วนข้อมูลที่ขาดหายไปของข้อมูลโค้ดควรอธิบายไว้ในองค์ประกอบของคำตอบ
ลิงก์ไปยังไลบรารีที่มีอยู่ซึ่งใช้ฟังก์ชันการทำงานที่คล้ายกัน เพื่อหลีกเลี่ยงความไม่แน่นอนฉันควรทราบว่าคล้ายกันในกรณีของเราหมายความว่าห้องสมุดสามารถใช้ในการสร้างป๊อปอัพ (ดูคำนิยามด้านบน) ที่มีคุณสมบัติอย่างน้อย 2 หรือ 3 ที่อธิบายไว้ข้างต้น หากห้องสมุดที่เสนอนั้นแตกต่างจากจุดที่ไม่สามารถบรรลุเงื่อนไขที่ระบุไว้ก่อนหน้านี้แต่ละกรณีจะได้รับการตัดสินอย่างอิสระและจะถูกอัปเดตตลอดเวลาหาก OP เห็นว่าเป็นประโยชน์
คำอธิบายของฟังก์ชั่น Emacs ในตัวหรือฟังก์ชั่นของบุคคลที่สามที่สามารถใช้ในการใช้งานคุณสมบัติใด ๆ ที่อธิบายไว้ในส่วน«คุณสมบัติ»ดูด้านบน หลีกเลี่ยงความไม่แน่นอนโปรดรัฐอย่างชัดเจนว่าคำตอบของคุณจะมีประโยชน์สำหรับผู้อ่านในอนาคตที่ต้องการที่จะใช้ป๊อปอัพ , เมนูป๊อปอัพที่คล้ายกันกับที่ใช้ใน Magit
†วิธีอื่นในการยกเลิกเมนูป๊อปอัปอาจรวมถึงสิ่งต่อไปนี้ (แต่ไม่ จำกัด เฉพาะสิ่งเหล่านี้):
คลิกนอกหน้าต่างเมนูป๊อปอัพ
การฆ่าบัฟเฟอร์ที่มีป๊อปอัพโดยไม่ทำการเลือก
magit-popup
ผ่านและเขียนว่าแทน แพคเกจใหม่ที่เรียกว่าและนี่คือสิ่งที่จะใช้ในรุ่นปัจจุบันของtransient
magit
ดูmagit.vc/manual/transientสำหรับเอกสารประกอบ