Emacs + Cider (Clojure) + автозаполнение: как получить строку документации?

Я пытаюсь правильно настроить emacs для написания кода Clojure. Я основывал свои настройки Emacs на этом хорошем сообщении в блоге. .

Тем не менее, я изменил несколько настроек, таких как тема, которую он использует и т. д. Я проверял, чтобы получить автозаполнение (Eldoc? Я не уверен), чтобы отобразить строку документации функций в Clojure и из моего собственного кода.

Я хочу видеть документацию, как на этом скриншоте:

eldoc

Однако я не могу получить «желтое» окно документации. Я не уверен, связано ли это с неправильной конфигурацией в моем файле .emacs, или это команда, которую я должен использовать, или...

Вот мой .emacs файл:

(add-to-list 'custom-theme-load-path "~/.emacs.d/lib/noctilux-theme")

(require 'package):
  (add-to-list 'package-archives
    '("marmalade" . "http://marmalade-repo.org/packages/")
    '("melpa" . "http://melpa.milkbox.net/packages/"))

;; Initialize all the ELPA packages (what is installed using the packages commands)    
(package-initialize)  

;; Set bigger fonts
(set-default-font "Courier New-13")  

;; Setup to have a french keyboard layout working   
(require 'iso-transl)  

;; Show parenthesis mode
(show-paren-mode 1)  

;; rainbow delimiters
(global-rainbow-delimiters-mode)

;; paredit
(add-hook 'clojure-mode-hook 'paredit-mode)
(add-hook 'nrepl-mode-hook 'paredit-mode)
(global-set-key [f7] 'paredit-mode)

;; theme
(load-theme 'noctilux t)

;; clojure-mode
(global-set-key [f9] 'cider-jack-in)
(add-hook 'clojure-mode-hook 'turn-on-eldoc-mode)

;; nrepl
(add-hook 'nrepl-interaction-mode-hook 'nrepl-turn-on-eldoc-mode)
(setq nrepl-popup-stacktraces nil)
(add-to-list 'same-window-buffer-names "*nrepl*")
(add-hook 'nrepl-mode-hook 'paredit-mode)

;; Auto complete
(require 'auto-complete-config)
;(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")
(setq ac-delay 0.0)
;(setq ac-use-quick-help t)
(setq ac-quick-help-delay 0.0)
;(setq ac-use-fuzzy 1)
;(setq ac-auto-start 1)
;(setq ac-auto-show-menu 1)
(ac-config-default)

;; ac-nrepl
(require 'ac-nrepl)
(add-hook 'nrepl-mode-hook 'ac-nrepl-setup)
(add-hook 'nrepl-interaction-mode-hook 'ac-nrepl-setup)
(eval-after-load "auto-complete" '(add-to-list 'ac-modes 'nrepl-mode))


(defun set-auto-complete-as-completion-at-point-function ()
  (setq completion-at-point-functions '(auto-complete)))
(add-hook 'auto-complete-mode-hook 'set-auto-complete-as-completion-at-point-function)

(add-hook 'cider-repl-mode-hook 'set-auto-complete-as-completion-at-point-function)
(add-hook 'cider-mode-hook 'set-auto-complete-as-completion-at-point-function)


;; scroll one line at a time (less "jumpy" than defaults)

(setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ;; one line at a time

(setq mouse-wheel-progressive-speed nil) ;; don't accelerate scrolling

(setq mouse-wheel-follow-mouse 't) ;; scroll window under mouse

(setq scroll-step 1) ;; keyboard scroll one line at a time

Обновление на основе комментария @syohex ниже

Вот что я вижу в своих буферах CLJ:

Всплывающее окно буфера CLJ

В NREPL я вижу "v" вместо "d" (кстати, что означают эти буквы?). Как я уже сказал в своем комментарии, в NREPL я вижу появление желтого окна, а затем, когда появляется всплывающее окно, желтое поле документа исчезает. В буферах кода CLJ желтая коробка никогда не открывается.

Окончательное обновление

После еще нескольких тестов все работает, как и ожидалось. Когда всплывающее окно появляется впервые, желтое поле исчезает. Однако, когда я начинаю выбирать разные варианты, он снова появляется в нужном месте.

Кроме того, он начал работать в буферах CLJ, и я вижу букву «v» вместо «d», как видно на скриншоте выше. Может быть, я забыл запустить НРЭПЛ, пришлось бы тестировать заново.

В любом случае, все работает так, как ожидалось.


person Neoasimov    schedule 20.05.2014    source источник
comment
довольно поздно, но так как я здесь и задаюсь вопросом о том же: by the way, what does these letters means? Здесь как определен в исходном коде.   -  person birdspider    schedule 18.11.2015
comment
На заметку будущим путешественникам: теперь CIDER рекомендует использовать company для автозаполнения.   -  person Josh.F    schedule 12.11.2016


Ответы (4)


nrepl-mode-hook, nrepl-interaction-mode-hook, nrepl-mode устарели. Вы должны использовать cider-mode-hook, cider-repl-mode-hook, cider-mode вместо них соответственно.

И вы должны установить значение ac-quick-help-delay больше, чем 0 (например, 0.5). Патч ниже.

--- nconf-orig.el   2014-05-21 16:51:40.056185465 +0900
+++ conf-new.el 2014-05-21 16:53:11.936182181 +0900
@@ -43,7 +43,7 @@
 ;(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")
 (setq ac-delay 0.0)
 ;(setq ac-use-quick-help t)
-(setq ac-quick-help-delay 0.0)
+(setq ac-quick-help-delay 0.5)
 ;(setq ac-use-fuzzy 1)
 ;(setq ac-auto-start 1)
 ;(setq ac-auto-show-menu 1)
@@ -51,9 +51,10 @@

 ;; ac-nrepl
 (require 'ac-nrepl)
-(add-hook 'nrepl-mode-hook 'ac-nrepl-setup)
-(add-hook 'nrepl-interaction-mode-hook 'ac-nrepl-setup)
-(eval-after-load "auto-complete" '(add-to-list 'ac-modes 'nrepl-mode))
+(add-hook 'cider-mode-hook 'ac-nrepl-setup)
+(add-hook 'cider-repl-mode-hook 'ac-nrepl-setup)
+(add-to-list 'ac-modes 'cider-mode)
+(add-to-list 'ac-modes 'cider-repl-mode)


 (defun set-auto-complete-as-completion-at-point-function ()
person syohex    schedule 21.05.2014
comment
Спасибо @syohex! Это явное улучшение, но все же не на 100%. Из REPL я теперь вижу желтое поле, но поведение такое: сначала появляется желтое поле, затем, когда появляется всплывающее окно автодополнения, желтое поле с документами исчезает. Я не уверен, почему. Кроме того, я хотел бы иметь такое же поведение, когда я редактирую файлы CJL в других буферах (см. Обновление моего поста выше) - person Neoasimov; 21.05.2014
comment
После еще нескольких тестов все работает, как и ожидалось. Когда всплывающее окно появляется впервые, желтая рамка исчезает. Однако, когда я начинаю выбирать разные варианты, он снова появляется в нужном месте. Кроме того, он начал работать в буферах CLJ, и я вижу букву v вместо d, как показано на скриншоте выше. Может быть, я забыл запустить НРЭПЛ, пришлось бы тестировать заново. В любом случае, все работает так, как ожидалось. Спасибо! - person Neoasimov; 21.05.2014

На самом деле эта конфигурация и прежняя ac-nrepl устарели, обратитесь к новому пакету ac-cider

(require 'ac-cider)
(add-hook 'cider-mode-hook 'ac-flyspell-workaround)
(add-hook 'cider-mode-hook 'ac-cider-setup)
(add-hook 'cider-repl-mode-hook 'ac-cider-setup)
(eval-after-load "auto-complete"
    '(add-to-list 'ac-modes 'cider-mode))
person Jaime Agudo    schedule 07.11.2014

сначала появляется желтое поле, затем, когда появляется всплывающее окно автозаполнения, желтое поле с документами исчезает.

Это поведение вызвано (setq ac-quick-help-delay 0.5), так как 0,5 с слишком быстро

Измените 0,5 на большее число (минимальное значение для работы — 0,9 на моем компьютере, но это может зависеть от производительности вашего компьютера) или удалите (setq ac-quick-help-delay 0.5). Так как это будет использовать значение по умолчанию: около 2,5 с, это может решить проблему.

person BlindingDark    schedule 08.09.2016

Я просматриваю это в 2020 году, и ac-cider устарел, но вы можете использовать режим компании.

Используйте M-x package-install company для установки и следуйте документам cider, чтобы настроить его для cider-repl-mode и cider-mode.

person Jason Tumusiime    schedule 23.04.2020