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

@ -250,8 +250,7 @@ tell you about it. Very annoying. This prevents that."
auto-mode-alist auto-mode-alist
'(("/LICENSE\\'" . text-mode) '(("/LICENSE\\'" . text-mode)
("\\.log\\'" . text-mode) ("\\.log\\'" . text-mode)
("rc\\'" . conf-mode) ("rc\\'" . conf-mode)))
("\\.\\(?:hex\\|nes\\)\\'" . hexl-mode)))
;; ;;

View file

@ -143,14 +143,8 @@
(setq selection-coding-system 'utf-8)) (setq selection-coding-system 'utf-8))
;;; Support for more file extensions ;;; Support for Doom-specific file extensions
;; Add support for additional file extensions. (add-to-list 'auto-mode-alist '("/\\.doom\\(?:rc\\|project\\|module\\|profile\\)\\'" . emacs-lisp-mode))
(dolist (entry '(("/\\.doom\\(?:rc\\|project\\|module\\|profile\\)\\'" . emacs-lisp-mode)
("/LICENSE\\'" . text-mode)
("\\.log\\'" . text-mode)
("rc\\'" . conf-mode)
("\\.\\(?:hex\\|nes\\)\\'" . hexl-mode)))
(push entry auto-mode-alist))
;; ;;

View file

@ -484,17 +484,50 @@ If FORCE-P, overwrite the destination file if it exists, without confirmation."
file)))) file))))
;;;###autoload ;;;###autoload
(defun doom/sudo-find-file (file) (defun doom/sudo-find-file (file &optional arg)
"Open FILE as root." "Open FILE as root.
(interactive "FOpen file as root: ")
;; HACK: Disable auto-save in temporary tramp buffers because it could trigger This will prompt you to save the current buffer, unless prefix ARG is given, in
;; processes that hang silently in the background, making those buffers which case it will save it without prompting."
;; inoperable for the rest of that session (Tramp caches them). (interactive
(list (read-file-name "Open file as root: ")
current-prefix-arg))
;; HACK: Teach `save-place' to treat the new "remote" buffer as if it were
;; visiting the same local file (because it is), and preserve the cursor
;; position as usual.
(letf! ((defun remote-local-name (path)
(if path (or (file-remote-p path 'localname) path)))
(defmacro with-local-name (&rest body)
`(when save-place-mode
(let ((buffer-file-name (remote-local-name buffer-file-name))
(default-directory (remote-local-name default-directory)))
,@body))))
(let ((window-start (window-start))
(buffer (current-buffer)))
(when (and buffer-file-name (file-equal-p buffer-file-name file))
(when (buffer-modified-p)
(save-some-buffers arg (lambda () (eq (current-buffer) buffer))))
(with-local-name (save-place-to-alist)))
(prog1
;; HACK: Disable auto-save in temporary tramp buffers because it could
;; trigger processes that hang silently in the background, making
;; those buffers inoperable for the rest of that session (Tramp
;; caches them).
(let ((auto-save-default nil) (let ((auto-save-default nil)
;; REVIEW: use only these when we drop 28 support ;; REVIEW: use only these when we drop 28 support
(remote-file-name-inhibit-auto-save t) (remote-file-name-inhibit-auto-save t)
(remote-file-name-inhibit-auto-save-visited t)) (remote-file-name-inhibit-auto-save-visited t)
(find-file (doom--sudo-file-path (expand-file-name file))))) ;; Prevent redundant work
save-place-mode)
(find-file (doom--sudo-file-path (expand-file-name file))))
;; Record of the cursor's old position if it isn't at BOB (indicating
;; this buffer was already open), in case the user wishes to go to it.
(unless (bobp)
(doom-set-jump-h)
;; save-place-find-file-hook requires point be a BOB to do its thang.
(goto-char (point-min)))
(with-local-name (save-place-find-file-hook))
(set-window-start nil window-start)))))
;;;###autoload ;;;###autoload
(defun doom/sudo-this-file () (defun doom/sudo-this-file ()
@ -528,9 +561,17 @@ If FORCE-P, overwrite the destination file if it exists, without confirmation."
(defun doom/remove-recent-file (file) (defun doom/remove-recent-file (file)
"Remove FILE from your recently-opened-files list." "Remove FILE from your recently-opened-files list."
(interactive (interactive
(list (completing-read "Remove recent file: " recentf-list (list (completing-read "Remove recent file: "
(lambda (string predicate action)
(if (eq action 'metadata)
'(metadata
(display-sort-function . identity)
(cycle-sort-function . identity)
(category . file))
(complete-with-action
action recentf-list string predicate)))
nil t))) nil t)))
(setq recentf-list (delete file recentf-list)) (setq recentf-list (delete (recentf-expand-file-name file) recentf-list))
(recentf-save-list) (recentf-save-list)
(message "Removed %S from `recentf-list'" (abbreviate-file-name file))) (message "Removed %S from `recentf-list'" (abbreviate-file-name file)))

View file

@ -220,6 +220,14 @@ To disable idle (as-you-type) completion, unset ~corfu-auto~:
(setq corfu-auto nil)) (setq corfu-auto nil))
#+end_src #+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 ** Adding CAPFs to a mode
To add other CAPFs on a mode-per-mode basis, put either of the following in your To add other CAPFs on a mode-per-mode basis, put either of the following in your
~config.el~: ~config.el~:

