diff --git a/bin/doomscript b/bin/doomscript index dd0a22285..490dbeb7d 100755 --- a/bin/doomscript +++ b/bin/doomscript @@ -36,25 +36,25 @@ emacs="$EMACS -q --no-site-file --batch" # on it to provide TMPDIR. And can second as a quick existence check for Emacs. TMPDIR="${TMPDIR:-$($emacs --eval '(princ (temporary-file-directory))' 2>/dev/null)}" if [ -z "$TMPDIR" ]; then - >&2 echo "Error: failed to run Emacs with command '$EMACS'" - >&2 echo - >&2 echo "Are you sure Emacs is installed and in your \$PATH?" + echo "Error: failed to run Emacs with command '$EMACS'" + echo + echo "Are you sure Emacs is installed and in your \$PATH?" exit 1 -fi +fi >&2 # Doom respects $EMACSDIR to tell it where Doom lives. If it fails, then this is # either isn't bash, or it's a posix shell being directly sourced with sh, which # is unsupported. export EMACSDIR="${EMACSDIR:-$(CDPATH='' cd -- "$(dirname -- "${BASH_SOURCE:-$0}")/.." && pwd)}" if [ ! -f "$EMACSDIR/early-init.el" ]; then - >&2 echo "Error: cannot load $EMACSDIR/early-init.el." - >&2 echo - >&2 echo "Either the file doesn't exist (indicating a broken or missing Doom install)" - >&2 echo "or that doomscript is being source directly (which is unsupported)." - >&2 echo - >&2 echo "Set \$EMACSDIR to the path of an existing Doom installation." + echo "Error: cannot load $EMACSDIR/early-init.el." + echo + echo "Either the file doesn't exist (indicating a broken or missing Doom install)" + echo "or that doomscript is being source directly (which is unsupported)." + echo + echo "Set \$EMACSDIR to the path of an existing Doom installation." exit 1 -fi +fi >&2 # Some state that Doom's CLI framework needs to know about the terminal. Read # the comments at the top of bin/doom for explanations. export __DOOMPID="${__DOOMPID:-$$}" @@ -75,8 +75,8 @@ $emacs --load "$EMACSDIR/early-init" \ -- "$@" exit=$? -# To simulate execve syscalls, Doom generates a temporary exit-script if a -# Doomscript returns a 254 exit code. +# To simulate execve syscalls (which replaces the running process), Doom +# generates a temporary exit-script if a Doomscript returns a 254 exit code. if [ "${exit:-0}" -eq 254 ]; then # The user may have a noexec flag set on /tmp, so the exit-script should be # passed to /bin/sh rather than executed directly. diff --git a/lisp/demos.org b/lisp/demos.org index c79910811..3572ce417 100644 --- a/lisp/demos.org +++ b/lisp/demos.org @@ -64,8 +64,8 @@ are great, but this file exists to add demos for Doom's API and beyond. (after! helm ...) ;; An unquoted list of package symbols (i.e. BODY is evaluated once both magit -;; and git-gutter have loaded) -(after! (magit git-gutter) ...) +;; and diff-hl have loaded) +(after! (magit diff-hl) ...) ;; An unquoted, nested list of compound package lists, using any combination of ;; :or/:any and :and/:all diff --git a/lisp/doom-editor.el b/lisp/doom-editor.el index 60f8a2bff..a6c23f051 100644 --- a/lisp/doom-editor.el +++ b/lisp/doom-editor.el @@ -730,11 +730,12 @@ on." ;; a less intrusive `delete-trailing-whitespaces' on save :hook (doom-first-buffer . ws-butler-global-mode) :config - ;; ws-butler normally preserves whitespace in the buffer (but strips it from - ;; the written file). While sometimes convenient, this behavior is not - ;; intuitive. To the average user it looks like whitespace cleanup is failing, - ;; which causes folks to redundantly install their own. - (setq ws-butler-keep-whitespace-before-point nil)) + (pushnew! ws-butler-global-exempt-modes + 'special-mode + 'comint-mode + 'term-mode + 'eshell-mode + 'diff-mode)) (provide 'doom-editor) ;;; doom-editor.el ends here diff --git a/lisp/doom-keybinds.el b/lisp/doom-keybinds.el index 802993642..a7d64b27f 100644 --- a/lisp/doom-keybinds.el +++ b/lisp/doom-keybinds.el @@ -87,7 +87,7 @@ and Emacs states, and for non-evil users.") ;; 1. Quit active states; e.g. highlights, searches, snippets, iedit, ;; multiple-cursors, recording macros, etc. ;; 2. Close popup windows remotely (if it is allowed to) -;; 3. Refresh buffer indicators, like git-gutter and flycheck +;; 3. Refresh buffer indicators, like diff-hl and flycheck ;; 4. Or fall back to `keyboard-quit' ;; ;; And it should do these things incrementally, rather than all at once. And it diff --git a/lisp/doom-lib.el b/lisp/doom-lib.el index 8f87b885b..587e13e00 100644 --- a/lisp/doom-lib.el +++ b/lisp/doom-lib.el @@ -641,8 +641,8 @@ is: (after! (:and package-a package-b ...) BODY...) (after! (:and package-a (:or package-b package-c) ...) BODY...) - An unquoted list of package symbols (i.e. BODY is evaluated once both magit - and git-gutter have loaded) - (after! (magit git-gutter) BODY...) + and diff-hl have loaded) + (after! (magit diff-hl) BODY...) If :or/:any/:and/:all are omitted, :and/:all are implied. This emulates `eval-after-load' with a few key differences: diff --git a/lisp/doom-modules.el b/lisp/doom-modules.el index b0c1a58d2..b2d88846a 100644 --- a/lisp/doom-modules.el +++ b/lisp/doom-modules.el @@ -351,9 +351,9 @@ If ENABLED-ONLY, return nil if the containing module isn't enabled." (and (or (null enabled-only) (doom-module-p category module)) (cons category module)))) - ((file-in-directory-p path doom-core-dir) + ((string-match (concat "^" (regexp-quote doom-core-dir)) path) (cons :core nil)) - ((file-in-directory-p path doom-user-dir) + ((string-match (concat "^" (regexp-quote doom-user-dir)) path) (cons :user nil)))))) (defun doom-module-load-path (&optional module-load-path) diff --git a/lisp/doom-ui.el b/lisp/doom-ui.el index 0028f1636..e452b22de 100644 --- a/lisp/doom-ui.el +++ b/lisp/doom-ui.el @@ -242,7 +242,7 @@ windows, switch to `doom-fallback-buffer'. Otherwise, delegate to original ;;; Fringes ;; Reduce the clutter in the fringes; we'd like to reserve that space for more -;; useful information, like git-gutter and flycheck. +;; useful information, like diff-hl and flycheck. (setq indicate-buffer-boundaries nil indicate-empty-lines nil) diff --git a/lisp/doom.el b/lisp/doom.el index 81f09466e..eb6f3a215 100644 --- a/lisp/doom.el +++ b/lisp/doom.el @@ -79,7 +79,7 @@ (when (< emacs-major-version 27) (user-error (concat - "Detected Emacs " emacs-version ", but Doom requires 27.1 or newer (28.1 is\n\n" + "Detected Emacs " emacs-version ", but Doom requires 27.1 or newer (29.3 is\n\n" "recommended). The current Emacs executable in use is:\n\n " (car command-line-args) "\n\nA guide for installing a newer version of Emacs can be found at:\n\n " (format "https://docs.doomemacs.org/-/install/%s" @@ -201,7 +201,7 @@ "Current version of Doom Emacs core.") ;; DEPRECATED: Remove these when the modules are moved out of core. -(defconst doom-modules-version "24.04.0-pre" +(defconst doom-modules-version "24.07.0-pre" "Current version of Doom Emacs.") (defvar doom-init-time nil diff --git a/lisp/lib/autoloads.el b/lisp/lib/autoloads.el index 9dec16be5..6a31f3041 100644 --- a/lisp/lib/autoloads.el +++ b/lisp/lib/autoloads.el @@ -169,7 +169,6 @@ non-nil, treat FILES as pre-generated autoload files instead." (when (and (not (seq-find (doom-rpartial #'string-match-p file) exclude)) (file-readable-p file)) (doom-log "loaddefs:scan: %s" file) - (setq file (file-truename file)) (with-temp-buffer (if literal (insert-file-contents file) diff --git a/lisp/lib/files.el b/lisp/lib/files.el index 6690820dc..5a9d37d83 100644 --- a/lisp/lib/files.el +++ b/lisp/lib/files.el @@ -538,7 +538,7 @@ which case it will save it without prompting." (when (or (derived-mode-p 'dired-mode) (derived-mode-p 'wdired-mode)) default-directory) - (user-error "Cannot determine the file path of the current buffer")))) + (user-error "Current buffer isn't visiting a file")))) ;;;###autoload (defun doom/sudo-save-buffer () diff --git a/lisp/lib/fonts.el b/lisp/lib/fonts.el index 0855bec5d..04f289f12 100644 --- a/lisp/lib/fonts.el +++ b/lisp/lib/fonts.el @@ -29,7 +29,6 @@ The font will be normalized (i.e. :weight, :slant, and :width will set to FONT can be a `font-spec', a font object, an XFT font string, or an XLFD font string." - (cl-check-type font (or font string vector)) (when (and (stringp font) (string-prefix-p "-" font)) (setq font (x-decompose-font-name font))) @@ -45,7 +44,8 @@ string." ((vectorp font) (dolist (i '(1 2 3) (x-compose-font-name font)) (unless (aref font i) - (aset font i "normal")))))) + (aset font i "normal")))) + ((signal 'wrong-type-of-argument (list '(font string vectorp) font))))) (font (x-resolve-font-name font)) (font (font-spec :name font))) (unless (font-get font :size) diff --git a/lisp/lib/packages.el b/lisp/lib/packages.el index 0b86a9085..eb974b51e 100644 --- a/lisp/lib/packages.el +++ b/lisp/lib/packages.el @@ -232,10 +232,12 @@ Must be run from a magit diff buffer." :test #'equal))) (save-excursion (while (re-search-forward "^-" nil t) - (cl-pushnew (read-package) before :test #'equal))) + (when-let (pkg (read-package)) + (cl-pushnew pkg before :test #'equal)))) (save-excursion (while (re-search-forward "^+" nil t) - (cl-pushnew (read-package) after :test #'equal))) + (when-let (pkg (read-package)) + (cl-pushnew pkg after :test #'equal)))) (unless (= (length before) (length after)) (user-error "Uneven number of packages being bumped")) (dolist (p1 before) diff --git a/lisp/lib/print.el b/lisp/lib/print.el index e74c7fce6..fae92605e 100644 --- a/lisp/lib/print.el +++ b/lisp/lib/print.el @@ -92,8 +92,8 @@ and `format!' into colored output, where COLOR is any car of this list (or (not (stringp str)) (string-blank-p str)) str - (let ((dir (or dir (file-truename default-directory))) - (str (file-truename str))) + (let* ((dir (or dir default-directory)) + (str (expand-file-name str dir))) (if (file-in-directory-p str dir) (file-relative-name str dir) (abbreviate-file-name str)))))) @@ -118,6 +118,12 @@ Any of these classes can be called like functions from within `format!' and Accepts `ansi' and `text-properties'. `nil' means don't render styles at all.") +(defvar doom-print-stream nil + "The default value for `standard-output' for Doom's print API. + +If non-nil, this is used instead of `standard-output' because changes to that +variable don't survive translation units.") + (defvar doom-print-level 'notice "The current, default logging level.") @@ -143,11 +149,11 @@ Accepts `ansi' and `text-properties'. `nil' means don't render styles at all.") (format nil) (level doom-print-level) (newline t) - (stream standard-output)) + (stream (or doom-print-stream standard-output))) "Print OUTPUT to stdout. Unlike `message', this: -- Respects the value of `standard-output'. +- Respects the value of `standard-output' (if `doom-print-stream' is nil). - Indents according to `doom-print-indent' (if FORMAT is non-nil). - Prints to stdout instead of stderr in batch mode. - Recognizes more terminal escape codes (only in batch mode). @@ -236,7 +242,7 @@ based on the print level of the message. For example: `(letf! ((,sym ,streamspec) (standard-output (doom-print--redirect-standard-output ,sym t)) (#'message (doom-print--redirect-message ,sym (if noninteractive 'debug 'notice))) - (doom-print--output-depth (1+ doom-print--output-depth))) + (doom-print-stream standard-output)) ,@body))) @@ -260,8 +266,8 @@ based on the print level of the message. For example: (get (car spec) 'print-level))) (cadr spec))))) -(defun doom-print--redirect-standard-output (streamspec level) - (let ((old standard-output) +(defun doom-print--redirect-standard-output (streamspec level &optional old-stream) + (let ((old (or old-stream standard-output)) (streams (doom-print--redirect-streams streamspec level))) (lambda (ch) (let ((str (char-to-string ch))) @@ -273,7 +279,8 @@ based on the print level of the message. For example: (defun doom-print--redirect-message (streamspec level) (let ((old (symbol-function #'message)) - (streams (doom-print--redirect-streams streamspec level))) + (streams (doom-print--redirect-streams streamspec level)) + (doom-print--output-depth (1+ doom-print--output-depth))) (lambda (message &rest args) (when message (let ((output (apply #'doom-print--format message args))) diff --git a/lisp/packages.el b/lisp/packages.el index b320c3829..5af323dee 100644 --- a/lisp/packages.el +++ b/lisp/packages.el @@ -29,20 +29,16 @@ ;; doom-editor.el (package! better-jumper :pin "47622213783ece37d5337dc28d33b530540fc319") -(package! dtrt-indent :pin "5d1b44f9a1a484ca229cc14f8062609a10ef4891") -(package! helpful :pin "a32a5b3d959a7fccf09a71d97b3d7c888ac31c69") +(package! dtrt-indent :pin "939c5e374ac0175bb7d561542e22e47a72d04aa8") +(package! helpful :pin "4ba24cac9fb14d5fdc32582cd947572040e82b2c") (package! pcre2el :pin "380723b2701cceb75c266440fb8db918f3340d50") -(package! smartparens :pin "a5c68cac1bea737b482a37aa92de4f6efbf7580b") -(package! ws-butler - ;; Use my fork of ws-butler, which has a few choice improvements and - ;; optimizations (the original has been abandoned). - :recipe (:host github :repo "hlissner/ws-butler") - :pin "572a10c11b6cb88293de48acbb59a059d36f9ba5") +(package! smartparens :pin "f7cf316715e5018186c226aab8242c9e5ce131c8") +(package! ws-butler :pin "e3a38d93e01014cd47bf5af4924459bd145fd7c4") ;; doom-projects.el (package! projectile :pin "0163b335a18af0f077a474d4dc6b36e22b5e3274") -(package! project :pin "93aa1872e93a681a44cae03fecb8df4101719897") +(package! project :pin "bf4c3cfcfbf3423d79170aa880a1abb332ed942e") ;; doom-keybinds.el (package! general :pin "826bf2b97a0fb4a34c5eb96ec2b172d682fd548f") -(package! which-key :pin "1e89fa000e9ba9549f15ef57abccd118d5f2fe1a") +(package! which-key :pin "ed389312170df955aaf10c2e120cc533ed5c509e") diff --git a/modules/completion/company/packages.el b/modules/completion/company/packages.el index c4718a4aa..a0ad69ad0 100644 --- a/modules/completion/company/packages.el +++ b/modules/completion/company/packages.el @@ -1,7 +1,7 @@ ;; -*- no-byte-compile: t; -*- ;;; completion/company/packages.el -(package! company :pin "b0a522ac5bf8ba3d2f4f22e3aa846a4f82978a16") +(package! company :pin "1a0fc12a9c3d25e28c22f319e7b097f435b1c27d") (package! company-dict :pin "cd7b8394f6014c57897f65d335d6b2bd65dab1f4") (when (modulep! +childframe) (package! company-box :pin "c4f2e243fba03c11e46b1600b124e036f2be7691")) diff --git a/modules/completion/corfu/packages.el b/modules/completion/corfu/packages.el index 2dee62c70..9bc55ab8f 100644 --- a/modules/completion/corfu/packages.el +++ b/modules/completion/corfu/packages.el @@ -1,8 +1,8 @@ ;; -*- no-byte-compile: t; -*- ;;; completion/corfu/packages.el -(package! corfu :pin "35cd5a0f3cba89766072e3e933d1fe2ee02f2289") -(package! cape :pin "e01e4430234850263d326ad4521849cd46e64059") +(package! corfu :pin "cdc3e13ad312f5f12b3f78f842fff0b398eb4473") +(package! cape :pin "f61da109a9e4491614938c300291060fd8855c1b") (when (modulep! +icons) (package! nerd-icons-corfu :pin "7077bb76fefc15aed967476406a19dc5c2500b3c")) (when (and (not (modulep! :completion vertico)) @@ -14,4 +14,4 @@ (when (modulep! :os tty) (package! corfu-terminal :pin "501548c3d51f926c687e8cd838c5865ec45d03cc")) (when (modulep! :editor snippets) - (package! yasnippet-capf :pin "9043f8275176a8f198ce8e81fadab1870fa165bb")) + (package! yasnippet-capf :pin "744dedb7837d0c7e07817d36ec752a0cd813f55c")) diff --git a/modules/completion/helm/packages.el b/modules/completion/helm/packages.el index d7a7ae7de..86826dea7 100644 --- a/modules/completion/helm/packages.el +++ b/modules/completion/helm/packages.el @@ -1,7 +1,7 @@ ;; -*- no-byte-compile: t; -*- ;;; completion/helm/packages.el -(package! helm :pin "28f62344fed0d8be0bcef5aa8a018ba58198ba0c") +(package! helm :pin "f8949afd9b44de4a8149874ef40e1250826d40bd") (package! helm-company :pin "4622b82353220ee6cc33468f710fa5b6b253b7f1") (package! helm-c-yasnippet :pin "c5880e740da101fde7a995e94a7b16c330e57583") (package! helm-descbinds :pin "ca03f02da4e54a1d0a2d5498b86e1639aa808d8c") diff --git a/modules/completion/ivy/packages.el b/modules/completion/ivy/packages.el index beafb3133..244452ed4 100644 --- a/modules/completion/ivy/packages.el +++ b/modules/completion/ivy/packages.el @@ -1,7 +1,7 @@ ;; -*- no-byte-compile: t; -*- ;;; completion/ivy/packages.el -(package! swiper :pin "1f88e5499046d166d22bf733a3877aec3b424947") +(package! swiper :pin "2a25a6fb5b081cb141c5eccac8ee58ab1feeb747") (package! ivy) (package! ivy-hydra) (package! ivy-avy) @@ -13,7 +13,7 @@ (package! wgrep :pin "208b9d01cfffa71037527e3a324684b3ce45ddc4") (if (modulep! +prescient) - (package! ivy-prescient :pin "c39bf07c56b427bf41aafd7d20eaef5cf3c312b5") + (package! ivy-prescient :pin "0765418e4362099db8788fcb745ce9b7602aa001") (when (modulep! +fuzzy) (package! flx :pin "4b1346eb9a8a76ee9c9dede69738c63ad97ac5b6"))) @@ -21,4 +21,4 @@ (package! ivy-posframe :pin "533a8e368fcabfd534761a5c685ce713376fa594")) (when (modulep! +icons) - (package! nerd-icons-ivy-rich :pin "7197614b27fd562e64b11c91d41bed4443aded90")) + (package! nerd-icons-ivy-rich :pin "86a896bb48fed543993f96e4b288047aa7e013c9")) diff --git a/modules/completion/vertico/packages.el b/modules/completion/vertico/packages.el index e93edda1b..3f8583b27 100644 --- a/modules/completion/vertico/packages.el +++ b/modules/completion/vertico/packages.el @@ -1,19 +1,19 @@ ;; -*- no-byte-compile: t; -*- ;;; completion/vertico/packages.el -(package! vertico :pin "68e51fda552a2f91caab69e83564bc91275b09b1") +(package! vertico :pin "ba650a7ab90d66686ba787937ac9e71f749c598e") -(package! orderless :pin "ac4aeb66f331f4c4a430d5556071e33177304c37") +(package! orderless :pin "53f5204ad3f541e11eb6eeb9b86584964b7a3678") -(package! consult :pin "c87b0bf06de0c3cb60bc8d257c770cb981ddcd19") -(package! consult-dir :pin "3f5f4b71ebe819392cb090cda71bd39a93bd830a") +(package! consult :pin "fe4852280006e61be7f1374d021ee06155ce5a26") +(package! consult-dir :pin "15891383f34d43acc5bb82bda92239b1f54cf178") (when (and (modulep! :checkers syntax) (not (modulep! :checkers syntax +flymake))) (package! consult-flycheck :pin "754f5497d827f7d58009256a21af614cc44378a3")) -(package! embark :pin "d3c9d1b4c890cf365846cc2b418f37341999e79f") -(package! embark-consult :pin "d3c9d1b4c890cf365846cc2b418f37341999e79f") +(package! embark :pin "9c166c4b96a0b1e85401bcc6fb95ce021e7b5013") +(package! embark-consult :pin "9c166c4b96a0b1e85401bcc6fb95ce021e7b5013") -(package! marginalia :pin "3275d1f85cb020280979a050054b843f7563aea2") +(package! marginalia :pin "da72da4622c7b38741e6968678028f7e0564816c") (package! wgrep :pin "208b9d01cfffa71037527e3a324684b3ce45ddc4") diff --git a/modules/editor/evil/+commands.el b/modules/editor/evil/+commands.el index 05bb798c2..95e447319 100644 --- a/modules/editor/evil/+commands.el +++ b/modules/editor/evil/+commands.el @@ -39,7 +39,7 @@ (evil-ex-define-cmd "gstage" #'magit-stage) (evil-ex-define-cmd "gunstage" #'magit-unstage) (evil-ex-define-cmd "gblame" #'magit-blame) -(evil-ex-define-cmd "grevert" #'git-gutter:revert-hunk) +(evil-ex-define-cmd "grevert" #'+vc-gutter/revert-hunk) ;;; Dealing with buffers (evil-ex-define-cmd "k[ill]" #'doom/kill-current-buffer) diff --git a/modules/editor/evil/init.el b/modules/editor/evil/init.el index 146d59406..f9b1f2924 100644 --- a/modules/editor/evil/init.el +++ b/modules/editor/evil/init.el @@ -111,6 +111,7 @@ variable for an explanation of the defaults (in comments). See consult corfu crdt + (csv "csv-mode") (custom cus-edit) cus-theme dashboard @@ -128,6 +129,7 @@ variable for an explanation of the defaults (in comments). See distel doc-view docker + eat ebib ebuku edbi @@ -182,6 +184,7 @@ variable for an explanation of the defaults (in comments). See info ivy js2-mode + ,@(if (>= emacs-major-version 30) '(kmacro)) leetcode lispy lms @@ -193,6 +196,7 @@ variable for an explanation of the defaults (in comments). See macrostep man (magit magit-repos magit-submodule) + magit-repos magit-section magit-todos markdown-mode diff --git a/modules/editor/evil/packages.el b/modules/editor/evil/packages.el index bb6a67e7c..9e9c6570f 100644 --- a/modules/editor/evil/packages.el +++ b/modules/editor/evil/packages.el @@ -1,7 +1,7 @@ ;; -*- no-byte-compile: t; -*- ;;; editor/evil/packages.el -(package! evil :pin "0251080640e0da6f0eec2b7d8dd70e9c9b9915d7") +(package! evil :pin "0ad84c52169068021ec3372bf52503631f2261de") (package! evil-args :pin "a8151556f63c9d45d0c44c8a7ef9e5a542f3cdc7") (package! evil-easymotion :pin "f96c2ed38ddc07908db7c3c11bcd6285a3e8c2e9") (package! evil-embrace :pin "3081d37811b6a3dfaaf01d578c7ab7a746c6064d") @@ -12,7 +12,7 @@ (package! evil-indent-plus :pin "f392696e4813f1d3a92c7eeed333248914ba6dae") (package! evil-lion :pin "1e838a53b8f18a3c8bdf3e952186abc2ee9cb98e") (package! evil-nerd-commenter :pin "ae52c5070a48793e2c24474c9c8dbf20175d18a0") -(package! evil-numbers :pin "7a1b62afc12da2b582bf84d722e7b10ca8b97065") +(package! evil-numbers :pin "c7899894515d6be40dfcd589fb27c1801c5b199c") (package! evil-snipe :pin "c2108d3932fcd2f75ac3e48250d6badd668f5b4f") (package! evil-surround :pin "da05c60b0621cf33161bb4335153f75ff5c29d91") (package! evil-textobj-anyblock @@ -35,4 +35,4 @@ (package! neotree) (autoload 'neotree-make-executor "neotree" nil nil 'macro)) - (package! evil-collection :pin "ca977acb83c0dd01fc57dbc6f3d3111e89f4ec9d")) + (package! evil-collection :pin "acb056b1d0d3aad2f32b1ca9c019a9a2e976f03e")) diff --git a/modules/editor/file-templates/packages.el b/modules/editor/file-templates/packages.el index 20195a6bd..4ccc541cc 100644 --- a/modules/editor/file-templates/packages.el +++ b/modules/editor/file-templates/packages.el @@ -1,4 +1,4 @@ ;; -*- no-byte-compile: t; -*- ;;; editor/file-templates/packages.el -(package! yasnippet :pin "297546f0853a6a51f5b05e954d0c6aea8caa5ec2") +(package! yasnippet :pin "eb5ba2664c3a68ae4a53bb38b85418dd131b208f") diff --git a/modules/editor/fold/packages.el b/modules/editor/fold/packages.el index ebb3a4768..5f33a2335 100644 --- a/modules/editor/fold/packages.el +++ b/modules/editor/fold/packages.el @@ -7,5 +7,5 @@ (when (modulep! :editor evil) (package! evil-vimish-fold :pin "b6e0e6b91b8cd047e80debef1a536d9d49eef31a")) (when (modulep! :tools tree-sitter) - (package! ts-fold :pin "0627723e5f962fc72b238d4cf99a7f217e72aa3e" + (package! ts-fold :pin "6ce584d1ac39f1e2bc2f66f815964e3047bd6f16" :recipe (:host github :repo "emacs-tree-sitter/ts-fold"))) diff --git a/modules/editor/format/config.el b/modules/editor/format/config.el index 0af781fb0..8f4826c8d 100644 --- a/modules/editor/format/config.el +++ b/modules/editor/format/config.el @@ -82,6 +82,6 @@ This is controlled by `+format-on-save-disabled-modes'." (save-excursion (font-lock-fontify-region web-mode-scan-beg web-mode-scan-end))))) - (defun +format--refresh-git-gutter-h () + (defun +format--refresh-vc-gutter-h () (when (fboundp '+vc-gutter-update-h) (+vc-gutter-update-h)))) diff --git a/modules/editor/format/packages.el b/modules/editor/format/packages.el index 842765725..010501134 100644 --- a/modules/editor/format/packages.el +++ b/modules/editor/format/packages.el @@ -1,4 +1,4 @@ ;; -*- no-byte-compile: t; -*- ;;; editor/format/packages.el -(package! apheleia :pin "96a9805ecb75aac2adde7568d26b3e3b3ffc19af") +(package! apheleia :pin "61766b50b24fa16be519d77795dc63522e04dce8") diff --git a/modules/editor/god/autoload.el b/modules/editor/god/autoload.el index 5902d468f..cb1eee081 100644 --- a/modules/editor/god/autoload.el +++ b/modules/editor/god/autoload.el @@ -13,7 +13,7 @@ (defun +god--configure-cursor-and-modeline-h () "Configure cursor type, cursor color and doom-modeline bar color depending on mode." (let* ((is-fill-overflow (> (current-column) fill-column)) - (previous-cursor-color (face-background 'cursor)) + (previous-cursor-color (frame-parameter nil 'cursor-color)) (previous-modeline-color (and (facep 'doom-modeline-bar) (face-background 'doom-modeline-bar))) (is-god-mode (bound-and-true-p god-local-mode)) @@ -26,7 +26,7 @@ (cond (buffer-read-only +god-read-only-mode-color) (is-fill-overflow +god-fill-overflow-color) (overwrite-mode +god-overwrite-mode-color) - (t previous-cursor-color)))) + ((or previous-cursor-color (face-background 'cursor)))))) (setq cursor-type next-cursor-type) (unless (eq previous-cursor-color next-cursor-and-modeline-color) (set-cursor-color next-cursor-and-modeline-color)) diff --git a/modules/editor/multiple-cursors/packages.el b/modules/editor/multiple-cursors/packages.el index 4ff3edf26..04db30215 100644 --- a/modules/editor/multiple-cursors/packages.el +++ b/modules/editor/multiple-cursors/packages.el @@ -6,4 +6,4 @@ (package! evil-multiedit :pin "23b53bc8743fb82a8854ba907b1d277374c93a79") (package! evil-mc :pin "bdf893ea6f52fd0f10bece8ddae813658e17bbb4")) - ((package! multiple-cursors :pin "234806c832994cadedb42596fe235e91bbd59e8c"))) + ((package! multiple-cursors :pin "c870c18462461df19382ecd2f9374c8b902cd804"))) diff --git a/modules/editor/parinfer/packages.el b/modules/editor/parinfer/packages.el index 4fd48e02b..1453d7b07 100644 --- a/modules/editor/parinfer/packages.el +++ b/modules/editor/parinfer/packages.el @@ -1,4 +1,4 @@ ;; -*- no-byte-compile: t; -*- ;;; editor/parinfer/packages.el -(package! parinfer-rust-mode :pin "e9a23e136b8c5f1fb718af93c19cd6ed22d8c98c") +(package! parinfer-rust-mode :pin "a96c768e9dc4427c9ea18812a2f09e209a5e1a5e") diff --git a/modules/editor/snippets/packages.el b/modules/editor/snippets/packages.el index 2c865ec1e..c36a9b97d 100644 --- a/modules/editor/snippets/packages.el +++ b/modules/editor/snippets/packages.el @@ -7,4 +7,4 @@ :recipe (:host github :repo "doomemacs/snippets" :files (:defaults "*")) - :pin "c1384cc7975ee7ca7d551eb56c104d768440c3cb") + :pin "3a0b029c5d104521ede8dcbeaff2972f56f067dc") diff --git a/modules/editor/word-wrap/packages.el b/modules/editor/word-wrap/packages.el index 349082221..474530037 100644 --- a/modules/editor/word-wrap/packages.el +++ b/modules/editor/word-wrap/packages.el @@ -1,7 +1,7 @@ ;; -*- no-byte-compile: t; -*- ;;; editor/word-wrap/packages.el -(package! adaptive-wrap :pin "70005d2012ab57c20be03c05aebd49318fe49c99") +(package! adaptive-wrap :pin "a3b179ea21aeb4e8cfaf5646bb66d9d045263780") (package! visual-fill-column :recipe (:host github :repo "emacsmirror/visual-fill-column") - :pin "5e74afe39d0afb911dae51af4e7a60ccdf9701f3") + :pin "e04d3521b6dc2435de4c4a4b9cac5feb194f0d5b") diff --git a/modules/emacs/dired/README.org b/modules/emacs/dired/README.org index b9df9c3bb..a411a7a22 100644 --- a/modules/emacs/dired/README.org +++ b/modules/emacs/dired/README.org @@ -13,13 +13,17 @@ This module provides reasonable defaults and augmentations for dired. - +icons :: Enables the display of fancy icons depending on file types in dired buffers. - +ranger :: - Enables dired to be more like [[https://github.com/ranger/ranger][ranger]]. + Enables dired to be more like [[https://github.com/ranger/ranger][ranger]]. Incompatible with =+dirvish=. +- +dirvish :: + Enables [[https://github.com/alexluigit/dirvish][dirvish]] integration. Incompatible with =+ranger=. ** Packages - [[doom-package:nerd-icons-dired]] if [[doom-module:+icons]] +- [[doom-package:dired-git-info]] - [[doom-package:diff-hl]] - [[doom-package:diredfl]] - [[doom-package:dired-rsync]] +- [[doom-package:dirvish]] if [[doom-module:+dirvish]] - [[doom-package:fd-dired]] - [[doom-package:ranger]] if [[doom-module:+ranger]] diff --git a/modules/emacs/dired/config.el b/modules/emacs/dired/config.el index e8dbbfacd..3000fd2df 100644 --- a/modules/emacs/dired/config.el +++ b/modules/emacs/dired/config.el @@ -145,12 +145,15 @@ we have to clean it up ourselves." (when (modulep! +icons) (push +dired-dirvish-icon-provider dirvish-attributes)) (map! :map dirvish-mode-map - :n "b" #'dirvish-goto-bookmark - :n "z" #'dirvish-show-history + :n "b" #'dirvish-quick-access + :n "z" #'dirvish-history-jump :n "f" #'dirvish-file-info-menu - :n "F" #'dirvish-toggle-fullscreen + :n "F" #'dirvish-layout-toggle :n "l" #'dired-find-file :n "h" #'dired-up-directory + :n "TAB" #'dirvish-subtree-toggle + :n "gh" #'dirvish-subtree-up + :n "gl" #'dirvish-subtree-down :localleader "h" #'dired-omit-mode)) diff --git a/modules/emacs/undo/packages.el b/modules/emacs/undo/packages.el index 1dbb71467..3db539737 100644 --- a/modules/emacs/undo/packages.el +++ b/modules/emacs/undo/packages.el @@ -2,8 +2,8 @@ ;;; emacs/undo/packages.el (if (modulep! +tree) - (package! undo-tree :pin "f9e7eac16f674aa7ed8fa065401d26c0258a84f8") - (package! undo-fu :pin "04961ba775142627c5fa4bb94c3e507afedaecd1") - (package! undo-fu-session :pin "2b355c9d39b2688f859a762f2289f23fd16fadc4") + (package! undo-tree :pin "5e9f4c92348b3cfd6f140c1730294017dca4bc05") + (package! undo-fu :pin "ea902716f39c725db1b90dbb285b44404b3bd6df") + (package! undo-fu-session :pin "75d78310c86901f01b35d47f3ac1a5c8368abba4") (when (> emacs-major-version 27) ; unsupported in 27 - (package! vundo :pin "10d011fb05a9db0cc2f641e5b5bebe4b5fb81b6f"))) + (package! vundo :pin "a18d63a9a15d363c11e2405934e709723e472d86"))) diff --git a/modules/email/mu4e/README.org b/modules/email/mu4e/README.org index 9dde00d3d..548bf7080 100644 --- a/modules/email/mu4e/README.org +++ b/modules/email/mu4e/README.org @@ -242,6 +242,82 @@ as deleted: Auto-Expunge off - Wait for the client to update the server." and "When a message is marked as deleted and expunged from the last visible IMAP folder: Move the message to the trash" for the integrations to work as expected. +** Sending mail (SMTP) +Once you're able to fetch your mail, the next step is to configure =mu4e= to +send mail via SMTP. All of the following snippets are meant to be part of your +~set-email-account!~ block: + +*** SMTP server configuration +#+begin_src emacs-lisp +;; In `set-email-account!' +(smtpmail-smtp-user . "foo@bar.com") ; or just 'foo', depending on your provider +(smtpmail-smtp-server . "smtp.bar.com") ; depends on your provider +#+end_src + +*** Authentication +Most SMTP servers require you to authenticate with your username and a password +before sending mail. Emacs will prompt you for this password when you attempt to +send mail. You can store this password as described in [[elisp:(info "(emacs) Authentication")][the relevant info node]]. + +Alternately, if you're already using =pass= to store your passwords, you can use +the [[doom-module::tools pass +auth]] module as an auth source. The corresponding +entry in your password store should have the same name as your SMTP server (for +example, it might be called =smtp.bar.com=). You may also need to run the function +~auth-source-pass-enable~ at some point. + +Emacs will first attempt to send mail without supplying credentials, and expects +the server to communicate that needs credentials. Some servers (eg. Gmail) will +instead abort with an error if they don't recieve credentials on the first +attempt. To get around this, you can set +~smtpmail-servers-requiring-authorization~ to a regex matching the name of your +server: +#+begin_src emacs-lisp +;; In `set-email-account!' +(smtpmail-servers-requiring-authorization . "smtp\\.bar\\.com") +#+end_src + +**** Gmail +Gmail does not support standard SMTP authentication by default, instead +expecting applications to perform OAuth. However, it still supports a much +simpler method - it allows you to generate an 'app password', which can be used +as a regular SMTP password. You will need to generate an app password in Gmail's +settings. + +*** Connection type +Emacs supports three types of SMTP connections: ~plain~ (unencrypted, +conventionally port 25), ~ssl~ (conventionally port 465), and ~starttls~ +(conventionally port 587). This module defaults to ~starttls~, which is the most +modern and recommended option. However, some servers may not support it (you'll +usually get a 'connection closed' or 'connection reset' error in this case), or +a firewall somewhere in your network may be blocking the port (you'll get a +'network unreachable' error, or similar). In such a case, you may want to change +the defaults: +#+begin_src emacs-lisp +;; In `set-email-account!' +;; example: ssl on port 465 +(smtpmail-smtp-service . 465) +(smtpmail-stream-type . ssl) +#+end_src + +*** Sending mail asynchronously +Normally, =mu4e= will block Emacs while sending mail, which can be annoying when +you're on a slow connection and the mail takes a long time to send. There is a +workaround [[elisp:(info "(mu4e) Writing messages")][in mu4e's manual]] that uses the [[doom-package:async]] library. To use it, +you need to include it in your ~set-email-account!~ block: +#+begin_src emacs-lisp +;; In `set-email-account!' +(send-mail-function . async-smtpmail-send-it) +(message-send-mail-function . async-smtpmail-send-it) +#+end_src + +If you're using [[doom-module::tools pass +auth]], you also need to ensure that the child +Emacs process can access your password-store: +#+begin_src emacs-lisp +;; This goes OUTSIDE your `set-email-account!' block! +(require 'smtpmail-async) +(add-hook 'async-smtpmail-before-send-hook #'auth-source-pass-enable) +#+end_src + ** OrgMsg With the [[doom-module:+org]] flag, [[doom-package:org-msg]] is installed, and ~org-msg-mode~ is enabled before composing the first message. To disable ~org-msg-mode~ by default: diff --git a/modules/email/wanderlust/config.el b/modules/email/wanderlust/config.el index db4a5b696..22350066e 100644 --- a/modules/email/wanderlust/config.el +++ b/modules/email/wanderlust/config.el @@ -50,11 +50,13 @@ "^List-.*:" "^Received-SPF:" "^DKIM-.*:" - "^DomainKey-Signature:" + "^DomainKey-.*:" "^SPF-.*:" "^Autocrypt:" "^ARC-.*:" - "^Authentication-Results:") + "^Authentication-Results:" + "^UI-.*:" + "^IronPort.*:") wl-message-visible-field-list '("^Message-Id:" "^User-Agent:" @@ -84,6 +86,13 @@ (setq wl-message-id-domain wl-local-domain)) + ;; We're living in the world where UTF-8 is de facto default charset. + (setq-default mime-charset-for-write 'utf-8) + (setq-default mime-transfer-level 8) + (setq charsets-mime-charset-alist + '(((ascii) . us-ascii) + ((unicode) . utf-8))) + ;; Use x-face only when compface installed (when (modulep! +xface) (autoload 'x-face-decode-message-header "x-face-e21") diff --git a/modules/email/wanderlust/packages.el b/modules/email/wanderlust/packages.el index d6ec56a78..4e7086a69 100644 --- a/modules/email/wanderlust/packages.el +++ b/modules/email/wanderlust/packages.el @@ -4,11 +4,11 @@ ;; HACK These are wanderlust's dependencies (wanderlust depends on semi, semi ;; depends on flim, flim on apel), but they all have non-standard default ;; branches which straight cannot detect without our help. -(package! apel :recipe (:branch "apel-wl") :pin "82eb2325bd149dc57b43a9ce9402c6c6183e4052") -(package! flim :recipe (:branch "flim-1_14-wl") :pin "abdd2315006eb31476249223569808adb1c0f7b2") -(package! semi :recipe (:branch "semi-1_14-wl") :pin "9063a4485b148a767ea924f0e7cc78d3524ba256") +(package! apel :recipe (:branch "apel-wl") :pin "1a6fd3bab2cc6b0a450c2d801f77a1c9da0f72fb") +(package! flim :recipe (:branch "flim-1_14-wl") :pin "23bb29d70a13cada2eaab425ef80071564586a6d") +(package! semi :recipe (:branch "semi-1_14-wl") :pin "85a52b899ac89be504d9e38d8d406bba98f4b0b3") -(package! wanderlust :pin "c15e8ece4f34f10479e17cda19d10b98f6be3ec1") +(package! wanderlust :pin "8a0ea2146ee919a5344bb25f198d45016bc716d9") (when (modulep! +xface) (package! x-face-e21 diff --git a/modules/input/layout/+azerty.el b/modules/input/layout/+azerty.el index 12a8b9021..ef7fd4279 100644 --- a/modules/input/layout/+azerty.el +++ b/modules/input/layout/+azerty.el @@ -28,8 +28,8 @@ :desc "Next buffer" "è" #'next-buffer) (:prefix-map ("g" . "git") (:when (modulep! :ui vc-gutter) - :desc "Jump to previous hunk" "é" #'git-gutter:previous-hunk - :desc "Jump to next hunk" "è" #'git-gutter:next-hunk)))) + :desc "Jump to previous hunk" "é" #'+vc-gutter/previous-hunk + :desc "Jump to next hunk" "è" #'+vc-gutter/next-hunk)))) (defun +layout-remap-evil-keys-for-azerty-h () (map! :nv "à" #'evil-execute-macro @@ -48,8 +48,8 @@ :m "èy" #'+evil:c-string-encode :m "éy" #'+evil:c-string-decode (:when (modulep! :ui vc-gutter) - :m "èd" #'git-gutter:next-hunk - :m "éd" #'git-gutter:previous-hunk) + :m "èd" #'+vc-gutter/next-hunk + :m "éd" #'+vc-gutter/previous-hunk) (:when (modulep! :ui hl-todo) :m "èt" #'hl-todo-next :m "ét" #'hl-todo-previous) diff --git a/modules/input/layout/+bepo.el b/modules/input/layout/+bepo.el index e6f5aa598..549e553fc 100644 --- a/modules/input/layout/+bepo.el +++ b/modules/input/layout/+bepo.el @@ -54,8 +54,8 @@ In all cases, 'h' functions go to 'c' and 'l' ones go to 'r' so the navigation k :desc "Jump to documentation" "S" #'+lookup/documentation) (:prefix-map ("g" . "git") (:when (modulep! :ui vc-gutter) - :desc "Jump to next hunk" ")" #'git-gutter:next-hunk - :desc "Jump to previous hunk" "(" #'git-gutter:previous-hunk)) + :desc "Jump to next hunk" ")" #'+vc-gutter/next-hunk + :desc "Jump to previous hunk" "(" #'+vc-gutter/previous-hunk)) (:prefix-map ("p" . "project") :desc "Browse other project" "»" #'doom/browse-in-other-project))) diff --git a/modules/lang/javascript/packages.el b/modules/lang/javascript/packages.el index 1196c229f..01ee179db 100644 --- a/modules/lang/javascript/packages.el +++ b/modules/lang/javascript/packages.el @@ -3,17 +3,17 @@ ;; Major modes (package! rjsx-mode :pin "b697fe4d92cc84fa99a7bcb476f815935ea0d919") -(package! typescript-mode :pin "4fcb4594819caf472ae42ea068a1c7795cf07f46") +(package! typescript-mode :pin "fc3a4f3b275e8cf6cf41aa0c9ef42e25ef908feb") ;; Tools (package! js2-refactor :pin "a0977c4ce1918cc266db9d6cd7a2ab63f3a76b9a") (package! npm-mode :pin "3ee7c0bad5b7a041d4739ef3aaa06a3dc764e5eb") ;; Eval -(package! nodejs-repl :pin "3b841055cad00f442e4a9159b1056f59411b6646") +(package! nodejs-repl :pin "03d0b64768b40b71ae54de1b50eb58719e615746") (package! skewer-mode :pin "e5bed351939c92a1f788f78398583c2f83f1bb3c") ;; Programming environment (package! tide :pin "b38dfc3f8fb754e64e48e76fc92d472cb3d1a3dc") (when (modulep! :tools lookup) - (package! xref-js2 :pin "fd6b723e7f1f9793d189a815e1904364dc026b03")) + (package! xref-js2 :pin "e215af9eedac69b40942fff9d5514704f9f4d43e")) diff --git a/modules/lang/ocaml/README.org b/modules/lang/ocaml/README.org index 07e4922bc..c062f1aec 100644 --- a/modules/lang/ocaml/README.org +++ b/modules/lang/ocaml/README.org @@ -4,7 +4,7 @@ #+since: 2.0.4 (#128) * Description :unfold: -This module adds [[https://ocaml.org/][OCaml]] support to Doom Emacs, powered by [[doom-package:tuareg-mode]]. +This module adds [[https://ocaml.org/][OCaml]] support to Doom Emacs, powered by [[doom-package:tuareg]]. - Code completion, documentation look-up, code navigation and refactoring ([[doom-package:merlin]]) @@ -14,6 +14,7 @@ This module adds [[https://ocaml.org/][OCaml]] support to Doom Emacs, powered by - Auto-indentation ([[doom-package:ocp-indent]]) - Code formatting ([[doom-package:ocamlformat]]) - Dune file format ([[doom-package:dune]]) +- Opam switch selection ([[doom-package:opam-switch-mode]]) ** Maintainers *This module needs a maintainer.* [[doom-contrib-maintainer:][Become a maintainer?]] @@ -31,6 +32,7 @@ This module adds [[https://ocaml.org/][OCaml]] support to Doom Emacs, powered by - [[doom-package:ocamlformat]] if [[doom-module::editor format]] - [[doom-package:ocp-indent]] - [[doom-package:tuareg]] +- [[doom-package:opam-switch-mode]] - [[doom-package:utop]] if [[doom-module::tools eval]] - unless [[doom-module:+lsp]] - [[doom-package:flycheck-ocaml]] if [[doom-module::checkers syntax]] @@ -42,7 +44,7 @@ This module adds [[https://ocaml.org/][OCaml]] support to Doom Emacs, powered by - ~set-ligatures!~ is called with the full tuareg prettify symbol list, this can cause columns to change as certain keywords are shortened (e.g. =fun= becomes \lambda). -- ~tuareg-opam-update-env~ is called the first time [[doom-package:tuareg]] is loaded +- ~opam-switch-set-switch~ is called the first time [[doom-package:tuareg]] and subsequently [[doom-package:opam-switch-mode]] are loaded ** TODO Changelog # This section will be machine generated. Don't edit it by hand. @@ -80,6 +82,7 @@ This module requires the following packages available through [[http://opam.ocam | ~merlin-iedit-occurrences~ | [[kbd:][v R]] | visual refactor identifier under point (multiple cursors) | | ~utop~ | [[kbd:][SPC o r]] | open =utop= as REPL | | ~utop-eval-region~ | [[kbd:][SPC c e]] | evaluate selected region in =utop= | +| ~opam-switch-set-switch~ | [[kbd:][ w]] | evaluate selected region in =utop= | * TODO Configuration #+begin_quote diff --git a/modules/lang/ocaml/config.el b/modules/lang/ocaml/config.el index b678437b5..27a57ac21 100644 --- a/modules/lang/ocaml/config.el +++ b/modules/lang/ocaml/config.el @@ -20,10 +20,6 @@ ;; harmless if `prettify-symbols-mode' isn't active (setq tuareg-prettify-symbols-full t) - ;; Use opam to set environment - (setq tuareg-opam-insinuate t) - (tuareg-opam-update-env (tuareg-opam-current-compiler)) - (setq-hook! 'tuareg-mode-hook comment-line-break-function #'+ocaml/comment-indent-new-line) @@ -123,6 +119,22 @@ (setq-local ocamlformat-file-kind 'interface))))) (setq-local +format-with 'ocamlformat)))) +(use-package! opam-switch-mode + :hook (tuareg-mode-local-vars . +ocaml-init-opam-switch-h) + :init + (map! :localleader + :map tuareg-mode-map + "w" #'opam-switch-set-switch) + + (defun +ocaml-init-opam-switch-h () + "Activate `opam-switch-mode' if the opam executable exists." + (when (executable-find "opam") + (opam-switch-mode))) + :config + ;; Use opam to set environment + (setq tuareg-opam-insinuate t) + (opam-switch-set-switch (tuareg-opam-current-compiler))) + ;; Tree sitter (eval-when! (modulep! +tree-sitter) (add-hook! 'tuareg-mode-local-vars-hook #'tree-sitter!)) diff --git a/modules/lang/ocaml/packages.el b/modules/lang/ocaml/packages.el index 97c85b0f1..8c47cd2c6 100644 --- a/modules/lang/ocaml/packages.el +++ b/modules/lang/ocaml/packages.el @@ -3,6 +3,8 @@ (package! tuareg :pin "1d53723e39f22ab4ab76d31f2b188a2879305092") +(package! opam-switch-mode :pin "1069e56a662f23ea09d4e05611bdedeb99257012") + (unless (modulep! +lsp) (package! merlin :pin "8404f96693727f7b0edc0d0b14db57843d79e27b") (package! merlin-eldoc :pin "bf8edc63d85b35e4def352fa7ce4ea39f43e1fd8") diff --git a/modules/lang/org/autoload/org-export.el b/modules/lang/org/autoload/org-export.el index 471b59eb0..a8aadf481 100644 --- a/modules/lang/org/autoload/org-export.el +++ b/modules/lang/org/autoload/org-export.el @@ -49,6 +49,6 @@ properties and font-locking et all)." (+org--yank-html-buffer (markdown))) (_ ;; Omit after/before-string overlay properties in htmlized regions, so we - ;; don't get fringe characters for things like flycheck or git-gutter. + ;; don't get fringe characters for things like flycheck or diff-hl (letf! (defun htmlize-add-before-after-strings (_beg _end text) text) (ox-clip-formatted-copy beg end))))) diff --git a/modules/lang/org/packages.el b/modules/lang/org/packages.el index b35d498ea..03d39e3ef 100644 --- a/modules/lang/org/packages.el +++ b/modules/lang/org/packages.el @@ -31,14 +31,14 @@ (format "(defun org-git-version (&rest _) \"%s-??-%s\")\n" version (cdr (doom-call-process "git" "rev-parse" "--short" "HEAD"))) "(provide 'org-version)\n"))))) - :pin "5bdfc02c6fa1b9ad4f075ac1ad1e4086ead310db") + :pin "39272e2165ad9c49cfa9b5d749a5bb528dbadd87") (package! org-contrib :recipe (:host github :repo "emacsmirror/org-contrib") - :pin "d4056ce5d5611e1c971c151f182a2d407226fdb1") + :pin "ccd4212866fb1be70d1f15a41264c45a281901ad") (package! avy) -(package! htmlize :pin "09d43dfa44899f194095bb3500a45ec5b34d59c6") +(package! htmlize :pin "ed5e5b05fd260e8f161a488d56f10e7f6e01fb75") (package! org-yt :recipe (:host github :repo "TobiasZawada/org-yt") :pin "56166f48e04d83668f70ed84706b7a4d8b1e5438") @@ -49,7 +49,7 @@ ;; TODO Adjust when this is added to GNU ELPA (when (modulep! +contacts) (package! org-contacts - :pin "6660db078f7687af3bc31f702e3e957d4d7654bd" + :pin "d0cb221502c9e104b6e3c358128b28761ffddb55" :recipe (:host nil :type git :repo "https://repo.or.cz/org-contacts.git"))) @@ -71,9 +71,9 @@ (when (modulep! :tools pdf) (package! org-pdftools :pin "4e420233a153a9c4ab3d1a7e1d7d3211c836f0ac")) (when (modulep! :tools magit) - (package! orgit :pin "a57beefa24712430fe6b5016b9273129931a8287") + (package! orgit :pin "ca3bf7aa20074e25fee37b71cfef127b93a3dde7") (when (modulep! :tools magit +forge) - (package! orgit-forge :pin "f2ff9e5ad68b3e860379a1d368ad6d8a9696b719"))) + (package! orgit-forge :pin "7b010465ab96bea6d380ae1cfbd7999d528f1de9"))) (when (modulep! +brain) (package! org-brain :pin "2bad7732aae1a3051e2a14de2e30f970bbe43c25")) (when (modulep! +dragndrop) @@ -84,11 +84,11 @@ (when (modulep! +ipython) ; DEPRECATED (package! ob-ipython :pin "7147455230841744fb5b95dcbe03320313a77124")) (when (modulep! +jupyter) - (package! jupyter :pin "2059d79b2fecf6d25a6c796b69ab954645ec37d1")) + (package! jupyter :pin "b279c90295ed7ef89832d655cf8d9077233f1098")) (when (modulep! +journal) (package! org-journal :pin "17b34ce8df9649a73b715c13698220bde1628668")) (when (modulep! +noter) - (package! org-noter :pin "9e4f57957b8f54db20a4e13bf8d6b32e004ab3e8")) + (package! org-noter :pin "68646b685a0d8c02419234922a9e2d885d6419df")) (when (modulep! +pomodoro) (package! org-pomodoro :pin "3f5bcfb80d61556d35fc29e5ddb09750df962cc6")) (when (modulep! +pretty) @@ -100,11 +100,11 @@ :recipe (:host github :repo "anler/centered-window-mode") :pin "80965f6c6afe8d918481433984b493de72af5399") (package! org-tree-slide :pin "e2599a106a26ce5511095e23df4ea04be6687a8a") - (package! org-re-reveal :pin "1944ac53d4cdd0fb250cc575447d5e6320fd5f81") + (package! org-re-reveal :pin "77c805a89e09a46000932c8c609bf5d34cbe81cb") (package! revealjs :recipe (:host github :repo "hakimel/reveal.js" :files ("css" "dist" "js" "plugin")) - :pin "6410c756ea91ded3fa5f6b40a872523e7b8fe723")) + :pin "472535065c7525abf0cc9df51c66f19fd2d2204f")) (cond ((modulep! +roam) (package! org-roam diff --git a/modules/tools/ansible/packages.el b/modules/tools/ansible/packages.el index b8f23f34e..3fd47d5de 100644 --- a/modules/tools/ansible/packages.el +++ b/modules/tools/ansible/packages.el @@ -1,7 +1,7 @@ ;; -*- no-byte-compile: t; -*- ;;; tools/ansible/packages.el -(package! ansible :recipe (:nonrecursive t) :pin "1d7de8d3ddac980715eebd87ee66859f8665b101") +(package! ansible :recipe (:nonrecursive t) :pin "b4dca00f89334392d770a7a67fffc935ec7354aa") (package! ansible-doc :pin "86083a7bb2ed0468ca64e52076b06441a2f8e9e0") (package! jinja2-mode :pin "03e5430a7efe1d163a16beaf3c82c5fd2c2caee1") (package! yaml-mode :pin "7b5ce294fb15c2c8926fa476d7218aa415550a2a") diff --git a/modules/tools/biblio/packages.el b/modules/tools/biblio/packages.el index 110386f33..a1d82c6b0 100644 --- a/modules/tools/biblio/packages.el +++ b/modules/tools/biblio/packages.el @@ -8,10 +8,10 @@ (package! bibtex-completion :pin "8b71b4f5ce62eeaf18067f57faaddc06449fbe1c") (package! helm-bibtex :pin "8b71b4f5ce62eeaf18067f57faaddc06449fbe1c")) (when (modulep! :completion vertico) - (package! citar :pin "885b86f6733fd70f42c32dd7791d3447f93db990") - (package! citar-embark :pin "885b86f6733fd70f42c32dd7791d3447f93db990") + (package! citar :pin "07d2a63c99fe35cbd468f8e6a322de05f1a29469") + (package! citar-embark :pin "07d2a63c99fe35cbd468f8e6a322de05f1a29469") (when (modulep! :lang org +roam2) (package! citar-org-roam :pin "82d47b5df1926627f56a09055c69b49b31cbbb9f"))) (package! parsebib :pin "ace9df707108b17759c004c7387655277122d4c1") -(package! citeproc :pin "44f90cb296766e03fffc28b7892521ab0e8709f1") +(package! citeproc :pin "cfa30b6c95c7465a05da98eccf273608880b22d7") diff --git a/modules/tools/collab/packages.el b/modules/tools/collab/packages.el index a81b7f6b0..69863cca3 100644 --- a/modules/tools/collab/packages.el +++ b/modules/tools/collab/packages.el @@ -1,4 +1,4 @@ ;; -*- no-byte-compile: t; -*- ;;; tools/collab/packages.el -(package! crdt :pin "4a18cd8539c8f3364e3ae903580328dd8b05fa78") +(package! crdt :pin "9bf99e2ce35d23c3d60ad245b77ab3b5313184d4") diff --git a/modules/tools/debugger/packages.el b/modules/tools/debugger/packages.el index 2d859c711..7e60701b4 100644 --- a/modules/tools/debugger/packages.el +++ b/modules/tools/debugger/packages.el @@ -6,5 +6,5 @@ (package! realgud-trepan-ni :pin "0ec088ea343835e24ae73da09bea96bfb02a3130"))) (when (modulep! +lsp) - (package! dap-mode :pin "11431a26bc4c8ca92b097dbdbcbdc9e3d7fb5583") + (package! dap-mode :pin "b407773ebca56e3bd8e6a4643854e91cbde0c35e") (package! posframe :pin "f4e9e509ba96ceb3c2b2b054957291607fb52651")) diff --git a/modules/tools/direnv/packages.el b/modules/tools/direnv/packages.el index 5c0bbc572..fc0263190 100644 --- a/modules/tools/direnv/packages.el +++ b/modules/tools/direnv/packages.el @@ -1,4 +1,4 @@ ;; -*- no-byte-compile: t; -*- ;;; tools/direnv/packages.el -(package! envrc :pin "8eb7401700b0080902ce200ad610ff8d2f2dcc27") +(package! envrc :pin "2316e004c1574234fe4d991bd75a254cdeaa83ae") diff --git a/modules/tools/editorconfig/packages.el b/modules/tools/editorconfig/packages.el index baf0a8ed1..f4f9e8bf1 100644 --- a/modules/tools/editorconfig/packages.el +++ b/modules/tools/editorconfig/packages.el @@ -3,4 +3,4 @@ (package! editorconfig :recipe (:nonrecursive t) - :pin "d73b6392ded0476af93ec7ba75cca2909aa8d2dc") + :pin "1651294334f3987d749eeb287f11d256cf2ba5b1") diff --git a/modules/tools/eval/packages.el b/modules/tools/eval/packages.el index a7b5f6eb5..f9eccf554 100644 --- a/modules/tools/eval/packages.el +++ b/modules/tools/eval/packages.el @@ -1,6 +1,6 @@ ;; -*- no-byte-compile: t; -*- ;;; tools/eval/packages.el -(package! quickrun :pin "373634cf5143f9680164e27fa844d3b02408e917") +(package! quickrun :pin "c58e2e4be58416fbb467b3bb191470a61408751c") (when (modulep! +overlay) (package! eros :pin "a9a92bdc6be0521a6a06eb464be55ed61946639c")) diff --git a/modules/tools/lookup/autoload/lookup.el b/modules/tools/lookup/autoload/lookup.el index befd335fd..ac4ff3e65 100644 --- a/modules/tools/lookup/autoload/lookup.el +++ b/modules/tools/lookup/autoload/lookup.el @@ -263,29 +263,41 @@ current buffer." (< pt end)))))))) (defun +lookup-ffap-backend-fn (identifier) - "Tries to locate the file at point (or in active selection). -Uses find-in-project functionality (provided by ivy, helm, or project), -otherwise falling back to ffap.el (find-file-at-point)." - (let ((guess + "Tries to locate the file or URL at point (or in active selection). + +See `ffap-alist' for ways to tweak how files are resolved. Falls back to +whatever find-in-project functionality is available in your active completion +framework (ivy, helm, vertico, etc), otherwise falling back to +`find-file-at-point''s file prompt." + (let ((initial-buffer (current-buffer)) + (guess (cond (identifier) ((doom-region-active-p) (buffer-substring-no-properties (doom-region-beginning) (doom-region-end))) - ((if (require 'ffap) (ffap-guesser))) + ((if (require 'ffap) (ffap-guesser))) ; Powerful! See `ffap-alist' ((thing-at-point 'filename t))))) (cond ((and (stringp guess) (or (file-exists-p guess) (ffap-url-p guess))) (find-file-at-point guess)) - ((and (modulep! :completion ivy) - (doom-project-p)) + ;; Walk the file tree up to the project's root for relative paths. + ((and (stringp guess) + ;; Only do this with paths that contain segments, to reduce + ;; false positives. + (string-match-p "/" guess) + (when-let ((dir (locate-dominating-file default-directory guess))) + (when (file-in-directory-p dir (doom-project-root)) + (find-file (doom-path dir guess)) + t)))) + ;; Fallback prompters + ((and (modulep! :completion ivy) (doom-project-p)) (counsel-file-jump guess (doom-project-root))) - ((and (modulep! :completion vertico) - (doom-project-p)) + ((and (modulep! :completion vertico) (doom-project-p)) (+vertico/consult-fd-or-find (doom-project-root) guess)) ((find-file-at-point (ffap-prompter guess)))) - t)) + (not (eq initial-buffer (current-buffer))))) (defun +lookup-bug-reference-backend-fn (_identifier) "Searches for a bug reference in user/repo#123 or #123 format and opens it in diff --git a/modules/tools/lookup/packages.el b/modules/tools/lookup/packages.el index 95dcdb6a6..ee5d286a0 100644 --- a/modules/tools/lookup/packages.el +++ b/modules/tools/lookup/packages.el @@ -8,7 +8,7 @@ (package! helm)) ;; -(package! dumb-jump :pin "ede6a04187e79a29ef31d14760ac0d8d4c5f4cc5") +(package! dumb-jump :pin "3c2ab8dfff3a10d3c5f2efd69cfbc81fb5dbbd39") (when (modulep! :completion ivy) (package! ivy-xref :pin "a82e8e117d2dd62c28b6a3e3d6e4cfb11c0bda38")) (when (modulep! :completion helm) diff --git a/modules/tools/lsp/packages.el b/modules/tools/lsp/packages.el index 88381ae14..2ee5cef08 100644 --- a/modules/tools/lsp/packages.el +++ b/modules/tools/lsp/packages.el @@ -3,13 +3,13 @@ (if (modulep! +eglot) (progn - (package! eglot :pin "e7e49c789c4019dd4cd4ab3880517d01592d81f9") + (package! eglot :pin "850cbd043084d7cc571e1090a4812db6e3f7d0bc") (when (modulep! :completion vertico) (package! consult-eglot :pin "64262e72452f8fe6dd49d31bcdd4bd577b7d682d")) (when (and (modulep! :checkers syntax) (not (modulep! :checkers syntax +flymake))) (package! flycheck-eglot :pin "114e1315aaf0dc3196da67da426bbe2b46384fe2"))) - (package! lsp-mode :pin "acad044ebc343c1eff0d9a875a13fb34ad113a9e") + (package! lsp-mode :pin "cec9e56390e90d7ced3b18a922ab954e782b8628") (package! lsp-ui :pin "00f1fecdfb41c30428734cf27e492f26f46627fb") (when (modulep! :completion ivy) (package! lsp-ivy :pin "9ecf4dd9b1207109802bd1882aa621eb1c385106")) diff --git a/modules/tools/magit/autoload.el b/modules/tools/magit/autoload.el index de76aab6f..f3135523d 100644 --- a/modules/tools/magit/autoload.el +++ b/modules/tools/magit/autoload.el @@ -108,7 +108,7 @@ modified." ;;;###autoload (defun +magit-revert-buffer-maybe-h () - "Update `vc' and `git-gutter' if out of date." + "Update `vc' and `diff-hl' if out of date." (when +magit--stale-p (+magit--revert-buffer (current-buffer)))) diff --git a/modules/tools/magit/packages.el b/modules/tools/magit/packages.el index e3ed50ca7..703503f3c 100644 --- a/modules/tools/magit/packages.el +++ b/modules/tools/magit/packages.el @@ -1,9 +1,9 @@ ;; -*- no-byte-compile: t; -*- ;;; tools/magit/packages.el -(when (package! magit :pin "f9268a959828d0c6ab26171dd2fb1ffc55e5ae70") +(when (package! magit :pin "ea0f07e54967197ac0b072a69ba314314a4080c1") (when (modulep! +forge) - (package! forge :pin "c3675fd068767c694177a310d4fa0a01f81bb2d3") + (package! forge :pin "4adb94d23c8f28ea3b15757936c2203b3376586a") (package! code-review :recipe (:host github :repo "doomelpa/code-review" diff --git a/modules/tools/pdf/packages.el b/modules/tools/pdf/packages.el index b80c837a0..dda748cb2 100644 --- a/modules/tools/pdf/packages.el +++ b/modules/tools/pdf/packages.el @@ -1,5 +1,5 @@ ;; -*- no-byte-compile: t; -*- ;;; tools/pdf/packages.el -(package! pdf-tools :pin "a1048bceb2bd3f635437b0f2bfac27cae8c2dabc") +(package! pdf-tools :pin "30b50544e55b8dbf683c2d932d5c33ac73323a16") (package! saveplace-pdf-view :pin "ee95460cd934080338f03a16f95b549577425216") diff --git a/modules/tools/rgb/packages.el b/modules/tools/rgb/packages.el index ef8a2dbf4..c6cb355cb 100644 --- a/modules/tools/rgb/packages.el +++ b/modules/tools/rgb/packages.el @@ -1,5 +1,5 @@ ;; -*- no-byte-compile: t; -*- ;;; tools/rgb/packages.el -(package! rainbow-mode :pin "70ed10d410ef00c82c49b2ba41647930626d6218") +(package! rainbow-mode :pin "0740f31f300982534183a2f60b1918de418a6f2c") (package! kurecolor :pin "fbf98e1e384dd11bbb5764ae54b36353f0691d1e") diff --git a/modules/tools/tree-sitter/packages.el b/modules/tools/tree-sitter/packages.el index 71f92c463..89e55187c 100644 --- a/modules/tools/tree-sitter/packages.el +++ b/modules/tools/tree-sitter/packages.el @@ -1,8 +1,8 @@ ;; -*- no-byte-compile: t; -*- ;;; tools/tree-sitter/packages.el -(package! tree-sitter :pin "3cfab8a0e945db9b3df84437f27945746a43cc71") -(package! tree-sitter-langs :pin "b7895ca759563f3c7c3b928eb4f816bb4099d866") +(package! tree-sitter :recipe (:branch "master") :pin "02fe7b86d92b1aab954045146469b7893f0ab371") +(package! tree-sitter-langs :pin "a06804e13fc1d24d0099b44ce23d6ac5e6bac5b8") (package! tree-sitter-indent :pin "4ef246db3e4ff99f672fe5e4b416c890f885c09e") (when (modulep! :editor evil +everywhere) diff --git a/modules/ui/deft/packages.el b/modules/ui/deft/packages.el index 459447348..f0e078b19 100644 --- a/modules/ui/deft/packages.el +++ b/modules/ui/deft/packages.el @@ -1,4 +1,4 @@ ;; -*- no-byte-compile: t; -*- ;;; ui/deft/packages.el -(package! deft :pin "bb1a16b87c3e0fe70fade6227e47dd7712b89bf6") +(package! deft :pin "b369d7225d86551882568788a23c5497b232509c") diff --git a/modules/ui/doom/README.org b/modules/ui/doom/README.org index b46335d87..197e7517a 100644 --- a/modules/ui/doom/README.org +++ b/modules/ui/doom/README.org @@ -8,7 +8,6 @@ This module gives Doom its signature look: powered by the [[doom-package:doom-th (loosely inspired by [[https://github.com/atom/one-dark-syntax][Atom's One Dark theme]]) and [[doom-package:solaire-mode]]. Includes: - A custom folded-region indicator for [[doom-package:hideshow]]. -- "Thin bar" fringe bitmaps for [[doom-package:git-gutter-fringe]]. - File-visiting buffers are slightly brighter (thanks to [[doom-package:solaire-mode]]). ** Maintainers diff --git a/modules/ui/doom/packages.el b/modules/ui/doom/packages.el index 9e306c51e..52d3da084 100644 --- a/modules/ui/doom/packages.el +++ b/modules/ui/doom/packages.el @@ -1,5 +1,5 @@ ;; -*- no-byte-compile: t; -*- ;;; ui/doom/packages.el -(package! doom-themes :pin "3b2422b208d28e8734b300cd3cc6a7f4af5eba55") +(package! doom-themes :pin "816fb54d60a7012b9b12cd995831d4226982b487") (package! solaire-mode :pin "8ccdceeb9298b3c4e35f630914f467bf164f39ad") diff --git a/modules/ui/hl-todo/packages.el b/modules/ui/hl-todo/packages.el index 36d220441..2aa75ea9c 100644 --- a/modules/ui/hl-todo/packages.el +++ b/modules/ui/hl-todo/packages.el @@ -1,4 +1,4 @@ ;; -*- no-byte-compile: t; -*- ;;; ui/hl-todo/packages.el -(package! hl-todo :pin "f1fef158f99a70746926ef52c59f4863a29b7ed7") +(package! hl-todo :pin "dd46d426c0501b5e8ed976a834d3e54ae85731f7") diff --git a/modules/ui/ligatures/autoload/ligatures.el b/modules/ui/ligatures/autoload/ligatures.el index b44cc9599..6c8194681 100644 --- a/modules/ui/ligatures/autoload/ligatures.el +++ b/modules/ui/ligatures/autoload/ligatures.el @@ -70,7 +70,7 @@ Note that this will keep all ligatures in `+ligatures-prog-mode-list' active, as ;; NOTE: Doom enforces `ligature-composition-table' to have a single mode per key in the alist. ;; This is less efficient than what ligature.el can do (i.e. use a list of modes, or `t' as a key), ;; but holding this invariant allows resetting with `(set-font-ligatures! 'mode nil)` to work reliably. - (if (null ligatures) + (if (or (null ligatures) (equal ligatures '(nil))) (dolist (mode (ensure-list modes)) (delq! mode ligature-composition-table 'assq)) (after! ligature diff --git a/modules/ui/minimap/packages.el b/modules/ui/minimap/packages.el index eb736c7cc..9c5fa0251 100644 --- a/modules/ui/minimap/packages.el +++ b/modules/ui/minimap/packages.el @@ -1,4 +1,4 @@ ;; -*- no-byte-compile: t; -*- ;;; ui/minimap/packages.el -(package! minimap :pin "90aeeb5798ff2fa8b08bd4965af5e43806e01645") +(package! minimap :pin "4898d277686c2829c2e91416082f4252c1bb0ceb") diff --git a/modules/ui/modeline/packages.el b/modules/ui/modeline/packages.el index 1bc523b24..5cd2a1009 100644 --- a/modules/ui/modeline/packages.el +++ b/modules/ui/modeline/packages.el @@ -2,7 +2,7 @@ ;;; ui/modeline/packages.el (unless (modulep! +light) - (package! doom-modeline :pin "e09b8e989fa5fc1d98320aaa29d7138631b20ae5")) + (package! doom-modeline :pin "11ae6c193cd9cb8d7ff7996058e6df2c0d1e408b")) (package! anzu :pin "26fb50b429ee968eb944b0615dd0aed1dd66172c") (when (modulep! :editor evil) (package! evil-anzu :pin "d1e98ee6976437164627542909a25c6946497899")) diff --git a/modules/ui/ophints/README.org b/modules/ui/ophints/README.org index 181d82075..d8346e97d 100644 --- a/modules/ui/ophints/README.org +++ b/modules/ui/ophints/README.org @@ -5,10 +5,11 @@ * Description :unfold: This module provides op-hints (operation hinting), i.e. visual feedback for -certain operations. It highlights regions of text that the last operation (like -yank) acted on. +certain editing operations. It highlights regions of text that the last +operation (like yank) acted on. -Uses [[doom-package:evil-goggles]] for evil users and [[doom-package:volatile-highlights]] otherwise. +Uses [[doom-package:evil-goggles]] for evil users and [[doom-package:goggles]] +otherwise. ** Maintainers - [[doom-user:][@hlissner]] @@ -20,7 +21,7 @@ Uses [[doom-package:evil-goggles]] for evil users and [[doom-package:volatile-hi ** Packages - [[doom-package:evil-goggles]] if [[doom-module::editor evil]] -- [[doom-package:volatile-highlights]] unless [[doom-module::editor evil]] +- [[doom-package:goggles]] unless [[doom-module::editor evil]] ** Hacks /No hacks documented for this module./ diff --git a/modules/ui/ophints/config.el b/modules/ui/ophints/config.el index 563fc06b7..ebefc583e 100644 --- a/modules/ui/ophints/config.el +++ b/modules/ui/ophints/config.el @@ -63,11 +63,11 @@ :switch evil-goggles-enable-join :advice evil-goggles--join-advice)))) - -(use-package! volatile-highlights +(use-package! goggles :unless (modulep! :editor evil) - :hook (doom-first-input . volatile-highlights-mode) + :hook ((prog-mode text-mode) . goggles-mode) :config - (after! undo-fu - (vhl/define-extension 'undo-fu 'undo-fu-only-undo 'undo-fu-only-redo) - (vhl/install-extension 'undo-fu))) + (goggles-define +goggles-general-undo undo) ; goggles only supports `primitive-undo' by default + (goggles-define +goggles-register-paste insert-register) + (goggles-define +goggles-kill-word backward-kill-word kill-word) + (goggles-define +goggles-undo-fu undo-fu-only-undo undo-fu-only-redo)) diff --git a/modules/ui/ophints/packages.el b/modules/ui/ophints/packages.el index ccd75d1da..b1fcf048d 100644 --- a/modules/ui/ophints/packages.el +++ b/modules/ui/ophints/packages.el @@ -3,4 +3,4 @@ (if (modulep! :editor evil) (package! evil-goggles :pin "34ca276a85f615d2b45e714c9f8b5875bcb676f3") - (package! volatile-highlights :pin "fcf6e2778454ce514c189a7d1fe70e03ad81c325")) + (package! goggles :pin "41d3669d7ae7b73bd39d298e5373ece48b656ce3")) diff --git a/modules/ui/tabs/config.el b/modules/ui/tabs/config.el index f9b8af52d..4e79ae500 100644 --- a/modules/ui/tabs/config.el +++ b/modules/ui/tabs/config.el @@ -10,7 +10,7 @@ ;;; Packages (use-package! centaur-tabs - :hook (doom-first-file . centaur-tabs-mode) + :defer t :init (setq centaur-tabs-set-icons t centaur-tabs-gray-out-icons 'buffer @@ -24,6 +24,10 @@ ;; prevents that. centaur-tabs-cycle-scope 'tabs) + (if (daemonp) + (add-hook 'server-after-make-frame-hook #'centaur-tabs-mode) + (add-hook 'doom-first-file-hook #'centaur-tabs-mode)) + :config (add-hook! '(+doom-dashboard-mode-hook +popup-buffer-mode-hook) (defun +tabs-disable-centaur-tabs-mode-maybe-h () @@ -31,19 +35,11 @@ (when (centaur-tabs-mode-on-p) (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)))))) - + (add-hook! 'doom-load-theme-hook + (defun +tabs-reload-centaur-tabs-h () + (when (bound-and-true-p centaur-tabs-mode) + (centaur-tabs-mode -1) + (centaur-tabs-mode +1))))) ;; TODO tab-bar-mode (emacs 27) ;; TODO tab-line-mode (emacs 27) diff --git a/modules/ui/tabs/packages.el b/modules/ui/tabs/packages.el index 0579a69c8..a38f3c351 100644 --- a/modules/ui/tabs/packages.el +++ b/modules/ui/tabs/packages.el @@ -1,4 +1,4 @@ ;; -*- no-byte-compile: t; -*- ;;; ui/tabs/packages.el -(package! centaur-tabs :pin "0bb1aa18d475319df85f192dce3327802866c3c3") +(package! centaur-tabs :pin "4a121a175e663295fcd295512642dae4d2ff9db3") diff --git a/modules/ui/treemacs/packages.el b/modules/ui/treemacs/packages.el index 123adc09c..8406d4d80 100644 --- a/modules/ui/treemacs/packages.el +++ b/modules/ui/treemacs/packages.el @@ -1,7 +1,7 @@ ;; -*- no-byte-compile: t; -*- ;;; ui/treemacs/packages.el -(package! treemacs :pin "8c6df39f01a4d47fda2cc943645fa067f771b748") +(package! treemacs :pin "54ef590b7621032a76f8f3e307032fc13c802371") (package! treemacs-nerd-icons :pin "9876cb478145a0ec4e36f64ff6583f3de7126216") ;; These packages have no :pin because they're in the same repo (when (modulep! :editor evil +everywhere) @@ -13,4 +13,4 @@ (package! treemacs-persp)) (when (and (modulep! +lsp) (not (modulep! :tools lsp +eglot))) - (package! lsp-treemacs :pin "e54e74deb8150964e3c3024e1ec14295a34e2a3b")) + (package! lsp-treemacs :pin "1d43e9e0307f84496a4a7ddf9dba481000391dbd")) diff --git a/modules/ui/vc-gutter/README.org b/modules/ui/vc-gutter/README.org index d8f56e1b4..5ae32756f 100644 --- a/modules/ui/vc-gutter/README.org +++ b/modules/ui/vc-gutter/README.org @@ -13,44 +13,32 @@ Supports Git, Svn, Hg, and Bzr. [[doom-contrib-maintainer:][Become a maintainer?]] ** Module flags -- +diff-hl :: - Use [[doom-package:diff-hl]] instead of git-gutter to power the VC gutter. It is a little - faster, but is slightly more prone to visual glitching. [[doom-package:diff-hl]] is intended to - replace git-gutter at some point in the future. - +pretty :: - Apply some stylistic defaults to the fringe, enabling thin bars in the fringe. - This look takes after the modern look of git-gutter in VSCode and Sublime - Text, without sacrificing on fringe width (which squeeze other indicators, - like flycheck's, flymake's, or flyspell's). However, this will look bad with - themes that invert the foreground/background of either git-gutter's or - diff-hl's faces (like modus-themes does). + Apply some stylistic defaults to the fringe that present the diff in the + fringe as thin bars, taking after the modern look of the git-gutter plugin in + VSCode and Sublime Text. However, this will look bad with themes that invert + the foreground/background of diff-hl's faces (like modus-themes does). ** Packages -- [[doom-package:git-gutter-fringe]] unless [[doom-module:+diff-hl]] -- [[doom-package:diff-hl]] if [[doom-module:+diff-hl]] +- [[doom-package:diff-hl]] ** Hacks - The VC gutter will be updated when pressing ESC, leaving insert mode (evil users), or refocusing the frame or window where it is active. - If [[doom-module:+pretty]] is enabled - - The fringes that both git-gutter-fringe and diff-hl define will be replaced - with a set of thin bars. This achieves a slicker look closer to git-gutter's - appearance in VSCode or Sublime Text, but may look weird for themes that - swap their faces' :foreground and :background (like modus-themes). + - The fringes that diff-hl define will be replaced with a set of thin bars. + This achieves a slicker look closer to git-gutter's appearance in VSCode or + Sublime Text, but may look weird for themes that swap their faces' + :foreground and :background (like modus-themes). - The fringes are moved to the outside of the margins (closest to the frame edge), so they have some breathing space away from the buffer's contents. -- If [[doom-package:+diff-hl]] is enabled: - - ~diff-hl-revert-hunk~ displays a preview popup of the hunk being reverted. - It takes up ~50% of the frame, by default, whether you're reverting 2 lines - or 20. Since this isn't easily customized, it has been advised to shrink - this popup to the side of its contents. - - ~diff-hl-revert-hunk~ will sometimes move the cursor to an unexpected - location (the bounds of hunks, is my guess), but this is not intuitive and - often unexpected. Cursor movements have been suppressed for it. -- If +diff-hl is *not* enabled: - - Sometimes, ~git-gutter:next-hunk~ and ~git-gutter:previous-hunk~ get - confused about the order of hunks. They have been advised to fix this - (although the hack is a little inefficient). +- ~diff-hl-revert-hunk~ displays a preview popup of the hunk being reverted. + It takes up ~50% of the frame, by default, whether you're reverting 2 lines + or 20. Since this isn't easily customized, it has been advised to shrink + this popup to the side of its contents. +- ~diff-hl-revert-hunk~ will sometimes move the cursor to an unexpected + location (the bounds of hunks, is my guess), but this is not intuitive and + often unexpected. Cursor movements have been suppressed for it. ** TODO Changelog # This section will be machine generated. Don't edit it by hand. diff --git a/modules/ui/vc-gutter/autoload/diff-hl.el b/modules/ui/vc-gutter/autoload/diff-hl.el index 80ec98003..8c8eefca5 100644 --- a/modules/ui/vc-gutter/autoload/diff-hl.el +++ b/modules/ui/vc-gutter/autoload/diff-hl.el @@ -1,11 +1,22 @@ ;;; ui/vc-gutter/autoload/diff-hl.el -*- lexical-binding: t; -*- -;;;###if (modulep! +diff-hl) ;;;###autoload (defalias '+vc-gutter/stage-hunk #'diff-hl-stage-current-hunk) ;;;###autoload -(defalias '+vc-gutter/revert-hunk #'diff-hl-revert-hunk) -;;;###autoload (defalias '+vc-gutter/next-hunk #'diff-hl-next-hunk) ;;;###autoload (defalias '+vc-gutter/previous-hunk #'diff-hl-previous-hunk) + +(defvar vc-suppress-confirm) +;;;###autoload +(defun +vc-gutter/revert-hunk (&optional no-prompt) + "Invoke `diff-hl-revert-hunk'." + (interactive "P") + (let ((vc-suppress-confirm (if no-prompt t))) + (call-interactively #'diff-hl-revert-hunk))) + +;;;###autoload +(defun +vc-gutter/save-and-revert-hunk () + "Invoke `diff-hl-revert-hunk' with `vc-suppress-confirm' set." + (interactive) + (+vc-gutter/revert-hunk t)) diff --git a/modules/ui/vc-gutter/autoload/git-gutter.el b/modules/ui/vc-gutter/autoload/git-gutter.el deleted file mode 100644 index 7d0899f2f..000000000 --- a/modules/ui/vc-gutter/autoload/git-gutter.el +++ /dev/null @@ -1,11 +0,0 @@ -;;; ui/vc-gutter/autoload/vc-gutter.el -*- lexical-binding: t; -*- -;;;###if (not (modulep! +diff-hl)) - -;;;###autoload -(defalias '+vc-gutter/stage-hunk #'git-gutter:stage-hunk) -;;;###autoload -(defalias '+vc-gutter/revert-hunk #'git-gutter:revert-hunk) -;;;###autoload -(defalias '+vc-gutter/next-hunk #'git-gutter:next-hunk) -;;;###autoload -(defalias '+vc-gutter/previous-hunk #'git-gutter:previous-hunk) diff --git a/modules/ui/vc-gutter/config.el b/modules/ui/vc-gutter/config.el index cd78a4f59..21bf72e5d 100644 --- a/modules/ui/vc-gutter/config.el +++ b/modules/ui/vc-gutter/config.el @@ -1,13 +1,5 @@ ;;; ui/vc-gutter/config.el -*- lexical-binding: t; -*- -;; TODO Implement me -(defvar +vc-gutter-in-margin nil - "If non-nil, use the margin for diffs instead of the fringe.") - -(defvar +vc-gutter-in-remote-files nil - "If non-nil, enable the vc gutter in remote files (e.g. open through TRAMP).") - - ;; ;;; Default styles @@ -23,36 +15,28 @@ ;; having to shrink the fringe and sacrifice precious space for other fringe ;; indicators (like flycheck or flyspell). ;; REVIEW: Extract these into a package with faces that themes can target. - (if (not (modulep! +diff-hl)) - (after! git-gutter-fringe - (define-fringe-bitmap 'git-gutter-fr:added [224] - nil nil '(center repeated)) - (define-fringe-bitmap 'git-gutter-fr:modified [224] - nil nil '(center repeated)) - (define-fringe-bitmap 'git-gutter-fr:deleted [128 192 224 240] - nil nil 'bottom)) - (defadvice! +vc-gutter-define-thin-bitmaps-a (&rest args) - :override #'diff-hl-define-bitmaps - (define-fringe-bitmap 'diff-hl-bmp-middle [224] nil nil '(center repeated)) - (define-fringe-bitmap 'diff-hl-bmp-delete [240 224 192 128] nil nil 'top)) - (defun +vc-gutter-type-face-fn (type _pos) - (intern (format "diff-hl-%s" type))) - (defun +vc-gutter-type-at-pos-fn (type _pos) - (if (eq type 'delete) - 'diff-hl-bmp-delete - 'diff-hl-bmp-middle)) - (advice-add #'diff-hl-fringe-bmp-from-pos :override #'+vc-gutter-type-at-pos-fn) - (advice-add #'diff-hl-fringe-bmp-from-type :override #'+vc-gutter-type-at-pos-fn) - (setq diff-hl-draw-borders nil) - (add-hook! 'diff-hl-mode-hook - (defun +vc-gutter-fix-diff-hl-faces-h () - (mapc (doom-rpartial #'set-face-background nil) - '(diff-hl-insert - diff-hl-delete - diff-hl-change))))) + (defadvice! +vc-gutter-define-thin-bitmaps-a (&rest args) + :override #'diff-hl-define-bitmaps + (define-fringe-bitmap 'diff-hl-bmp-middle [224] nil nil '(center repeated)) + (define-fringe-bitmap 'diff-hl-bmp-delete [240 224 192 128] nil nil 'top)) + (defun +vc-gutter-type-face-fn (type _pos) + (intern (format "diff-hl-%s" type))) + (defun +vc-gutter-type-at-pos-fn (type _pos) + (if (eq type 'delete) + 'diff-hl-bmp-delete + 'diff-hl-bmp-middle)) + (advice-add #'diff-hl-fringe-bmp-from-pos :override #'+vc-gutter-type-at-pos-fn) + (advice-add #'diff-hl-fringe-bmp-from-type :override #'+vc-gutter-type-at-pos-fn) + (setq diff-hl-draw-borders nil) + (add-hook! 'diff-hl-mode-hook + (defun +vc-gutter-fix-diff-hl-faces-h () + (mapc (doom-rpartial #'set-face-background nil) + '(diff-hl-insert + diff-hl-delete + diff-hl-change)))) - ;; FIX: To minimize overlap between flycheck indicators and git-gutter/diff-hl - ;; indicators in the left fringe. + ;; FIX: To minimize overlap between flycheck indicators and diff-hl indicators + ;; in the left fringe. (after! flycheck ;; Let diff-hl have left fringe, flycheck can have right fringe (setq flycheck-indication-mode 'right-fringe) @@ -61,99 +45,10 @@ [16 48 112 240 112 48 16] nil nil 'center))) -;; -;;; git-gutter - -(use-package! git-gutter - :unless (modulep! +diff-hl) - :commands git-gutter:revert-hunk git-gutter:stage-hunk git-gutter:previous-hunk git-gutter:next-hunk - :init - (add-hook! 'find-file-hook - (defun +vc-gutter-init-maybe-h () - "Enable `git-gutter-mode' in the current buffer. -If the buffer doesn't represent an existing file, `git-gutter-mode's activation -is deferred until the file is saved. Respects `git-gutter:disabled-modes'." - (let ((file-name (buffer-file-name (buffer-base-buffer)))) - (cond - ((and (file-remote-p (or file-name default-directory)) - (not +vc-gutter-in-remote-files))) - ;; UX: If not a valid file, wait until it is written/saved to activate - ;; git-gutter. - ((not (and file-name (vc-backend file-name))) - (add-hook 'after-save-hook #'+vc-gutter-init-maybe-h nil 'local)) - ;; UX: Allow git-gutter or git-gutter-fringe to activate based on the - ;; type of frame we're in. This allows git-gutter to work for silly - ;; geese who open both tty and gui frames from the daemon. - ((if (and (display-graphic-p) - (require 'git-gutter-fringe nil t)) - (setq-local git-gutter:init-function #'git-gutter-fr:init - git-gutter:view-diff-function #'git-gutter-fr:view-diff-infos - git-gutter:clear-function #'git-gutter-fr:clear - git-gutter:window-width -1) - (setq-local git-gutter:init-function 'nil - git-gutter:view-diff-function #'git-gutter:view-diff-infos - git-gutter:clear-function #'git-gutter:clear-diff-infos - git-gutter:window-width 1)) - (unless (memq major-mode git-gutter:disabled-modes) - (git-gutter-mode +1) - (remove-hook 'after-save-hook #'+vc-gutter-init-maybe-h 'local))))))) - - ;; UX: Disable in Org mode, as per syl20bnr/spacemacs#10555 and - ;; syohex/emacs-git-gutter#24. Apparently, the mode-enabling function for - ;; global minor modes gets called for new buffers while they are still in - ;; `fundamental-mode', before a major mode has been assigned. I don't know - ;; why this is the case, but adding `fundamental-mode' here fixes the issue. - (setq git-gutter:disabled-modes '(fundamental-mode image-mode pdf-view-mode)) - :config - (set-popup-rule! "^\\*git-gutter" :select nil :size '+popup-shrink-to-fit) - - ;; PERF: Only enable the backends that are available, so it doesn't have to - ;; check when opening each buffer. - (setq git-gutter:handled-backends - (cons 'git (cl-remove-if-not #'executable-find (list 'hg 'svn 'bzr) - :key #'symbol-name))) - - ;; UX: update git-gutter on focus (in case I was using git externally) - (add-hook 'focus-in-hook #'git-gutter:update-all-windows) - - ;; Stop git-gutter doing things when we don't want - (remove-hook 'post-command-hook #'git-gutter:post-command-hook) - (advice-remove #'quit-window #'git-gutter:quit-window) - (advice-remove #'switch-to-buffer #'git-gutter:switch-to-buffer) - - (add-hook! '(doom-escape-hook doom-switch-window-hook) :append - (defun +vc-gutter-update-h (&rest _) - "Refresh git-gutter on ESC. Return nil to prevent shadowing other -`doom-escape-hook' hooks." - (ignore (or (memq this-command '(git-gutter:stage-hunk - git-gutter:revert-hunk)) - inhibit-redisplay - (if git-gutter-mode - (git-gutter) - (+vc-gutter-init-maybe-h)))))) - ;; UX: update git-gutter when using magit commands - (advice-add #'magit-stage-file :after #'+vc-gutter-update-h) - (advice-add #'magit-unstage-file :after #'+vc-gutter-update-h) - - ;; UX: update git-gutter after reverting a buffer - (add-hook 'after-revert-hook #'+vc-gutter-update-h) - - ;; FIX: stop git-gutter:{next,previous}-hunk from jumping to random hunks. - (defadvice! +vc-gutter--fix-linearity-of-hunks-a (diffinfos is-reverse) - :override #'git-gutter:search-near-diff-index - (cl-position-if (let ((lineno (line-number-at-pos)) - (fn (if is-reverse #'> #'<))) - (lambda (line) (funcall fn lineno line))) - diffinfos - :key #'git-gutter-hunk-start-line - :from-end is-reverse))) - - ;; ;;; diff-hl (use-package! diff-hl - :when (modulep! +diff-hl) :hook (find-file . diff-hl-mode) :hook (vc-dir-mode . diff-hl-dir-mode) :hook (dired-mode . diff-hl-dired-mode) @@ -162,8 +57,6 @@ is deferred until the file is saved. Respects `git-gutter:disabled-modes'." :config (set-popup-rule! "^\\*diff-hl" :select nil :size '+popup-shrink-to-fit) - ;; PERF: reduce load on remote - (defvaralias 'diff-hl-disable-on-remote '+vc-gutter-in-remote-files) ;; PERF: A slightly faster algorithm for diffing. (setq vc-git-diff-switches '("--histogram")) ;; PERF: Slightly more conservative delay before updating the diff @@ -185,7 +78,7 @@ is deferred until the file is saved. Respects `git-gutter:disabled-modes'." :n "{" #'diff-hl-show-hunk-previous :n "}" #'diff-hl-show-hunk-next :n "S" #'diff-hl-show-hunk-stage-hunk)) - ;; UX: Refresh git-gutter on ESC or refocusing the Emacs frame. + ;; UX: Refresh gutter on ESC or refocusing the Emacs frame. (add-hook! '(doom-escape-hook doom-switch-window-hook) :append (defun +vc-gutter-update-h (&rest _) "Return nil to prevent shadowing other `doom-escape-hook' hooks." diff --git a/modules/ui/vc-gutter/packages.el b/modules/ui/vc-gutter/packages.el index 3ed651912..73fc15e98 100644 --- a/modules/ui/vc-gutter/packages.el +++ b/modules/ui/vc-gutter/packages.el @@ -1,6 +1,4 @@ ;; -*- no-byte-compile: t; -*- ;;; ui/vc-gutter/packages.el -(if (modulep! +diff-hl) - (package! diff-hl :pin "96620839430c1205cbb8c92dd54973397f70f9d2") - (package! git-gutter-fringe :pin "648cb5b57faec55711803cdc9434e55a733c3eba")) +(package! diff-hl :pin "11f3113e790526d5ee00f61f8e7cd0d01e323b2e")