Saya telah membuat contoh fungsi yang mengambil string dan untuk sementara menampilkannya dengan batas waktu setelah teks buffer:
(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)))
Mantra berikut akan menghasilkan contoh kotak merah bawah Anda:
(my-momentarily-display-after-buffer-end "Nothing to see here...")
Alasannya adalah karena overlay menggunakan marker sebagai posisi untuk ditampilkan. Menggunakan posisi terluar sebagai awal dan akhir hamparan memungkinkan Anda menampilkan teks setelahnya dengan menggunakan after-string
properti. Karena overlay dapat berisi teks yang di-propertisasi, saya mengaturnya agar tampak berlekuk dan dengan spasi putih di sekitarnya.
Contoh lain dapat menggunakan ide yang sama untuk menampilkan teks setelah akhir baris:
(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)))
Doa berikut akan menghasilkan contoh kotak merah sebelah kanan Anda:
(my-momentarily-display-after-line-end "annotation")
Anda dapat menjadi jauh lebih gila dan menambahkan wajah untuk membedakan overlay ini dari teks buffer, menampilkannya lebih lama daripada untuk timeout, menyesuaikan posisi mereka, mendeteksi ketika tidak ada ruang kosong dan menggunakan overlay normal dari teks propertized, dll. Saya sarankan untuk melihat kode sumber
mode perusahaan karena sangat mudah dibaca dan menunjukkan penggunaan overlay yang lebih rumit (dan sebagian besar bebas bug) untuk membuat menu sembulan yang fleksibel dengan fitur yang disarankan.