diff --git a/users/crumb/programs/emacs/lib/syd-project.el b/users/crumb/programs/emacs/lib/syd-project.el index 8a1fefb..77bf8c0 100644 --- a/users/crumb/programs/emacs/lib/syd-project.el +++ b/users/crumb/programs/emacs/lib/syd-project.el @@ -33,6 +33,7 @@ project\"." (interactive) (require 'syd-file) ;; TODO: Prompt for path project root is not found. + ;; TODO: Respect gitignore. (syd-search-directory (syd-project-root))) (defun syd-project-root-find-file (file-name) diff --git a/users/crumb/programs/emacs/modules/lang/syd-lang-clojure.el b/users/crumb/programs/emacs/modules/lang/syd-lang-clojure.el index 7f17577..300d963 100644 --- a/users/crumb/programs/emacs/modules/lang/syd-lang-clojure.el +++ b/users/crumb/programs/emacs/modules/lang/syd-lang-clojure.el @@ -1,7 +1,12 @@ ;;; syd-lang-clojure.el -*- lexical-binding: t; -*- (use-package clojure-mode - :mode (rx "." (or "clj" "cljs" "edn" "cljc") eol) + :mode (("\\.\\(clj\\|cljd\\|dtm\\|edn\\|lpy\\)\\'" . clojure-mode) + ("\\.cljc\\'" . clojurec-mode) + ("\\.cljs\\'" . clojurescript-mode) + ("\\(?:build\\|profile\\)\\.boot\\'" . clojure-mode)) + :interpreter (("bb" . clojure-mode) + ("nbb" . clojurescript-mode)) :config (add-hook 'clojure-mode-hook #'syd-lisp-mode) (dolist (c '(?- ?_ ?? ?! ?+ ?* ?/ ?: ?> ?< ?= ?&)) @@ -28,6 +33,10 @@ (message "Starting CIDER server for the first time...done") (pop-to-buffer (cider-current-repl type)))))) +(defun syd-clojure-open-cljs-repl (&optional arg) + (interactive "P") + (syd-clojure-open-repl arg 'cljs)) + (use-package cider-mode :straight nil ;; :after clojure-mode @@ -40,19 +49,36 @@ #'syd-clojure-open-cljs-repl :persist t) (set-eval-handler! '(clojure-mode clojurec-mode clojurescript-mode) #'cider-eval-region)) + :custom ((cider-show-error-buffer nil)) :general (:keymaps 'cider-repl-mode-map :states '(normal insert) "C-k" #'cider-repl-backward-input "C-j" #'cider-repl-forward-input "C-s" #'cider-repl-previous-matching-input) + (:keymaps 'clojure-mode-map + :states '(normal visual motion emacs insert) + :major-modes t + :prefix syd-localleader-key + :non-normal-prefix syd-alt-localleader-key + "\"" #'cider-jack-in-cljs + "'" #'cider-jack-in-clj + "c" #'cider-connect-clj + "C" #'cider-connect-cljs + "r l" #'cider-load-buffer + "r n" #'cider-repl-set-ns + "r r" #'cider-ns-refresh + "r R" #'cider-restart + "r q" #'cider-quit + "h c" #'cider-cheatsheet) :config (add-hook 'cider-mode-hook #'eldoc-mode) (add-hook 'cider-repl-mode-hook #'syd-lisp-mode) (set-popup-rules! - `(("^\\*cider-error*" :ignore t) + `(("^\\*cider-error\\*" :ignore t) ("^\\*cider-repl" :quit nil :ttl nil) ("^\\*cider-repl-history" :vslot 2 :ttl nil) + (,(rx bol "*cider-nrepl-middleware") :slot 3 :quit t :ttl 0) (,(rx bol "*cider-cheatsheet*") :width ,(lambda (win) (with-selected-window win @@ -67,22 +93,9 @@ (defun syd-clojure-set-handlers-h () (setq-local syd-lookup-documentation-handlers (list #'cider-doc)))) - (general-define-key - :keymaps 'cider-mode-map - :states '(normal visual motion emacs insert) - :major-modes t - :prefix syd-localleader-key - :non-normal-prefix syd-alt-localleader-key - "\"" #'cider-jack-in-cljs - "'" #'cider-jack-in-clj - "c" #'cider-connect-clj - "C" #'cider-connect-cljs - "r l" #'cider-load-buffer - "r n" #'cider-repl-set-ns - "r r" #'cider-ns-refresh - "r R" #'cider-restart - "r q" #'cider-quit - "h c" #'cider-cheatsheet)) + + ;; Correctly indent some common macros. + (put-clojure-indent 'match 1)) ;; Give different pairs of delimiters different colours. (use-package rainbow-delimiters