Tôi đã lấy ra một ví dụ hoạt động của một hàm lấy một chuỗi và tạm thời hiển thị nó với thời gian chờ sau văn bản bộ đệm:
(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)))
Câu thần chú sau đây sẽ dẫn đến ví dụ hộp màu đỏ thấp hơn của bạn:
(my-momentarily-display-after-buffer-end "Nothing to see here...")
Lý do công việc này là do các lớp phủ sử dụng các dấu làm vị trí được hiển thị giữa. Sử dụng vị trí ngoài cùng là bắt đầu và kết thúc lớp phủ cho phép bạn hiển thị văn bản sau nó bằng cách sử dụng thuộc after-string
tính. Vì các lớp phủ có thể chứa văn bản phù hợp, tôi thiết lập nó để xuất hiện thụt lề và với khoảng trắng xung quanh nó.
Ví dụ khác có thể sử dụng cùng một ý tưởng để hiển thị văn bản sau khi kết thúc dòng:
(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)))
Yêu cầu sau đây sẽ dẫn đến ví dụ hộp màu đỏ bên phải của bạn:
(my-momentarily-display-after-line-end "annotation")
Bạn có thể điên hơn rất nhiều và thêm các khuôn mặt để phân biệt các lớp phủ này với văn bản đệm, hiển thị chúng lâu hơn thời gian chờ, điều chỉnh vị trí của chúng, phát hiện khi không có khoảng trống và sử dụng lớp phủ bình thường của văn bản được chỉnh sửa, v.v. Tôi khuyên bạn nên xem mã nguồn của
chế độ công ty vì nó rất dễ đọc và thể hiện cách sử dụng lớp phủ phức tạp hơn (và chủ yếu là không có lỗi) để tạo menu bật lên linh hoạt với các tính năng được đề xuất.