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?