completion – Completar código automáticamente con Ivy

Pregunta:

En un gran proyecto de C ++ uso dabberv-expand (también conocido como M- /). Rtags, ctags, csope, etc. no funcionan por diferentes razones. Desafortunadamente, no sé cómo hacer que dabbrev utilice una búsqueda difusa. Entonces decidí usar ivy. El siguiente código hace casi todo lo que quiero:

(defun ivy-complete ()
  (interactive)
  (dabbrev--reset-global-variables)
  (let* ((abbrev (dabbrev--abbrev-at-point))
         (candidates (dabbrev--find-all-expansions abbrev t)))
    (when (not (null candidates))
      (let* ((found-match (ivy-read "matches " candidates
                                :preselect (thing-at-point 'word)
                                :sort t))
            (abbrev-length (length abbrev)))
        (insert (substring found-match abbrev-length))))))

Se echa de menos una cosa. La finalización muestra los candidatos en el minibúfer. Quiero que se muestren en una ventana emergente cerca del punto de entrada. Intenté usar ivy-display-function-popup y ivy-display-function-overlay pero fallé.

Preguntas: ¿cómo mostrar a los candidatos en una ventana emergente o superpuesta? ¿Puede ser posible utilizar Ivy como backend para algún otro paquete como empresa?

Respuesta:

Lo que desea se puede lograr agregando una nueva fuente a completion-at-point-functions . Esto no es específico de la ivy , pero la ivy lo usa:

(defun dabbrev-complation-at-point ()
  (dabbrev--reset-global-variables)
  (let* ((abbrev (dabbrev--abbrev-at-point))
         (candidates (dabbrev--find-all-expansions abbrev t))
         (bnd (bounds-of-thing-at-point 'symbol)))
    (list (car bnd) (cdr bnd) candidates)))
(add-to-list 'completion-at-point-functions 'dabbrev-complation-at-point)

Después de esta configuración (asegúrese de hacerlo para el major-mode adecuado usando su gancho), presione CMi ( complete-symbol ) para obtener la lista de finalizaciones. Si tiene ivy-mode , esta lista se mostrará en línea para las versiones recientes de ivy .

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım