Código autocompletado con hiedra

11

En un gran proyecto de C ++, uso dabberv-expand (también conocido como M- /). Rtags, ctags, csope, etc. no funcionan por diferentes razones. Lamentablemente, no sé cómo obligar a dabbrev a utilizar una búsqueda difusa. Entonces decidí usar hiedra. 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))))))

Una cosa es extrañada. La finalización muestra a los candidatos en el minibúfer. Quiero que se muestren en una ventana emergente cerca del punto de entrada. Traté de 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 usar la hiedra como backend para algún otro paquete como compañía?

Alex
fuente

Respuestas:

8

Lo que desea puede lograrse agregando una nueva fuente completion-at-point-functions. Esto no es específico de ivy, pero ivylo utiliza:

(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 correctamente major-modeusando su gancho), presione C-M-i( complete-symbol) para obtener la lista de finalizaciones. Si tiene ivy-modeactivado, esta lista se mostrará en línea para las versiones recientes de ivy.

abo-abo
fuente
De nada. En este sitio, si la respuesta funciona, debe marcarla como "aceptada".
abo-abo