clojure-emacs / ac-nrepl

[DEPRECATED] Emacs auto-complete backend for nrepl completions
74 stars 11 forks source link

ac-source-nrepl-vars conflict with yasnippet? #34

Open BlanceXR opened 11 years ago

BlanceXR commented 11 years ago

I am using yasnippet along with auto complete and ac-nrepl.

When I start a fresh emacs session, open my .clj file, type something like def, I see bunch of normal candidates and highlighted yasnippet's target. I can then tab to complete or ret to call yas-expand.

However, I noticed that after I start nrepl, and evaluate the (ns ...) form of my clj file, I can no longer see yasnippet's target in auto-complete lists.

I than found out that if I comment out (add-to-list 'ac-sources 'ac-source-nrepl-vars) in ac-nrepl-setup , the yasnippet's target appears again.

purcell commented 11 years ago

Presumably you just need to make sure that yasnippet's completion source appears earlier in the ac-sources list. Since ac-nrepl-setup uses (add-to-list ...), the ac-nrepl sources will be added at the beginning of ac-sources. To override this, which I believe is a reasonable default behaviour, you can write code something like this:

(defun ensure-yasnippet-is-first-ac-source ()
  (when (memq 'ac-source-yasnippet ac-sources)
    (setq ac-sources
          (cons 'ac-source-yasnippet
                (remove 'ac-source-yasnippet ac-sources)))))
(add-hook 'nrepl-interaction-mode-hook 'ac-nrepl-setup)
(add-hook 'nrepl-interaction-mode-hook 'ensure-yasnippet-is-first-ac-source)
(add-hook 'nrepl-mode-hook 'ac-nrepl-setup)
(add-hook 'nrepl-mode-hook 'ensure-yasnippet-is-first-ac-source)

I haven't tested that code directly, but you get the general idea. :-)

BlanceXR commented 11 years ago

Thanks! I changed add-hook's order and It works great!

MalloZup commented 5 years ago

autogenerated with https://github.com/MalloZup/doghub: issue inactive since 450 days. Please update the issue or close it