Ich habe ein funktionierendes Beispiel für eine Funktion erstellt, die eine Zeichenfolge verwendet und diese vorübergehend mit einem Timeout nach dem Puffertext anzeigt:
(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)))
Die folgende Beschwörung führt zu Ihrem unteren roten Kästchen:
(my-momentarily-display-after-buffer-end "Nothing to see here...")
Der Grund dafür ist, dass Overlays Markierungen als Positionen verwenden, zwischen denen angezeigt werden soll. Wenn Sie die äußerste Position als Anfang und Ende der Überlagerung verwenden, können Sie mithilfe der Eigenschaft Text danach anzeigen after-string
. Da Überlagerungen den richtigen Text enthalten können, habe ich ihn so eingerichtet, dass er eingerückt und mit Leerzeichen versehen ist.
Das andere Beispiel kann dieselbe Idee verwenden, um Text nach dem Zeilenende anzuzeigen:
(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)))
Der folgende Aufruf führt zu Ihrem Beispiel für das rote Feld auf der rechten Seite:
(my-momentarily-display-after-line-end "annotation")
Sie können viel verrückter werden und Gesichter hinzufügen, um diese Überlagerungen von Puffertext zu unterscheiden, sie länger als für eine Zeitüberschreitung anzuzeigen, ihre Position anzupassen, zu erkennen, wenn kein leerer Raum vorhanden ist, und normale Überlagerungen von richtigem Text zu verwenden usw. Ich empfehle, einen Blick darauf zu werfen Der Quellcode des
Unternehmensmodus, da er sehr gut lesbar ist und eine aufwändigere (und meist fehlerfreie) Verwendung von Overlays zum Erstellen eines flexiblen Popup-Menüs mit den vorgeschlagenen Funktionen demonstriert.