wip(lldap): Consultant
This commit is contained in:
84
users/crumb/programs/emacs/modules/lang/syd-lang-clojure.el
Normal file
84
users/crumb/programs/emacs/modules/lang/syd-lang-clojure.el
Normal file
@@ -0,0 +1,84 @@
|
||||
;;; syd-lang-clojure.el -*- lexical-binding: t; -*-
|
||||
|
||||
(use-package clojure-mode
|
||||
:mode (rx "." (or "clj" "cljs" "edn" "cljc") eol)
|
||||
:config
|
||||
(add-hook 'clojure-mode-hook #'syd-lisp-mode)
|
||||
(dolist (c '(?- ?_ ?? ?! ?+ ?* ?/ ?: ?> ?< ?= ?&))
|
||||
(modify-syntax-entry c "w" clojure-mode-syntax-table)))
|
||||
|
||||
(use-package cider
|
||||
:after clojure-mode)
|
||||
|
||||
(defun syd-clojure-open-repl (&optional arg type)
|
||||
"Open a Cider REPL for clojure and return the buffer."
|
||||
(interactive "P")
|
||||
;; TODO: Better error handling
|
||||
;; type is `clj' for clojure and `cljs' for clojurescript
|
||||
;; ... with no type specified, assume `clj'.
|
||||
(let ((type (or type 'clj)))
|
||||
(if-let* ((buffer (cider-current-repl type)))
|
||||
(pop-to-buffer buffer)
|
||||
(let ((process (cond ((eq type 'clj) (cider-jack-in-clj arg))
|
||||
((eq type 'cljs) (cider-jack-in-cljs arg)))))
|
||||
(message "Starting CIDER server for the first time...")
|
||||
(while (and (process-live-p process)
|
||||
(not (cider-current-repl type)))
|
||||
(sit-for 1))
|
||||
(message "Starting CIDER server for the first time...done")
|
||||
(pop-to-buffer (cider-current-repl type))))))
|
||||
|
||||
(use-package cider-mode
|
||||
:straight nil
|
||||
;; :after clojure-mode
|
||||
:hook (clojure-mode-local-vars . cider-mode)
|
||||
:init
|
||||
(with-eval-after-load 'clojure-mode
|
||||
(set-repl-handler! '(clojure-mode clojurec-mode)
|
||||
#'syd-clojure-open-repl :persist t)
|
||||
(set-repl-handler! 'clojurescript-mode
|
||||
#'syd-clojure-open-cljs-repl :persist t)
|
||||
(set-eval-handler! '(clojure-mode clojurec-mode clojurescript-mode)
|
||||
#'cider-eval-region))
|
||||
:config
|
||||
(add-hook 'cider-mode-hook #'eldoc-mode)
|
||||
(set-popup-rules!
|
||||
`(("^\\*cider-error*" :ignore t)
|
||||
("^\\*cider-repl" :quit nil :ttl nil)
|
||||
("^\\*cider-repl-history" :vslot 2 :ttl nil)
|
||||
(,(rx bol "*cider-cheatsheet*")
|
||||
:width ,(lambda (win)
|
||||
(with-selected-window win
|
||||
(enlarge-window (- (min 45 (* 0.2 (frame-width)))
|
||||
(window-width))
|
||||
t)))
|
||||
:side right :vslot -8 :quit t :select t)
|
||||
(,(rx bol "*cider-doc*")
|
||||
:slot 2 :vslot -8 :quit t :select t)))
|
||||
;; DEPRECATED: Remove once syd-strategies is working.
|
||||
(syd-add-hook 'clojure-mode-hook
|
||||
(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))
|
||||
|
||||
;; Give different pairs of delimiters different colours.
|
||||
(use-package rainbow-delimiters
|
||||
:hook (clojure-mode . rainbow-delimiters-mode))
|
||||
|
||||
(provide 'syd-lang-clojure)
|
||||
@@ -68,12 +68,11 @@ to a pop up buffer."
|
||||
|
||||
(add-hook 'emacs-lisp-mode-hook #'syd-lisp-mode)
|
||||
|
||||
(defun syd-emacs-set-handlers-h ()
|
||||
(setq-local syd-lookup-documentation-handlers
|
||||
(list #'syd-emacs-lisp-lookup-documentation)))
|
||||
|
||||
(add-hook 'emacs-lisp-mode-hook #'syd-emacs-set-handlers-h)
|
||||
(add-hook 'help-mode-hook #'syd-emacs-set-handlers-h)
|
||||
;; DEPRECATED: Remove once syd-strategies is working.
|
||||
(syd-add-hook '(emacs-lisp-mode-hook help-mode-hook)
|
||||
(defun syd-emacs-set-handlers-h ()
|
||||
(setq-local syd-lookup-documentation-handlers
|
||||
(list #'syd-emacs-lisp-lookup-documentation))))
|
||||
|
||||
;; Semantic highlighting for Elisp.
|
||||
(use-package highlight-defined
|
||||
|
||||
@@ -107,35 +107,35 @@ Otherwise, nil."
|
||||
;; It must be updated whenever evil-collection updates theirs.
|
||||
(defvar evil-collection-mode-list
|
||||
`(2048-game ag alchemist anaconda-mode apropos arc-mode atomic-chrome
|
||||
auto-package-update beginend bluetooth bm bookmark
|
||||
(buff-menu "buff-menu") bufler calc calendar cider citre cmake-mode
|
||||
color-rg comint company compile consult corfu crdt (csv "csv-mode")
|
||||
(custom cus-edit) cus-theme dape dashboard daemons deadgrep debbugs
|
||||
debug devdocs dictionary diff-hl diff-mode dired dired-sidebar
|
||||
disk-usage distel doc-view docker eat ebib ebuku edbi edebug ediff eglot
|
||||
elpaca ement explain-pause-mode eldoc elfeed elisp-mode elisp-refs
|
||||
elisp-slime-nav embark emms ,@(if (> emacs-major-version 28) '(emoji))
|
||||
epa ert eshell eval-sexp-fu evil-mc eww fanyi finder flycheck flymake
|
||||
forge free-keys geiser ggtags git-timemachine gited gnus go-mode gptel
|
||||
grep guix hackernews helm help helpful hg-histedit hungry-delete hyrolo
|
||||
ibuffer (image image-mode) image-dired image+ imenu imenu-list
|
||||
(indent "indent") indium info ivy js2-mode
|
||||
,@(if (>= emacs-major-version 30) '(kmacro)) leetcode lispy lms log-edit
|
||||
log-view lsp-ui-imenu lua-mode kotlin-mode macrostep man
|
||||
(magit magit-repos magit-submodule) magit-repos magit-section
|
||||
magit-todos markdown-mode monky mpc mpdel mu4e mu4e-conversation neotree
|
||||
newsticker notmuch nov omnisharp org org-present org-roam osx-dictionary
|
||||
outline p4 (package-menu package) pass (pdf pdf-tools) popup proced
|
||||
prodigy profiler p-search python quickrun racer racket-describe realgud
|
||||
reftex replace restclient rg ripgrep rjsx-mode robe rtags ruby-mode
|
||||
scheme scroll-lock selectrum sh-script
|
||||
,@(if (> emacs-major-version 27) '(shortdoc)) simple simple-mpc slime
|
||||
sly smerge-mode snake so-long speedbar tab-bar tablist tar-mode telega
|
||||
(term term ansi-term multi-term) tetris thread tide timer-list
|
||||
transmission trashed tuareg typescript-mode vc-annotate vc-dir vc-git
|
||||
vdiff vertico view vlf vterm vundo w3m wdired wgrep which-key
|
||||
with-editor woman xref xwidget yaml-mode youtube-dl zmusic
|
||||
(ztree ztree-diff)))
|
||||
auto-package-update beginend bluetooth bm bookmark
|
||||
(buff-menu "buff-menu") bufler calc calendar cider citre cmake-mode
|
||||
color-rg comint company compile consult corfu crdt (csv "csv-mode")
|
||||
(custom cus-edit) cus-theme dape dashboard daemons deadgrep debbugs
|
||||
debug devdocs dictionary diff-hl diff-mode dired dired-sidebar
|
||||
disk-usage distel doc-view docker eat ebib ebuku edbi edebug ediff eglot
|
||||
elpaca ement explain-pause-mode eldoc elfeed elisp-mode elisp-refs
|
||||
elisp-slime-nav embark emms ,@(if (> emacs-major-version 28) '(emoji))
|
||||
epa ert eshell eval-sexp-fu evil-mc eww fanyi finder flycheck flymake
|
||||
forge free-keys geiser ggtags git-timemachine gited gnus go-mode gptel
|
||||
grep guix hackernews helm help helpful hg-histedit hungry-delete hyrolo
|
||||
ibuffer (image image-mode) image-dired image+ imenu imenu-list
|
||||
(indent "indent") indium info ivy js2-mode
|
||||
,@(if (>= emacs-major-version 30) '(kmacro)) leetcode lispy lms log-edit
|
||||
log-view lsp-ui-imenu lua-mode kotlin-mode macrostep man
|
||||
(magit magit-repos magit-submodule) magit-repos magit-section
|
||||
magit-todos markdown-mode monky mpc mpdel mu4e mu4e-conversation neotree
|
||||
newsticker notmuch nov omnisharp org org-present org-roam osx-dictionary
|
||||
outline p4 (package-menu package) pass (pdf pdf-tools) popup proced
|
||||
prodigy profiler p-search python quickrun racer racket-describe realgud
|
||||
reftex replace restclient rg ripgrep rjsx-mode robe rtags ruby-mode
|
||||
scheme scroll-lock selectrum sh-script
|
||||
,@(if (> emacs-major-version 27) '(shortdoc)) simple simple-mpc slime
|
||||
sly smerge-mode snake so-long speedbar tab-bar tablist tar-mode telega
|
||||
(term term ansi-term multi-term) tetris thread tide timer-list
|
||||
transmission trashed tuareg typescript-mode vc-annotate vc-dir vc-git
|
||||
vdiff vertico view vlf vterm vundo w3m wdired wgrep which-key
|
||||
with-editor woman xref xwidget yaml-mode youtube-dl zmusic
|
||||
(ztree ztree-diff)))
|
||||
|
||||
(cl-defun syd-evil-collection-init (module &key disabled-modules)
|
||||
"Initialise evil-collection-MODULE.
|
||||
@@ -150,14 +150,12 @@ modules."
|
||||
(with-demoted-errors "error loading evil-collection: %s"
|
||||
(evil-collection-init (list module))))))
|
||||
|
||||
(defun syd-evil-collection-disable-blacklist-a (fn)
|
||||
;; Allow binding to ESC.
|
||||
(syd-defadvice syd-evil-collection-disable-blacklist-a (fn)
|
||||
:around #'evil-collection-vterm-toggle-send-escape
|
||||
(let (evil-collection-key-blacklist)
|
||||
(funcall-interactively fn)))
|
||||
|
||||
;; Allow binding to ESC.
|
||||
(advice-add #'evil-collection-vterm-toggle-send-escape
|
||||
:around #'syd-evil-collection-disable-blacklist-a)
|
||||
|
||||
;; These modes belong to packages that Emacs always loads at startup, causing
|
||||
;; evil-collection and it's co-packages to all load immediately. We avoid
|
||||
;; this by loading them after evil-collection has first loaded...
|
||||
|
||||
@@ -78,7 +78,9 @@
|
||||
;; Project
|
||||
(general-def
|
||||
:prefix-map 'syd-leader-project-map
|
||||
"C" `("Compile project" . ,#'project-compile))
|
||||
"C" `("Compile project" . ,#'project-compile)
|
||||
"&" `("Async cmd in project root" . ,#'project-async-shell-command)
|
||||
"p" `("Switch project" . ,#'project-switch-project))
|
||||
|
||||
(general-def
|
||||
:prefix-map 'syd-leader-help-package-map
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
(file-name-concat user-emacs-directory "modules" "lang"))
|
||||
|
||||
(require 'syd-lang-emacs-lisp)
|
||||
(require 'syd-lang-clojure)
|
||||
(require 'syd-lang-nix)
|
||||
|
||||
(provide 'syd-lang)
|
||||
|
||||
@@ -28,4 +28,29 @@
|
||||
;; `compile-multi-embark-command-map'.
|
||||
:config (projection-multi-embark-setup-command-map))
|
||||
|
||||
(use-package skeletor
|
||||
:commands (skeletor-create-project-at skeletor-create-project)
|
||||
:custom ((skeletor-project-directory (expand-file-name "~/src"))
|
||||
(skeletor-completing-read-function #'completing-read))
|
||||
:general (:keymaps 'syd-leader-project-map
|
||||
"n" #'skeletor-create-project
|
||||
"N" #'skeletor-create-project-at)
|
||||
:config
|
||||
(skeletor-define-template "clj-nix"
|
||||
:substitutions
|
||||
'(("__PROJECT-OWNER__" . (lambda ()
|
||||
(read-no-blanks-input "Project owner: "))))
|
||||
:before-git
|
||||
(lambda (dir)
|
||||
;; Use underscores instead of hyphens in clj file names.
|
||||
(let ((default-directory (file-name-concat dir "src")))
|
||||
(dolist (f (directory-files "." nil "-" t))
|
||||
(rename-file
|
||||
f
|
||||
(string-replace "-" "_" f))))
|
||||
;; REVIEW: Is it safe to make this be async? We require that the command
|
||||
;; has finished before Git initialises.
|
||||
(skeletor-shell-command "nix run github:jlesquembre/clj-nix#deps-lock"
|
||||
dir))))
|
||||
|
||||
(provide 'syd-projects)
|
||||
|
||||
@@ -27,4 +27,11 @@
|
||||
(set-popup-rule! (rx line-start "*lsp-" (or "help" "install"))
|
||||
:size 0.35 :quit t :select nil))
|
||||
|
||||
(use-package envrc
|
||||
;; REVIEW: Can we load this any later/better?
|
||||
:hook (on-first-file . envrc-global-mode)
|
||||
:config
|
||||
(set-popup-rule! (rx "*envrc*")
|
||||
:quit t :ttl 0))
|
||||
|
||||
(provide 'syd-tooling)
|
||||
|
||||
@@ -64,6 +64,10 @@
|
||||
:custom ((display-line-numbers-type 'relative)
|
||||
;; Always ask "y/n"; never "yes/no".
|
||||
(use-short-answers t)
|
||||
;; Scroll compilation buffer to follow output.
|
||||
(compilation-scroll-output t)
|
||||
;; Allow `fit-window-to-buffer' to make horizontal adjustments.
|
||||
(fit-window-to-buffer-horizontally t)
|
||||
;; I don't like that `grep' asks me to save unsaved files. It makes
|
||||
;; me think it's about to kill my buffers.
|
||||
(grep-save-buffers nil)
|
||||
@@ -161,6 +165,10 @@ for example when calling `shell'.")
|
||||
:quit t)
|
||||
;; Required for :quit t to do anything.
|
||||
(evil-set-initial-state 'messages-buffer-mode 'motion)
|
||||
(evil-set-initial-state 'debugger-mode 'normal)))
|
||||
(evil-set-initial-state 'debugger-mode 'normal)
|
||||
(set-popup-rule! shell-command-buffer-name-async
|
||||
:slot -2
|
||||
:modeline nil
|
||||
:ttl nil)))
|
||||
|
||||
(provide 'syd-ui)
|
||||
|
||||
Reference in New Issue
Block a user