From bd1f2ec4d60d851d208f70947475679efe092d52 Mon Sep 17 00:00:00 2001 From: Michael Fiano Date: Mon, 15 Oct 2018 23:08:59 -0400 Subject: [PATCH 1/4] lang/clojure: More changes - Add a popup rule for the history buffer, since we want to see the REPL change while it's open - Add hooks to enable company fuzzy completion - Add more cider configuration options - Configure Shift-Return to insert a newline and indent in the REPL without submitting the result - Bind normal state keybindings for the CIDER history buffer --- modules/lang/clojure/config.el | 40 +++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/modules/lang/clojure/config.el b/modules/lang/clojure/config.el index 1db4471dc..92a66f32e 100644 --- a/modules/lang/clojure/config.el +++ b/modules/lang/clojure/config.el @@ -4,6 +4,11 @@ (after! clojure-mode (add-hook 'clojure-mode-hook #'rainbow-delimiters-mode) + (set-popup-rules! + '(("^\\*cider-error*" :ignore t) + ("^\\*cider-repl" :quit nil :select nil) + ("^\\*cider-repl-history" :vslot 2 :ttl nil))) + (defun +clojure|cider-switch-to-repl-buffer-and-switch-ns () (interactive) (cider-switch-to-repl-buffer t)) @@ -14,27 +19,46 @@ :commands (cider-jack-in cider-jack-in-clojurescript) :hook (clojure-mode . cider-mode) :init - (set-popup-rule! "^\\*cider-repl" :quit nil :select nil) (set-repl-handler! 'clojure-mode #'+clojure/repl) (set-eval-handler! 'clojure-mode #'cider-eval-region) (set-lookup-handlers! 'clojure-mode :definition #'cider-browse-ns-find-at-point :documentation #'cider-browse-ns-doc-at-point) + (add-hook 'cider-repl-mode-hook #'cider-company-enable-fuzzy-completion) + (add-hook 'cider-mode-hook #'cider-company-enable-fuzzy-completion) (add-hook 'cider-mode-hook #'eldoc-mode) :config - (setq nrepl-log-messages nil - nrepl-hide-special-buffers t + (setq nrepl-hide-special-buffers t + nrepl-log-messages nil cider-font-lock-dynamically '(macro core function var) cider-overlays-use-font-lock t cider-prompt-for-symbol nil cider-repl-display-help-banner nil - cider-repl-pop-to-buffer-on-connect t + cider-repl-history-display-duplicates nil + cider-repl-history-display-style 'one-line + cider-repl-history-file (concat doom-cache-dir "cider-repl-history") + cider-repl-history-highlight-current-entry t + cider-repl-history-quit-action 'delete-and-restore + cider-repl-history-highlight-inserted-item t + cider-repl-history-size 1000 + cider-repl-pop-to-buffer-on-connect 'display-only + cider-repl-result-prefix ";; => " + cider-repl-print-length 100 + cider-repl-use-clojure-font-lock t cider-repl-use-pretty-printing t cider-repl-wrap-history nil - cider-repl-history-display-duplicates nil - cider-repl-history-file (concat doom-cache-dir "cider-repl-history") - cider-stacktrace-default-filters '(tooling dup) - cider-repl-use-clojure-font-lock t) + cider-stacktrace-default-filters '(tooling dup)) + + (when (featurep! :feature evil +everywhere) + (evil-define-key 'insert cider-repl-mode-map + [S-return] #'cider-repl-newline-and-indent) + (evil-define-key 'normal cider-repl-history-mode-map + "q" 'cider-repl-history-quit + [return] 'cider-repl-history-insert-and-quit + "l" 'cider-repl-history-occur + "s" 'cider-repl-history-search-forward + "r" 'cider-repl-history-search-backward + "U" 'cider-repl-history-undo-other-window)) ;; TODO: Add mode-local labels when general support is in. (map! :localleader From a25257d8da396b3a85010c6439214a606405fc20 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Tue, 16 Oct 2018 01:55:38 -0400 Subject: [PATCH 2/4] lang/clojure: remove fuzzy completion for company I prefer that fuzzy search is disabled by default, for consistency and performance. Fuzzy search tends to be much significantly slower, and no other company backend offers a fuzzy search mechanism (or should). Fuzzy search is usually gated behind variables and flags, but since opting in here is a trivial one-liner, I don't think it needs one. --- modules/lang/clojure/config.el | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/lang/clojure/config.el b/modules/lang/clojure/config.el index 92a66f32e..0bb670701 100644 --- a/modules/lang/clojure/config.el +++ b/modules/lang/clojure/config.el @@ -24,8 +24,6 @@ (set-lookup-handlers! 'clojure-mode :definition #'cider-browse-ns-find-at-point :documentation #'cider-browse-ns-doc-at-point) - (add-hook 'cider-repl-mode-hook #'cider-company-enable-fuzzy-completion) - (add-hook 'cider-mode-hook #'cider-company-enable-fuzzy-completion) (add-hook 'cider-mode-hook #'eldoc-mode) :config (setq nrepl-hide-special-buffers t From 4fc7de442e8939d4cd8fa4a6a03c24e00b794871 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Tue, 16 Oct 2018 02:03:23 -0400 Subject: [PATCH 3/4] lang/clojure: group & update evil integration Also removes evil-normalize-keymaps on cider-repl-mode-hook, because cider-repl-mode isn't a minor mode. The purpose of evil-normalize-keymaps is to ensure evil is aware of evil keybinds in minor-mode keymaps when it is first enabled. --- modules/lang/clojure/config.el | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/modules/lang/clojure/config.el b/modules/lang/clojure/config.el index 0bb670701..a6b633210 100644 --- a/modules/lang/clojure/config.el +++ b/modules/lang/clojure/config.el @@ -47,17 +47,6 @@ cider-repl-wrap-history nil cider-stacktrace-default-filters '(tooling dup)) - (when (featurep! :feature evil +everywhere) - (evil-define-key 'insert cider-repl-mode-map - [S-return] #'cider-repl-newline-and-indent) - (evil-define-key 'normal cider-repl-history-mode-map - "q" 'cider-repl-history-quit - [return] 'cider-repl-history-insert-and-quit - "l" 'cider-repl-history-occur - "s" 'cider-repl-history-search-forward - "r" 'cider-repl-history-search-backward - "U" 'cider-repl-history-undo-other-window)) - ;; TODO: Add mode-local labels when general support is in. (map! :localleader (:map clojure-mode-map @@ -106,8 +95,17 @@ :n "b" #'cider-switch-to-repl-buffer :n "B" #'+clojure|cider-switch-to-repl-buffer-and-switch-ns :n "c" #'cider-repl-clear-buffer))) + (when (featurep! :feature evil +everywhere) - (add-hook 'cider-repl-mode-hook #'evil-normalize-keymaps))) + (evil-define-key 'insert cider-repl-mode-map + [S-return] #'cider-repl-newline-and-indent) + (evil-define-key 'normal cider-repl-history-mode-map + "q" 'cider-repl-history-quit + [return] 'cider-repl-history-insert-and-quit + "l" 'cider-repl-history-occur + "s" 'cider-repl-history-search-forward + "r" 'cider-repl-history-search-backward + "U" 'cider-repl-history-undo-other-window))) (def-package! clj-refactor :hook (clojure-mode . clj-refactor-mode) From bef0f39535d59f10b7729dddb729c7f882af94d4 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Tue, 16 Oct 2018 02:07:00 -0400 Subject: [PATCH 4/4] lang/clojure: conform command to naming convention Interactive commands in doom follow the `+module/name` naming convention. `+module|name` is used for hook functions. --- modules/lang/clojure/config.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/lang/clojure/config.el b/modules/lang/clojure/config.el index a6b633210..9409b2fe2 100644 --- a/modules/lang/clojure/config.el +++ b/modules/lang/clojure/config.el @@ -9,7 +9,7 @@ ("^\\*cider-repl" :quit nil :select nil) ("^\\*cider-repl-history" :vslot 2 :ttl nil))) - (defun +clojure|cider-switch-to-repl-buffer-and-switch-ns () + (defun +clojure/cider-switch-to-repl-buffer-and-switch-ns () (interactive) (cider-switch-to-repl-buffer t)) @@ -93,7 +93,7 @@ :n "r" #'cider-refresh :n "R" #'cider-restart :n "b" #'cider-switch-to-repl-buffer - :n "B" #'+clojure|cider-switch-to-repl-buffer-and-switch-ns + :n "B" #'+clojure/cider-switch-to-repl-buffer-and-switch-ns :n "c" #'cider-repl-clear-buffer))) (when (featurep! :feature evil +everywhere)