Podsunąłem działający przykład funkcji, która pobiera ciąg i tymczasowo wyświetla go z limitem czasu po tekście bufora:
(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)))
Następujące zaklęcie spowoduje dolny przykład czerwonej skrzynki:
(my-momentarily-display-after-buffer-end "Nothing to see here...")
Powodem tego jest to, że nakładki używają znaczników jako pozycji, które mają być wyświetlane między nimi. Użycie najbardziej zewnętrznej pozycji jako początku i końca nakładki umożliwia wyświetlanie tekstu po niej za pomocą after-string
właściwości Ponieważ nakładki mogą zawierać tekst zastrzeżony, ustawiłem go tak, aby pojawiał się z wcięciem i białą spacją wokół niego.
W drugim przykładzie można użyć tego samego pomysłu do wyświetlania tekstu po końcu wiersza:
(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)))
Następujące wywołanie spowoduje przykład na czerwonym polu z prawej strony:
(my-momentarily-display-after-line-end "annotation")
Możesz znacznie bardziej zwariować i dodać twarze, aby odróżnić te nakładki od tekstu buforowego, wyświetlić je dłużej niż po upływie limitu czasu, wyregulować ich położenie, wykryć, gdy nie ma pustej przestrzeni i użyć normalnych nakładek z tekstem poleconym itp. Polecam spojrzeć na kod źródłowy
trybu firmowego, ponieważ jest bardzo czytelny i pokazuje bardziej skomplikowane (i przeważnie wolne od błędów) użycie nakładek w celu utworzenia elastycznego menu podręcznego z sugerowanymi funkcjami.