dev: merging from main

This commit is contained in:
Matt Nish-Lapidus 2024-04-07 13:47:02 -04:00
commit e14e30df50
20 changed files with 255 additions and 130 deletions

View file

@ -220,6 +220,14 @@ To disable idle (as-you-type) completion, unset ~corfu-auto~:
(setq corfu-auto nil))
#+end_src
** Turning off auto-completion
To disable idle (as-you-type) completion, unset ~corfu-auto~:
#+begin_src emacs-lisp
;;; in $DOOMDIR/config.el
(after! corfu
(setq corfu-auto nil))
#+end_src
** Adding CAPFs to a mode
To add other CAPFs on a mode-per-mode basis, put either of the following in your
~config.el~:

View file

@ -40,7 +40,8 @@ TAB/S-TAB.")
('aggressive
(not (or (bound-and-true-p mct--active)
(bound-and-true-p vertico--input)
(eq (current-local-map) read-passwd-map)
(and (featurep 'auth-source)
(eq (current-local-map) read-passwd-map))
(and (featurep 'helm-core) (helm--alive-p))
(and (featurep 'ido) (ido-active))
(where-is-internal 'minibuffer-complete
@ -114,10 +115,10 @@ TAB/S-TAB.")
(use-package! cape
:defer t
:init
(add-hook! prog-mode
(add-hook! 'prog-mode-hook
(defun +corfu-add-cape-file-h ()
(add-hook 'completion-at-point-functions #'cape-file -10 t)))
(add-hook! (org-mode markdown-mode)
(add-hook! '(org-mode-hook markdown-mode-hook)
(defun +corfu-add-cape-elisp-block-h ()
(add-hook 'completion-at-point-functions #'cape-elisp-block 0 t)))
;; Enable Dabbrev completion basically everywhere as a fallback.
@ -126,8 +127,12 @@ TAB/S-TAB.")
;; Set up `cape-dabbrev' options.
(defun +dabbrev-friend-buffer-p (other-buffer)
(< (buffer-size other-buffer) +corfu-buffer-scanning-size-limit))
(add-hook! (prog-mode text-mode conf-mode comint-mode minibuffer-setup
eshell-mode)
(add-hook! '(prog-mode-hook
text-mode-hook
conf-mode-hook
comint-mode-hook
minibuffer-setup-hook
eshell-mode-hook)
(defun +corfu-add-cape-dabbrev-h ()
(add-hook 'completion-at-point-functions #'cape-dabbrev 20 t)))
(after! dabbrev

View file

@ -161,13 +161,16 @@ orderless."
(consult-customize
consult-ripgrep consult-git-grep consult-grep
consult-bookmark consult-recent-file
+default/search-project +default/search-other-project
+default/search-project-for-symbol-at-point
+default/search-cwd +default/search-other-cwd
+default/search-notes-for-symbol-at-point
+default/search-emacsd
consult--source-recent-file consult--source-project-recent-file consult--source-bookmark
:preview-key "C-SPC")
(when (modulep! :config default)
(consult-customize
+default/search-project +default/search-other-project
+default/search-project-for-symbol-at-point
+default/search-cwd +default/search-other-cwd
+default/search-notes-for-symbol-at-point
+default/search-emacsd
:preview-key "C-SPC"))
(consult-customize
consult-theme
:preview-key (list "C-SPC" :debounce 0.5 'any))

View file

@ -1,7 +1,7 @@
;; -*- no-byte-compile: t; -*-
;;; editor/evil/packages.el
(package! evil :pin "88d073c9d03ca223564e7e8589f44ecc87c98153")
(package! evil :pin "0251080640e0da6f0eec2b7d8dd70e9c9b9915d7")
(package! evil-args :pin "a8151556f63c9d45d0c44c8a7ef9e5a542f3cdc7")
(package! evil-easymotion :pin "f96c2ed38ddc07908db7c3c11bcd6285a3e8c2e9")
(package! evil-embrace :pin "3081d37811b6a3dfaaf01d578c7ab7a746c6064d")
@ -35,4 +35,4 @@
(package! neotree)
(autoload 'neotree-make-executor "neotree" nil nil 'macro))
(package! evil-collection :pin "e0982fcbb6f1694b27074565553fac0e736a30b4"))
(package! evil-collection :pin "ca977acb83c0dd01fc57dbc6f3d3111e89f4ec9d"))

View file

@ -28,10 +28,13 @@
"k" #'log-view-msg-prev))
(after! vc-annotate
(after! vc
(set-popup-rules!
'(("^\\*vc-diff" :select nil) ; *vc-diff*
("^\\*vc-change" :select t))) ; *vc-change-log*
'(("^\\*vc-diff" :select nil :size '+popup-shrink-to-fit)
("^\\*vc-change-log" :select t))))
(after! vc-annotate
(set-evil-initial-state! 'vc-annotate-mode 'normal)
;; Clean up after itself

View file

@ -33,8 +33,11 @@ default/fallback account."
:enter-func
(lambda () (mu4e-message "Switched to %s" label))
:leave-func
(lambda () (progn (setq +mu4e-personal-addresses nil)
(mu4e-clear-caches)))
(lambda ()
(setq +mu4e-personal-addresses nil)
;; REVIEW: `mu4e-clear-caches' was removed in 1.12.2, but
;; may still be useful to users on older versions.
(if (fboundp 'mu4e-clear-caches) (mu4e-clear-caches)))
:match-func
(lambda (msg)
(when msg

View file

@ -0,0 +1,8 @@
;;; lang/factor/autoload.el -*- lexical-binding: t; -*-
;;;###autoload
(defun +factor/open-repl ()
"Open the Factor Listener."
(interactive)
(call-interactively #'run-factor)
(current-buffer))

View file

@ -5,73 +5,79 @@
:init
(after! factor-mode
(set-eval-handler! 'factor-mode #'fuel-eval-region)
(set-repl-handler! 'factor-mode #'run-factor))
(set-repl-handler! 'factor-mode #'+factor/open-repl
:persist t
:send-region #'fuel-eval-region
:send-buffer #'fuel-run-file)
(set-lookup-handlers! 'factor-mode
:definition #'fuel-edit-word-at-point
:references #'fuel-show-callers
:documentation #'fuel-help)
(map! :map factor-mode-map
:localleader
"t" #'fuel-test-vocab
"F" #'fuel-run-file
"f" #'run-factor
"a" #'fuel-refresh-all
"L" #'fuel-load-usings
"u" #'fuel-vocab-usage
"U" #'fuel-vocab-uses
(:prefix ("c" . "change")
"w" #'fuel-edit-word-at-point
"d" #'fuel-edit-word-doc-at-point
"v" #'fuel-edit-vocabulary)
(:prefix ("e" . "eval")
"d" #'fuel-eval-definition
"R" #'fuel-eval-extended-region
"r" #'fuel-eval-region)
(:prefix ("h" . "help")
"p" #'fuel-apropos
"h" #'fuel-help
"b" #'fuel-help-display-bookmarks
"v" #'fuel-help-vocab
"w" #'fuel-show-file-words
"c" #'fuel-show-callees
"e" #'fuel-stack-effect-region
"s" #'fuel-stack-effect-sexp)
(:prefix ("s" . "scaffold")
"v" #'fuel-scaffold-vocab
"h" #'fuel-scaffold-help
"t" #'fuel-scaffold-tests)
(:prefix ("r" . "refactor")
"s" #'fuel-refactor-extract-sexp
"w" #'fuel-refactor-extract-region
"v" #'fuel-refactor-extract-vocab
"i" #'fuel-refactor-inline-word
"g" #'fuel-refactor-make-generic
"u" #'fuel-update-usings
"r" #'fuel-refactor-rename-word)))
:config
(set-lookup-handlers! 'factor-mode
:definition #'fuel-edit-word-at-point
:references #'fuel-show-callers
:documentation #'fuel-help))
(set-popup-rules!
'(("^\\*fuel \\(debug\\|xref\\|messages\\)\\*$" :slot 1 :vslot -1)
("^\\*fuel help\\*$" :slot 2 :vslot 2 :select t :size 0.35)
("^\\*fuel listener\\*$" :size 0.3 :quit nil :ttl nil)))
(map! :after fuel-help
:map fuel-help-mode-map
:localleader
"e" #'fuel-help-edit
"d" #'fuel-help-delete-bookmark
"B" #'fuel-help-display-bookmarks
"n" #'fuel-help-next
"d" #'fuel-help-kill-page
"p" #'fuel-help-previous
"b" #'fuel-help-bookmark-page
"e" #'fuel-help-edit)
(map! :after fuel-help
:map fuel-help-mode-map
:localleader
"e" #'fuel-help-edit
"d" #'fuel-help-delete-bookmark
"B" #'fuel-help-display-bookmarks
"n" #'fuel-help-next
"d" #'fuel-help-kill-page
"p" #'fuel-help-previous
"b" #'fuel-help-bookmark-page
"e" #'fuel-help-edit)
(map! :after factor-mode
:map factor-mode-map
:localleader
"t" #'fuel-test-vocab
"F" #'fuel-run-file
"f" #'run-factor
"a" #'fuel-refresh-all
"L" #'fuel-load-usings
"u" #'fuel-vocab-usage
"U" #'fuel-vocab-uses
(:prefix ("c" . "change")
"w" #'fuel-edit-word-at-point
"d" #'fuel-edit-word-doc-at-point
"v" #'fuel-edit-vocabulary)
(:prefix ("e" . "eval")
"d" #'fuel-eval-definition
"R" #'fuel-eval-extended-region
"r" #'fuel-eval-region)
(:prefix ("h" . "help")
"p" #'fuel-apropos
"h" #'fuel-help
"b" #'fuel-help-display-bookmarks
"v" #'fuel-help-vocab
"w" #'fuel-show-file-words
"c" #'fuel-show-callees
"e" #'fuel-stack-effect-region
"s" #'fuel-stack-effect-sexp)
(:prefix ("s" . "scaffold")
"v" #'fuel-scaffold-vocab
"h" #'fuel-scaffold-help
"t" #'fuel-scaffold-tests)
(:prefix ("r" . "refactor")
"s" #'fuel-refactor-extract-sexp
"w" #'fuel-refactor-extract-region
"v" #'fuel-refactor-extract-vocab
"i" #'fuel-refactor-inline-word
"g" #'fuel-refactor-make-generic
"u" #'fuel-update-usings
"r" #'fuel-refactor-rename-word))
(map! :after fuel-listener
:map fuel-listener-mode-map
:localleader
"b" #'fuel-switch-to-buffer
"w" #'fuel-switch-to-buffer-other-window
"f" #'fuel-switch-to-buffer-other-frame
"e" #'fuel-edit-vocabulary
"r" #'fuel-refresh-all
"i" #'fuel-stack-mode
"h" #'fuel-help
"s" #'fuel-scaffold-vocab))
(map! :after fuel-listener
:map fuel-listener-mode-map
:localleader
"b" #'fuel-switch-to-buffer
"w" #'fuel-switch-to-buffer-other-window
"f" #'fuel-switch-to-buffer-other-frame
"e" #'fuel-edit-vocabulary
"r" #'fuel-refresh-all
"i" #'fuel-stack-mode
"h" #'fuel-help
"s" #'fuel-scaffold-vocab)

View file

@ -1,4 +1,4 @@
;; -*- no-byte-compile: t; -*-
;;; lang/factor/packages.el
(package! fuel :pin "23fcfc70753abbbdc0e86af06330d63da6e4ea64")
(package! fuel :pin "12fc9d5071e46cac7b558204db5f4f09ea56e9c7")

View file

@ -20,22 +20,23 @@ This module adds support for [[https://julialang.org/][the Julia language]] to D
- +tree-sitter ::
Leverages tree-sitter for better syntax highlighting and structural text
editing. Requires [[doom-module::tools tree-sitter]].
- +snail :: Use Snail, a development environment and REPL interaction package
for Julia in the spirit of Common Lisps SLIME and Clojures CIDER. It enables
convenient and dynamic REPL-driven development.
- +snail ::
Use Snail, a development environment and REPL interaction package for Julia in
the spirit of Common Lisps SLIME and Clojures CIDER. It enables convenient
and dynamic REPL-driven development.
** Packages
- [[doom-package:julia-mode]]
- [[doom-package:julia-repl]]
- if [[doom-package:+lsp]]
- if [[doom-module:+lsp]]
- if [[doom-module::tools lsp]]
- [[doom-package:lsp-julia]]
- [[doom-package:lsp]]
- if [[doom-module::tools lsp +eglot]]
- [[doom-package:eglot-jl]]
- [[doom-package:eglot]]
- if [[doom-package:][+snail]]
- [[doom-package:][julia-snail]]
- if [[doom-module:+snail]]
- [[doom-package:julia-snail]]
** Hacks
/No hacks documented for this module./
@ -63,8 +64,8 @@ Pkg.add("LanguageServer")
Pkg.add("SymbolServer")
#+end_src
Then configure [[doom-package:lsp-julia]] or [[doom-package:eglot-jl]] depending on whether you have enabled
[[doom-module::tools lsp]] or [[doom-module::tools lsp +eglot]], respectively:
Then configure [[doom-package:lsp-julia]] or [[doom-package:eglot-jl]] depending on whether you have enabled [[doom-module::tools
lsp]] or [[doom-module::tools lsp +eglot]], respectively:
*** =lsp-julia=
To instruct [[doom-package:lsp-julia]] not to use the built-in package:

View file

@ -53,7 +53,8 @@
:hook (+julia-repl-start . +julia-override-repl-escape-char-h)
:hook (+julia-repl-start . julia-repl-use-emacsclient)
:config
(set-popup-rule! "^\\*julia.*\\*$" :ttl nil)
(unless (modulep! +snail)
(set-popup-rule! "^\\*julia.*\\*$" :ttl nil))
(when (modulep! :ui workspaces)
(defadvice! +julia--namespace-repl-buffer-to-workspace-a (&optional executable-key suffix)

View file

@ -48,7 +48,36 @@
(if (modulep! :tools lsp +eglot)
'eglot
'lsp-mode))
(add-hook 'rustic-mode-local-vars-hook #'rustic-setup-lsp 'append))
(add-hook 'rustic-mode-local-vars-hook #'rustic-setup-lsp 'append)
;; HACK: Add @scturtle fix for signatures on hover on LSP mode. This code
;; has not been upstreamed because it depends on the exact format of the
;; response of Rust Analyzer, which is not stable enough for `lsp-mode'
;; maintainers (see emacs-lsp/lsp-mode#1740).
(unless (modulep! :tools lsp +eglot)
(defadvice! +rust--dont-cache-results-from-ra-a (fn &rest args)
:after #'lsp-eldoc-function
(when (derived-mode-p 'rust-mode 'rust-ts-mode)
(setq lsp--hover-saved-bounds nil)))
;; extract and show short signature for rust-analyzer
(cl-defmethod lsp-clients-extract-signature-on-hover (contents (_server-id (eql rust-analyzer)))
(let* ((value (if lsp-use-plists (plist-get contents :value) (gethash "value" contents)))
(groups (--partition-by (s-blank? it) (s-lines (s-trim value))))
(mod-group (cond ((s-equals? "```rust" (car (-fifth-item groups))) (-third-item groups))
((s-equals? "```rust" (car (-third-item groups))) (-first-item groups))
(t nil)))
(cmt (if (null mod-group) "" (concat " // " (cadr mod-group))))
(sig-group (cond ((s-equals? "```rust" (car (-fifth-item groups))) (-fifth-item groups))
((s-equals? "```rust" (car (-third-item groups))) (-third-item groups))
(t (-first-item groups))))
(sig (->> sig-group
(--drop-while (s-equals? "```rust" it))
(--take-while (not (s-equals? "```" it)))
(--map (s-replace-regexp "//.*" "" it))
(--map (s-trim it))
(s-join " "))))
(lsp--render-element (concat "```rust\n" sig cmt "\n```"))))))
(when (modulep! +tree-sitter)
(add-hook 'rustic-mode-local-vars-hook #'tree-sitter! 'append))

View file

@ -1,7 +1,7 @@
;; -*- no-byte-compile: t; -*-
;;; lang/scala/packages.el
(package! sbt-mode :pin "bcf8d6040021013430b39d6f6766ce1aab0b691a")
(package! sbt-mode :pin "cc68728a6ef0600aad369157b3a2d0ce56afba9b")
(package! scala-mode :pin "4c6d636b86e3bb1d95de819dc48dda92abdfbcf4")
(when (and (modulep! +lsp)

View file

@ -50,7 +50,9 @@
(defun +eval-repl-known-repls ()
"Yield the available repl functions as a list of symbols."
(seq-uniq (mapcar (pcase-lambda (`(,mode ,fn . _)) (list mode fn)) +eval-repls)))
(cl-delete-duplicates
(mapcar (lambda! ((mode fn &rest _)) (list mode fn))
+eval-repls)))
(defun +doom-pretty-mode-name (mode)
"Convert a mode name into a variant nicer for human eyes."
@ -82,15 +84,15 @@ human-readable variant of its associated major mode name."
(defun +eval-repl-prompt ()
"Prompt the user for the choice of a repl to open."
(let* ((knowns (mapcar (pcase-lambda (`(,mode ,fn)) (list (+doom-pretty-mode-name mode) fn))
(let* ((knowns (mapcar (lambda! ((mode fn)) (list (+doom-pretty-mode-name mode) fn))
(+eval-repl-known-repls)))
(founds (mapcar (lambda (fn) (list (+eval-pretty-mode-name-from-fn fn) fn))
(+eval-repl-found-repls)))
(repls (seq-uniq (append knowns founds)))
(names (mapcar #'cl-first repls))
(repls (cl-delete-duplicates (append knowns founds)))
(names (mapcar #'car repls))
(choice (or (completing-read "Open a REPL for: " names)
(user-error "Aborting"))))
(cl-second (assoc choice repls))))
(cadr (assoc choice repls))))
(defun +eval-repl-from-major-mode ()
"Fetch the repl associated with the current major mode, if there
@ -103,8 +105,7 @@ is one."
prompted for a repl choice, even if the major mode they're in
already has a known one."
(pcase-let* ((`(,fn ,plist) (+eval-repl-from-major-mode))
(fn (cond ((or prompt-p (not fn)) (+eval-repl-prompt))
(t fn)))
(fn (if (or prompt-p (not fn)) (+eval-repl-prompt) fn))
(region (when (use-region-p)
(buffer-substring-no-properties (region-beginning)
(region-end)))))

View file

@ -1,5 +1,5 @@
;; -*- no-byte-compile: t; -*-
;;; tools/pdf/packages.el
(package! pdf-tools :pin "93e74924517d39483b432d6c3c9b8f8b8f0eb50c")
(package! pdf-tools :pin "a1048bceb2bd3f635437b0f2bfac27cae8c2dabc")
(package! saveplace-pdf-view :pin "ee95460cd934080338f03a16f95b549577425216")

View file

@ -1,5 +1,14 @@
;;; ui/tabs/config.el -*- lexical-binding: t; -*-
(defcustom +tabs-buffer-update-groups-delay 0.1
"Minimum wait time (in seconds) before tab groups are recalculated."
:type 'float
:group 'doom)
;;
;;; Packages
(use-package! centaur-tabs
:hook (doom-first-file . centaur-tabs-mode)
:init
@ -20,7 +29,20 @@
(defun +tabs-disable-centaur-tabs-mode-maybe-h ()
"Disable `centaur-tabs-mode' in current buffer."
(when (centaur-tabs-mode-on-p)
(centaur-tabs-local-mode)))))
(centaur-tabs-local-mode))))
;; HACK: `centaur-tabs-buffer-update-groups' is both expensive and called too
;; frequently. There really is no reason to call it more than 10 times per
;; second, as buffers rarely change groups more frequently than that.
(let ((time (float-time)))
(defadvice! +tabs--rate-limit-buffer-update-groups-a (fn)
:around #'centaur-tabs-buffer-update-groups
(let ((now (float-time)))
(if-let ((buf (and (< now (+ time +tabs-buffer-update-groups-delay))
(assq (current-buffer) centaur-tabs--buffers))))
(car (nth 2 buf))
(setq time now)
(funcall fn))))))
;; TODO tab-bar-mode (emacs 27)

View file

@ -84,9 +84,10 @@ stored in `persp-save-dir'.")
;; HACK Fix #319: the warnings buffer gets swallowed when creating
;; `+workspaces-main', so display it ourselves, if it exists.
(when-let (warnings (get-buffer "*Warnings*"))
(save-excursion
(display-buffer-in-side-window
warnings '((window-height . shrink-window-if-larger-than-buffer))))))))
(unless (get-buffer-window warnings)
(save-excursion
(display-buffer-in-side-window
warnings '((window-height . shrink-window-if-larger-than-buffer)))))))))
(defun +workspaces-init-persp-mode-h ()
(cond (persp-mode
;; `uniquify' breaks persp-mode. It renames old buffers, which causes