Codifique a conclusão automática com o ivy

11

Em um grande projeto C ++, uso o dabberv-expand (também conhecido como M- /). Rtags, ctags, csope etc não funcionam por diferentes razões. Infelizmente, não sei como aplicar o dabbrev para usar uma pesquisa difusa. Então eu decidi usar a hera. O código a seguir faz quase tudo o que eu quero:

(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))))))

Uma coisa está faltando. A conclusão mostra os candidatos no minibuffer. Eu quero que eles sejam exibidos em uma janela pop-up perto do ponto de entrada. Tentei usar ivy-display-function-popup e ivy-display-function-overlay, mas falhei.

Perguntas: como mostrar os candidatos em uma janela pop-up ou sobreposta? Pode ser possível usar a hera como back-end para algum outro pacote como a empresa?

Alex
fonte

Respostas:

8

O que você deseja pode ser alcançado adicionando uma nova fonte ao completion-at-point-functions. Isso não é específico ivy, mas ivyfaz uso dele:

(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)

Após esta configuração (certifique-se de fazê-lo corretamente major-modeusando seu gancho), pressione C-M-i( complete-symbol) para obter a lista de conclusões. Se você tiver ivy-modeativado, esta lista será mostrada em linha nas versões recentes do ivy.

abo-abo
fonte
De nada. Neste site, se a resposta funcionar, você deve marcá-la como "aceita".
abo-abo