ฉันได้ยกตัวอย่างการทำงานของฟังก์ชั่นที่ใช้สตริงและแสดงมันชั่วคราวด้วยการหมดเวลาหลังจากข้อความบัฟเฟอร์:
(defun my-momentarily-display-after-buffer-end (string &optional timeout)
(let ((ov (make-overlay (point-max) (point-max))))
(overlay-put ov 'after-string
(concat (propertize " " 'display
'(space :align-to (+ left-fringe 10)))
(propertize string 'display
'(raise -1))
"\n\n"))
(sit-for (or timeout 5))
(delete-overlay ov)))
คาถาต่อไปนี้จะส่งผลให้ตัวอย่างกล่องสีแดงด้านล่างของคุณ:
(my-momentarily-display-after-buffer-end "Nothing to see here...")
เหตุผลที่ใช้งานได้เนื่องจากการวางซ้อนใช้เครื่องหมายเป็นตำแหน่งที่จะแสดงระหว่าง การใช้ตำแหน่งนอกสุดเป็นจุดเริ่มต้นและจุดสิ้นสุดของการซ้อนทับช่วยให้คุณสามารถแสดงข้อความหลังจากนั้นได้โดยใช้after-string
คุณสมบัติ เนื่องจากการวางซ้อนสามารถมีข้อความที่ปรับขนาดได้ฉันจึงตั้งค่าให้เยื้องและมีช่องว่างล้อมรอบ
ตัวอย่างอื่น ๆ สามารถใช้แนวคิดเดียวกันนี้เพื่อแสดงข้อความหลังจากสิ้นสุดบรรทัด:
(defun my-momentarily-display-after-line-end (string &optional timeout)
(let ((ov (make-overlay (line-end-position) (line-end-position))))
(overlay-put
ov 'after-string
(concat (propertize " " 'display
`(space :align-to (- right-fringe
,(1+ (length string)))))
string))
(sit-for (or timeout 5))
(delete-overlay ov)))
การร้องขอต่อไปนี้จะส่งผลให้ตัวอย่างกล่องสีแดงด้านขวาของคุณ:
(my-momentarily-display-after-line-end "annotation")
คุณสามารถคลั่งไคล้มากขึ้นและเพิ่มใบหน้าเพื่อแยกความแตกต่างของภาพซ้อนทับเหล่านี้ออกจากข้อความบัฟเฟอร์แสดงเวลาที่นานกว่านั้นปรับตำแหน่งของพวกเขาตรวจจับเมื่อไม่มีที่ว่างและใช้การซ้อนทับตามปกติของข้อความที่เหมาะสม ฯลฯ ซอร์สโค้ดของ
โหมด บริษัทเนื่องจากสามารถอ่านได้มากและแสดงให้เห็นถึงการใช้การวางซ้อนอย่างละเอียดมากขึ้น (และส่วนใหญ่เป็นข้อบกพร่อง) เพื่อสร้างเมนูป๊อปอัพที่ยืดหยุ่นพร้อมคุณสมบัติที่แนะนำ