overlays – mostrar información de ayuda de eldoc detrás del punto

Pregunta:

Tengo el siguiente código para reemplazar la función de visualización predeterminada de eldoc:

(defun my-eldoc-display-message-momentary (format-string &rest args)
    "Display eldoc message near point."
    (when format-string
      ;; (pos-tip-show (apply 'format format-string args))
      (momentary-string-display
       (apply 'format format-string args)
       (save-excursion (forward-line) (point))
       )
      ))

(setq eldoc-message-function #'my-eldoc-display-message-momentary)

Pero no funciona bien.

  • se muestra lentamente
  • el carácter de salida para momentary-string-display debe exceptuarse en la mayoría de las entradas de código de programación (no SPC, no [a-zA-Z], no [*, – + =!] etc.)

Espero que alguien pueda mejorarlo.

Respuesta:

Al igual que con el comentario, pos-tip-show funciona bien para mí.

Hice una versión mejor (pero no perfecta) de la versión de momentary-string-display . Acabo de reescribir la función de visualización para que elimine la superposición pasivamente a través de un gancho en lugar de esperar un carácter de salida, que no parece apropiado para lo que está tratando de hacer. La función de visualización que armé sobrescribe temporalmente la siguiente línea del búfer con el mensaje. Mira si te gusta.

(defvar my-display-overlay nil)

(defun my-delete-string-display ()
  (when (overlayp my-display-overlay)
    (delete-overlay my-display-overlay))
  (remove-hook 'post-command-hook 'my-delete-string-display))

(defun my-string-display-next-line (string)
  "Overwrite contents of next line with STRING until next command."
  (let ((str (concat
               (make-string (1+ (current-indentation)) 32)
               (propertize (copy-sequence string) 'face '(:background "#3e4451" :extend t))))
         (start-pos nil)
         (end-pos nil))
    (unwind-protect
      (save-excursion
        (my-delete-string-display)
        (forward-line)
        (setq start-pos (point))
        (end-of-line)
        (setq end-pos (point))
        (setq my-display-overlay (make-overlay start-pos end-pos))
        ;; Hide full line
        (overlay-put my-display-overlay 'display "")
        ;; Display message
        (overlay-put my-display-overlay 'before-string str))
      (add-hook 'post-command-hook 'my-delete-string-display))))

(defun my-eldoc-display-message-momentary (format-string &rest args)
  "Display eldoc message near point."
  (when format-string
    (my-string-display-next-line (apply 'format format-string args))))

(setq eldoc-message-function #'my-eldoc-display-message-momentary)

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım