He preparado un ejemplo funcional de una función que toma una cadena y la muestra temporalmente con un tiempo de espera después del texto del búfer:
(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)))
El siguiente encantamiento dará como resultado su ejemplo de cuadro rojo inferior:
(my-momentarily-display-after-buffer-end "Nothing to see here...")
La razón por la que esto funciona es porque las superposiciones usan marcadores como posiciones para mostrar entre ellas. El uso de la posición más externa como inicio y final de la superposición le permite mostrar texto después de él mediante la after-string
propiedad. Dado que las superposiciones pueden contener texto propio, lo configuré para que aparezca sangrado y con espacios en blanco a su alrededor.
El otro ejemplo puede usar la misma idea para mostrar texto después del final de la línea:
(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)))
La siguiente invocación resultará en su ejemplo de cuadro rojo del lado derecho:
(my-momentarily-display-after-line-end "annotation")
Puede volverse mucho más loco y agregar caras para distinguir estas superposiciones del texto del búfer, mostrarlas durante más tiempo que un tiempo de espera, ajustar su posición, detectar cuándo no hay espacio vacío y usar superposiciones normales de texto propio, etc. Recomiendo mirar el código fuente del
modo empresa porque es muy legible y demuestra un uso más elaborado (y en su mayoría libre de errores) de superposiciones para crear un menú emergente flexible con las características sugeridas.