View file

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

View file

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

View file

@ -1,7 +1,7 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; editor/evil/packages.el ;;; editor/evil/packages.el
(package! evil :pin "88d073c9d03ca223564e7e8589f44ecc87c98153") (package! evil :pin "0251080640e0da6f0eec2b7d8dd70e9c9b9915d7")
(package! evil-args :pin "a8151556f63c9d45d0c44c8a7ef9e5a542f3cdc7") (package! evil-args :pin "a8151556f63c9d45d0c44c8a7ef9e5a542f3cdc7")
(package! evil-easymotion :pin "f96c2ed38ddc07908db7c3c11bcd6285a3e8c2e9") (package! evil-easymotion :pin "f96c2ed38ddc07908db7c3c11bcd6285a3e8c2e9")
(package! evil-embrace :pin "3081d37811b6a3dfaaf01d578c7ab7a746c6064d") (package! evil-embrace :pin "3081d37811b6a3dfaaf01d578c7ab7a746c6064d")
@ -35,4 +35,4 @@
(package! neotree) (package! neotree)
(autoload 'neotree-make-executor "neotree" nil nil 'macro)) (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)) "k" #'log-view-msg-prev))
(after! vc-annotate (after! vc
(set-popup-rules! (set-popup-rules!
'(("^\\*vc-diff" :select nil) ; *vc-diff* '(("^\\*vc-diff" :select nil :size '+popup-shrink-to-fit)
("^\\*vc-change" :select t))) ; *vc-change-log* ("^\\*vc-change-log" :select t))))
(after! vc-annotate
(set-evil-initial-state! 'vc-annotate-mode 'normal) (set-evil-initial-state! 'vc-annotate-mode 'normal)
;; Clean up after itself ;; Clean up after itself

View file

@ -33,8 +33,11 @@ default/fallback account."
:enter-func :enter-func
(lambda () (mu4e-message "Switched to %s" label)) (lambda () (mu4e-message "Switched to %s" label))
:leave-func :leave-func
(lambda () (progn (setq +mu4e-personal-addresses nil) (lambda ()
(mu4e-clear-caches))) (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 :match-func
(lambda (msg) (lambda (msg)
(when 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,27 +5,15 @@
:init :init
(after! factor-mode (after! factor-mode
(set-eval-handler! 'factor-mode #'fuel-eval-region) (set-eval-handler! 'factor-mode #'fuel-eval-region)
(set-repl-handler! 'factor-mode #'run-factor)) (set-repl-handler! 'factor-mode #'+factor/open-repl
:config :persist t
:send-region #'fuel-eval-region
:send-buffer #'fuel-run-file)
(set-lookup-handlers! 'factor-mode (set-lookup-handlers! 'factor-mode
:definition #'fuel-edit-word-at-point :definition #'fuel-edit-word-at-point
:references #'fuel-show-callers :references #'fuel-show-callers
:documentation #'fuel-help)) :documentation #'fuel-help)
(map! :map factor-mode-map
(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 :localleader
"t" #'fuel-test-vocab "t" #'fuel-test-vocab
"F" #'fuel-run-file "F" #'fuel-run-file
@ -62,9 +50,26 @@
"i" #'fuel-refactor-inline-word "i" #'fuel-refactor-inline-word
"g" #'fuel-refactor-make-generic "g" #'fuel-refactor-make-generic
"u" #'fuel-update-usings "u" #'fuel-update-usings
"r" #'fuel-refactor-rename-word)) "r" #'fuel-refactor-rename-word)))
:config
(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-listener (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-listener
:map fuel-listener-mode-map :map fuel-listener-mode-map
:localleader :localleader
"b" #'fuel-switch-to-buffer "b" #'fuel-switch-to-buffer
@ -74,4 +79,5 @@
"r" #'fuel-refresh-all "r" #'fuel-refresh-all
"i" #'fuel-stack-mode "i" #'fuel-stack-mode
"h" #'fuel-help "h" #'fuel-help
"s" #'fuel-scaffold-vocab) "s" #'fuel-scaffold-vocab))

View file

@ -1,4 +1,4 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; lang/factor/packages.el ;;; 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 :: - +tree-sitter ::
Leverages tree-sitter for better syntax highlighting and structural text Leverages tree-sitter for better syntax highlighting and structural text
editing. Requires [[doom-module::tools tree-sitter]]. editing. Requires [[doom-module::tools tree-sitter]].
- +snail :: Use Snail, a development environment and REPL interaction package - +snail ::
for Julia in the spirit of Common Lisps SLIME and Clojures CIDER. It enables Use Snail, a development environment and REPL interaction package for Julia in
convenient and dynamic REPL-driven development. the spirit of Common Lisps SLIME and Clojures CIDER. It enables convenient
and dynamic REPL-driven development.
** Packages ** Packages
- [[doom-package:julia-mode]] - [[doom-package:julia-mode]]
- [[doom-package:julia-repl]] - [[doom-package:julia-repl]]
- if [[doom-package:+lsp]] - if [[doom-module:+lsp]]
- if [[doom-module::tools lsp]] - if [[doom-module::tools lsp]]
- [[doom-package:lsp-julia]] - [[doom-package:lsp-julia]]
- [[doom-package:lsp]] - [[doom-package:lsp]]
- if [[doom-module::tools lsp +eglot]] - if [[doom-module::tools lsp +eglot]]
- [[doom-package:eglot-jl]] - [[doom-package:eglot-jl]]
- [[doom-package:eglot]] - [[doom-package:eglot]]
- if [[doom-package:][+snail]] - if [[doom-module:+snail]]
- [[doom-package:][julia-snail]] - [[doom-package:julia-snail]]
** Hacks ** Hacks
/No hacks documented for this module./ /No hacks documented for this module./
@ -63,8 +64,8 @@ Pkg.add("LanguageServer")
Pkg.add("SymbolServer") Pkg.add("SymbolServer")
#+end_src #+end_src
Then configure [[doom-package:lsp-julia]] or [[doom-package:eglot-jl]] depending on whether you have enabled Then configure [[doom-package:lsp-julia]] or [[doom-package:eglot-jl]] depending on whether you have enabled [[doom-module::tools
[[doom-module::tools lsp]] or [[doom-module::tools lsp +eglot]], respectively: lsp]] or [[doom-module::tools lsp +eglot]], respectively:
*** =lsp-julia= *** =lsp-julia=
To instruct [[doom-package:lsp-julia]] not to use the built-in package: 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-override-repl-escape-char-h)
:hook (+julia-repl-start . julia-repl-use-emacsclient) :hook (+julia-repl-start . julia-repl-use-emacsclient)
:config :config
(set-popup-rule! "^\\*julia.*\\*$" :ttl nil) (unless (modulep! +snail)
(set-popup-rule! "^\\*julia.*\\*$" :ttl nil))
(when (modulep! :ui workspaces) (when (modulep! :ui workspaces)
(defadvice! +julia--namespace-repl-buffer-to-workspace-a (&optional executable-key suffix) (defadvice! +julia--namespace-repl-buffer-to-workspace-a (&optional executable-key suffix)

View file

@ -48,7 +48,36 @@
(if (modulep! :tools lsp +eglot) (if (modulep! :tools lsp +eglot)
'eglot 'eglot
'lsp-mode)) '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) (when (modulep! +tree-sitter)
(add-hook 'rustic-mode-local-vars-hook #'tree-sitter! 'append)) (add-hook 'rustic-mode-local-vars-hook #'tree-sitter! 'append))

View file

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

View file

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

View file

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

View file

@ -1,5 +1,14 @@
;;; ui/tabs/config.el -*- lexical-binding: t; -*- ;;; 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 (use-package! centaur-tabs
:hook (doom-first-file . centaur-tabs-mode) :hook (doom-first-file . centaur-tabs-mode)
:init :init
@ -20,7 +29,20 @@
(defun +tabs-disable-centaur-tabs-mode-maybe-h () (defun +tabs-disable-centaur-tabs-mode-maybe-h ()
"Disable `centaur-tabs-mode' in current buffer." "Disable `centaur-tabs-mode' in current buffer."
(when (centaur-tabs-mode-on-p) (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) ;; 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 ;; HACK Fix #319: the warnings buffer gets swallowed when creating
;; `+workspaces-main', so display it ourselves, if it exists. ;; `+workspaces-main', so display it ourselves, if it exists.
(when-let (warnings (get-buffer "*Warnings*")) (when-let (warnings (get-buffer "*Warnings*"))
(unless (get-buffer-window warnings)
(save-excursion (save-excursion
(display-buffer-in-side-window (display-buffer-in-side-window
warnings '((window-height . shrink-window-if-larger-than-buffer)))))))) warnings '((window-height . shrink-window-if-larger-than-buffer)))))))))
(defun +workspaces-init-persp-mode-h () (defun +workspaces-init-persp-mode-h ()
(cond (persp-mode (cond (persp-mode
;; `uniquify' breaks persp-mode. It renames old buffers, which causes ;; `uniquify' breaks persp-mode. It renames old buffers, which causes