dev: merge branch 'master' into emenel

This commit is contained in:
Matt Nish-Lapidus 2024-06-24 17:27:06 -04:00
commit 5147ec7d73
78 changed files with 365 additions and 360 deletions

View file

@ -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. # 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)}" TMPDIR="${TMPDIR:-$($emacs --eval '(princ (temporary-file-directory))' 2>/dev/null)}"
if [ -z "$TMPDIR" ]; then if [ -z "$TMPDIR" ]; then
>&2 echo "Error: failed to run Emacs with command '$EMACS'" echo "Error: failed to run Emacs with command '$EMACS'"
>&2 echo echo
>&2 echo "Are you sure Emacs is installed and in your \$PATH?" echo "Are you sure Emacs is installed and in your \$PATH?"
exit 1 exit 1
fi fi >&2
# Doom respects $EMACSDIR to tell it where Doom lives. If it fails, then this is # 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 # either isn't bash, or it's a posix shell being directly sourced with sh, which
# is unsupported. # is unsupported.
export EMACSDIR="${EMACSDIR:-$(CDPATH='' cd -- "$(dirname -- "${BASH_SOURCE:-$0}")/.." && pwd)}" export EMACSDIR="${EMACSDIR:-$(CDPATH='' cd -- "$(dirname -- "${BASH_SOURCE:-$0}")/.." && pwd)}"
if [ ! -f "$EMACSDIR/early-init.el" ]; then if [ ! -f "$EMACSDIR/early-init.el" ]; then
>&2 echo "Error: cannot load $EMACSDIR/early-init.el." echo "Error: cannot load $EMACSDIR/early-init.el."
>&2 echo echo
>&2 echo "Either the file doesn't exist (indicating a broken or missing Doom install)" 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)." echo "or that doomscript is being source directly (which is unsupported)."
>&2 echo echo
>&2 echo "Set \$EMACSDIR to the path of an existing Doom installation." echo "Set \$EMACSDIR to the path of an existing Doom installation."
exit 1 exit 1
fi fi >&2
# Some state that Doom's CLI framework needs to know about the terminal. Read # Some state that Doom's CLI framework needs to know about the terminal. Read
# the comments at the top of bin/doom for explanations. # the comments at the top of bin/doom for explanations.
export __DOOMPID="${__DOOMPID:-$$}" export __DOOMPID="${__DOOMPID:-$$}"
@ -75,8 +75,8 @@ $emacs --load "$EMACSDIR/early-init" \
-- "$@" -- "$@"
exit=$? exit=$?
# To simulate execve syscalls, Doom generates a temporary exit-script if a # To simulate execve syscalls (which replaces the running process), Doom
# Doomscript returns a 254 exit code. # generates a temporary exit-script if a Doomscript returns a 254 exit code.
if [ "${exit:-0}" -eq 254 ]; then if [ "${exit:-0}" -eq 254 ]; then
# The user may have a noexec flag set on /tmp, so the exit-script should be # The user may have a noexec flag set on /tmp, so the exit-script should be
# passed to /bin/sh rather than executed directly. # passed to /bin/sh rather than executed directly.

View file

@ -64,8 +64,8 @@ are great, but this file exists to add demos for Doom's API and beyond.
(after! helm ...) (after! helm ...)
;; An unquoted list of package symbols (i.e. BODY is evaluated once both magit ;; An unquoted list of package symbols (i.e. BODY is evaluated once both magit
;; and git-gutter have loaded) ;; and diff-hl have loaded)
(after! (magit git-gutter) ...) (after! (magit diff-hl) ...)
;; An unquoted, nested list of compound package lists, using any combination of ;; An unquoted, nested list of compound package lists, using any combination of
;; :or/:any and :and/:all ;; :or/:any and :and/:all

View file

@ -730,11 +730,12 @@ on."
;; a less intrusive `delete-trailing-whitespaces' on save ;; a less intrusive `delete-trailing-whitespaces' on save
:hook (doom-first-buffer . ws-butler-global-mode) :hook (doom-first-buffer . ws-butler-global-mode)
:config :config
;; ws-butler normally preserves whitespace in the buffer (but strips it from (pushnew! ws-butler-global-exempt-modes
;; the written file). While sometimes convenient, this behavior is not 'special-mode
;; intuitive. To the average user it looks like whitespace cleanup is failing, 'comint-mode
;; which causes folks to redundantly install their own. 'term-mode
(setq ws-butler-keep-whitespace-before-point nil)) 'eshell-mode
'diff-mode))
(provide 'doom-editor) (provide 'doom-editor)
;;; doom-editor.el ends here ;;; doom-editor.el ends here

View file

@ -87,7 +87,7 @@ and Emacs states, and for non-evil users.")
;; 1. Quit active states; e.g. highlights, searches, snippets, iedit, ;; 1. Quit active states; e.g. highlights, searches, snippets, iedit,
;; multiple-cursors, recording macros, etc. ;; multiple-cursors, recording macros, etc.
;; 2. Close popup windows remotely (if it is allowed to) ;; 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' ;; 4. Or fall back to `keyboard-quit'
;; ;;
;; And it should do these things incrementally, rather than all at once. And it ;; And it should do these things incrementally, rather than all at once. And it

View file

@ -641,8 +641,8 @@ is:
(after! (:and package-a package-b ...) BODY...) (after! (:and package-a package-b ...) BODY...)
(after! (:and package-a (:or package-b package-c) ...) 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 - An unquoted list of package symbols (i.e. BODY is evaluated once both magit
and git-gutter have loaded) and diff-hl have loaded)
(after! (magit git-gutter) BODY...) (after! (magit diff-hl) BODY...)
If :or/:any/:and/:all are omitted, :and/:all are implied. If :or/:any/:and/:all are omitted, :and/:all are implied.
This emulates `eval-after-load' with a few key differences: This emulates `eval-after-load' with a few key differences:

View file

@ -351,9 +351,9 @@ If ENABLED-ONLY, return nil if the containing module isn't enabled."
(and (or (null enabled-only) (and (or (null enabled-only)
(doom-module-p category module)) (doom-module-p category module))
(cons 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)) (cons :core nil))
((file-in-directory-p path doom-user-dir) ((string-match (concat "^" (regexp-quote doom-user-dir)) path)
(cons :user nil)))))) (cons :user nil))))))
(defun doom-module-load-path (&optional module-load-path) (defun doom-module-load-path (&optional module-load-path)

View file

@ -242,7 +242,7 @@ windows, switch to `doom-fallback-buffer'. Otherwise, delegate to original
;;; Fringes ;;; Fringes
;; Reduce the clutter in the fringes; we'd like to reserve that space for more ;; 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 (setq indicate-buffer-boundaries nil
indicate-empty-lines nil) indicate-empty-lines nil)

View file

@ -79,7 +79,7 @@
(when (< emacs-major-version 27) (when (< emacs-major-version 27)
(user-error (user-error
(concat (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) "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 " "\n\nA guide for installing a newer version of Emacs can be found at:\n\n "
(format "https://docs.doomemacs.org/-/install/%s" (format "https://docs.doomemacs.org/-/install/%s"
@ -201,7 +201,7 @@
"Current version of Doom Emacs core.") "Current version of Doom Emacs core.")
;; DEPRECATED: Remove these when the modules are moved out of 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.") "Current version of Doom Emacs.")
(defvar doom-init-time nil (defvar doom-init-time nil

View file

@ -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)) (when (and (not (seq-find (doom-rpartial #'string-match-p file) exclude))
(file-readable-p file)) (file-readable-p file))
(doom-log "loaddefs:scan: %s" file) (doom-log "loaddefs:scan: %s" file)
(setq file (file-truename file))
(with-temp-buffer (with-temp-buffer
(if literal (if literal
(insert-file-contents file) (insert-file-contents file)

View file

@ -538,7 +538,7 @@ which case it will save it without prompting."
(when (or (derived-mode-p 'dired-mode) (when (or (derived-mode-p 'dired-mode)
(derived-mode-p 'wdired-mode)) (derived-mode-p 'wdired-mode))
default-directory) default-directory)
(user-error "Cannot determine the file path of the current buffer")))) (user-error "Current buffer isn't visiting a file"))))
;;;###autoload ;;;###autoload
(defun doom/sudo-save-buffer () (defun doom/sudo-save-buffer ()

View file

@ -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 FONT can be a `font-spec', a font object, an XFT font string, or an XLFD font
string." string."
(cl-check-type font (or font string vector))
(when (and (stringp font) (when (and (stringp font)
(string-prefix-p "-" font)) (string-prefix-p "-" font))
(setq font (x-decompose-font-name font))) (setq font (x-decompose-font-name font)))
@ -45,7 +44,8 @@ string."
((vectorp font) ((vectorp font)
(dolist (i '(1 2 3) (x-compose-font-name font)) (dolist (i '(1 2 3) (x-compose-font-name font))
(unless (aref font i) (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 (x-resolve-font-name font))
(font (font-spec :name font))) (font (font-spec :name font)))
(unless (font-get font :size) (unless (font-get font :size)

View file

@ -232,10 +232,12 @@ Must be run from a magit diff buffer."
:test #'equal))) :test #'equal)))
(save-excursion (save-excursion
(while (re-search-forward "^-" nil t) (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 (save-excursion
(while (re-search-forward "^+" nil t) (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)) (unless (= (length before) (length after))
(user-error "Uneven number of packages being bumped")) (user-error "Uneven number of packages being bumped"))
(dolist (p1 before) (dolist (p1 before)

View file

@ -92,8 +92,8 @@ and `format!' into colored output, where COLOR is any car of this list (or
(not (stringp str)) (not (stringp str))
(string-blank-p str)) (string-blank-p str))
str str
(let ((dir (or dir (file-truename default-directory))) (let* ((dir (or dir default-directory))
(str (file-truename str))) (str (expand-file-name str dir)))
(if (file-in-directory-p str dir) (if (file-in-directory-p str dir)
(file-relative-name str dir) (file-relative-name str dir)
(abbreviate-file-name str)))))) (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.") 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 (defvar doom-print-level 'notice
"The current, default logging level.") "The current, default logging level.")
@ -143,11 +149,11 @@ Accepts `ansi' and `text-properties'. `nil' means don't render styles at all.")
(format nil) (format nil)
(level doom-print-level) (level doom-print-level)
(newline t) (newline t)
(stream standard-output)) (stream (or doom-print-stream standard-output)))
"Print OUTPUT to stdout. "Print OUTPUT to stdout.
Unlike `message', this: 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). - Indents according to `doom-print-indent' (if FORMAT is non-nil).
- Prints to stdout instead of stderr in batch mode. - Prints to stdout instead of stderr in batch mode.
- Recognizes more terminal escape codes (only 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) `(letf! ((,sym ,streamspec)
(standard-output (doom-print--redirect-standard-output ,sym t)) (standard-output (doom-print--redirect-standard-output ,sym t))
(#'message (doom-print--redirect-message ,sym (if noninteractive 'debug 'notice))) (#'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))) ,@body)))
@ -260,8 +266,8 @@ based on the print level of the message. For example:
(get (car spec) 'print-level))) (get (car spec) 'print-level)))
(cadr spec))))) (cadr spec)))))
(defun doom-print--redirect-standard-output (streamspec level) (defun doom-print--redirect-standard-output (streamspec level &optional old-stream)
(let ((old standard-output) (let ((old (or old-stream standard-output))
(streams (doom-print--redirect-streams streamspec level))) (streams (doom-print--redirect-streams streamspec level)))
(lambda (ch) (lambda (ch)
(let ((str (char-to-string 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) (defun doom-print--redirect-message (streamspec level)
(let ((old (symbol-function #'message)) (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) (lambda (message &rest args)
(when message (when message
(let ((output (apply #'doom-print--format message args))) (let ((output (apply #'doom-print--format message args)))

View file

@ -29,20 +29,16 @@
;; doom-editor.el ;; doom-editor.el
(package! better-jumper :pin "47622213783ece37d5337dc28d33b530540fc319") (package! better-jumper :pin "47622213783ece37d5337dc28d33b530540fc319")
(package! dtrt-indent :pin "5d1b44f9a1a484ca229cc14f8062609a10ef4891") (package! dtrt-indent :pin "939c5e374ac0175bb7d561542e22e47a72d04aa8")
(package! helpful :pin "a32a5b3d959a7fccf09a71d97b3d7c888ac31c69") (package! helpful :pin "4ba24cac9fb14d5fdc32582cd947572040e82b2c")
(package! pcre2el :pin "380723b2701cceb75c266440fb8db918f3340d50") (package! pcre2el :pin "380723b2701cceb75c266440fb8db918f3340d50")
(package! smartparens :pin "a5c68cac1bea737b482a37aa92de4f6efbf7580b") (package! smartparens :pin "f7cf316715e5018186c226aab8242c9e5ce131c8")
(package! ws-butler (package! ws-butler :pin "e3a38d93e01014cd47bf5af4924459bd145fd7c4")
;; 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")
;; doom-projects.el ;; doom-projects.el
(package! projectile :pin "0163b335a18af0f077a474d4dc6b36e22b5e3274") (package! projectile :pin "0163b335a18af0f077a474d4dc6b36e22b5e3274")
(package! project :pin "93aa1872e93a681a44cae03fecb8df4101719897") (package! project :pin "bf4c3cfcfbf3423d79170aa880a1abb332ed942e")
;; doom-keybinds.el ;; doom-keybinds.el
(package! general :pin "826bf2b97a0fb4a34c5eb96ec2b172d682fd548f") (package! general :pin "826bf2b97a0fb4a34c5eb96ec2b172d682fd548f")
(package! which-key :pin "1e89fa000e9ba9549f15ef57abccd118d5f2fe1a") (package! which-key :pin "ed389312170df955aaf10c2e120cc533ed5c509e")

View file

@ -1,7 +1,7 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; completion/company/packages.el ;;; completion/company/packages.el
(package! company :pin "b0a522ac5bf8ba3d2f4f22e3aa846a4f82978a16") (package! company :pin "1a0fc12a9c3d25e28c22f319e7b097f435b1c27d")
(package! company-dict :pin "cd7b8394f6014c57897f65d335d6b2bd65dab1f4") (package! company-dict :pin "cd7b8394f6014c57897f65d335d6b2bd65dab1f4")
(when (modulep! +childframe) (when (modulep! +childframe)
(package! company-box :pin "c4f2e243fba03c11e46b1600b124e036f2be7691")) (package! company-box :pin "c4f2e243fba03c11e46b1600b124e036f2be7691"))

View file

@ -1,8 +1,8 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; completion/corfu/packages.el ;;; completion/corfu/packages.el
(package! corfu :pin "35cd5a0f3cba89766072e3e933d1fe2ee02f2289") (package! corfu :pin "cdc3e13ad312f5f12b3f78f842fff0b398eb4473")
(package! cape :pin "e01e4430234850263d326ad4521849cd46e64059") (package! cape :pin "f61da109a9e4491614938c300291060fd8855c1b")
(when (modulep! +icons) (when (modulep! +icons)
(package! nerd-icons-corfu :pin "7077bb76fefc15aed967476406a19dc5c2500b3c")) (package! nerd-icons-corfu :pin "7077bb76fefc15aed967476406a19dc5c2500b3c"))
(when (and (not (modulep! :completion vertico)) (when (and (not (modulep! :completion vertico))
@ -14,4 +14,4 @@
(when (modulep! :os tty) (when (modulep! :os tty)
(package! corfu-terminal :pin "501548c3d51f926c687e8cd838c5865ec45d03cc")) (package! corfu-terminal :pin "501548c3d51f926c687e8cd838c5865ec45d03cc"))
(when (modulep! :editor snippets) (when (modulep! :editor snippets)
(package! yasnippet-capf :pin "9043f8275176a8f198ce8e81fadab1870fa165bb")) (package! yasnippet-capf :pin "744dedb7837d0c7e07817d36ec752a0cd813f55c"))

View file

@ -1,7 +1,7 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; completion/helm/packages.el ;;; completion/helm/packages.el
(package! helm :pin "28f62344fed0d8be0bcef5aa8a018ba58198ba0c") (package! helm :pin "f8949afd9b44de4a8149874ef40e1250826d40bd")
(package! helm-company :pin "4622b82353220ee6cc33468f710fa5b6b253b7f1") (package! helm-company :pin "4622b82353220ee6cc33468f710fa5b6b253b7f1")
(package! helm-c-yasnippet :pin "c5880e740da101fde7a995e94a7b16c330e57583") (package! helm-c-yasnippet :pin "c5880e740da101fde7a995e94a7b16c330e57583")
(package! helm-descbinds :pin "ca03f02da4e54a1d0a2d5498b86e1639aa808d8c") (package! helm-descbinds :pin "ca03f02da4e54a1d0a2d5498b86e1639aa808d8c")

View file

@ -1,7 +1,7 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; completion/ivy/packages.el ;;; completion/ivy/packages.el
(package! swiper :pin "1f88e5499046d166d22bf733a3877aec3b424947") (package! swiper :pin "2a25a6fb5b081cb141c5eccac8ee58ab1feeb747")
(package! ivy) (package! ivy)
(package! ivy-hydra) (package! ivy-hydra)
(package! ivy-avy) (package! ivy-avy)
@ -13,7 +13,7 @@
(package! wgrep :pin "208b9d01cfffa71037527e3a324684b3ce45ddc4") (package! wgrep :pin "208b9d01cfffa71037527e3a324684b3ce45ddc4")
(if (modulep! +prescient) (if (modulep! +prescient)
(package! ivy-prescient :pin "c39bf07c56b427bf41aafd7d20eaef5cf3c312b5") (package! ivy-prescient :pin "0765418e4362099db8788fcb745ce9b7602aa001")
(when (modulep! +fuzzy) (when (modulep! +fuzzy)
(package! flx :pin "4b1346eb9a8a76ee9c9dede69738c63ad97ac5b6"))) (package! flx :pin "4b1346eb9a8a76ee9c9dede69738c63ad97ac5b6")))
@ -21,4 +21,4 @@
(package! ivy-posframe :pin "533a8e368fcabfd534761a5c685ce713376fa594")) (package! ivy-posframe :pin "533a8e368fcabfd534761a5c685ce713376fa594"))
(when (modulep! +icons) (when (modulep! +icons)
(package! nerd-icons-ivy-rich :pin "7197614b27fd562e64b11c91d41bed4443aded90")) (package! nerd-icons-ivy-rich :pin "86a896bb48fed543993f96e4b288047aa7e013c9"))

View file

@ -1,19 +1,19 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; completion/vertico/packages.el ;;; 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 :pin "fe4852280006e61be7f1374d021ee06155ce5a26")
(package! consult-dir :pin "3f5f4b71ebe819392cb090cda71bd39a93bd830a") (package! consult-dir :pin "15891383f34d43acc5bb82bda92239b1f54cf178")
(when (and (modulep! :checkers syntax) (when (and (modulep! :checkers syntax)
(not (modulep! :checkers syntax +flymake))) (not (modulep! :checkers syntax +flymake)))
(package! consult-flycheck :pin "754f5497d827f7d58009256a21af614cc44378a3")) (package! consult-flycheck :pin "754f5497d827f7d58009256a21af614cc44378a3"))
(package! embark :pin "d3c9d1b4c890cf365846cc2b418f37341999e79f") (package! embark :pin "9c166c4b96a0b1e85401bcc6fb95ce021e7b5013")
(package! embark-consult :pin "d3c9d1b4c890cf365846cc2b418f37341999e79f") (package! embark-consult :pin "9c166c4b96a0b1e85401bcc6fb95ce021e7b5013")
(package! marginalia :pin "3275d1f85cb020280979a050054b843f7563aea2") (package! marginalia :pin "da72da4622c7b38741e6968678028f7e0564816c")
(package! wgrep :pin "208b9d01cfffa71037527e3a324684b3ce45ddc4") (package! wgrep :pin "208b9d01cfffa71037527e3a324684b3ce45ddc4")

View file

@ -39,7 +39,7 @@
(evil-ex-define-cmd "gstage" #'magit-stage) (evil-ex-define-cmd "gstage" #'magit-stage)
(evil-ex-define-cmd "gunstage" #'magit-unstage) (evil-ex-define-cmd "gunstage" #'magit-unstage)
(evil-ex-define-cmd "gblame" #'magit-blame) (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 ;;; Dealing with buffers
(evil-ex-define-cmd "k[ill]" #'doom/kill-current-buffer) (evil-ex-define-cmd "k[ill]" #'doom/kill-current-buffer)

View file

@ -111,6 +111,7 @@ variable for an explanation of the defaults (in comments). See
consult consult
corfu corfu
crdt crdt
(csv "csv-mode")
(custom cus-edit) (custom cus-edit)
cus-theme cus-theme
dashboard dashboard
@ -128,6 +129,7 @@ variable for an explanation of the defaults (in comments). See
distel distel
doc-view doc-view
docker docker
eat
ebib ebib
ebuku ebuku
edbi edbi
@ -182,6 +184,7 @@ variable for an explanation of the defaults (in comments). See
info info
ivy ivy
js2-mode js2-mode
,@(if (>= emacs-major-version 30) '(kmacro))
leetcode leetcode
lispy lispy
lms lms
@ -193,6 +196,7 @@ variable for an explanation of the defaults (in comments). See
macrostep macrostep
man man
(magit magit-repos magit-submodule) (magit magit-repos magit-submodule)
magit-repos
magit-section magit-section
magit-todos magit-todos
markdown-mode markdown-mode

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 "0251080640e0da6f0eec2b7d8dd70e9c9b9915d7") (package! evil :pin "0ad84c52169068021ec3372bf52503631f2261de")
(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")
@ -12,7 +12,7 @@
(package! evil-indent-plus :pin "f392696e4813f1d3a92c7eeed333248914ba6dae") (package! evil-indent-plus :pin "f392696e4813f1d3a92c7eeed333248914ba6dae")
(package! evil-lion :pin "1e838a53b8f18a3c8bdf3e952186abc2ee9cb98e") (package! evil-lion :pin "1e838a53b8f18a3c8bdf3e952186abc2ee9cb98e")
(package! evil-nerd-commenter :pin "ae52c5070a48793e2c24474c9c8dbf20175d18a0") (package! evil-nerd-commenter :pin "ae52c5070a48793e2c24474c9c8dbf20175d18a0")
(package! evil-numbers :pin "7a1b62afc12da2b582bf84d722e7b10ca8b97065") (package! evil-numbers :pin "c7899894515d6be40dfcd589fb27c1801c5b199c")
(package! evil-snipe :pin "c2108d3932fcd2f75ac3e48250d6badd668f5b4f") (package! evil-snipe :pin "c2108d3932fcd2f75ac3e48250d6badd668f5b4f")
(package! evil-surround :pin "da05c60b0621cf33161bb4335153f75ff5c29d91") (package! evil-surround :pin "da05c60b0621cf33161bb4335153f75ff5c29d91")
(package! evil-textobj-anyblock (package! evil-textobj-anyblock
@ -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 "ca977acb83c0dd01fc57dbc6f3d3111e89f4ec9d")) (package! evil-collection :pin "acb056b1d0d3aad2f32b1ca9c019a9a2e976f03e"))

View file

@ -1,4 +1,4 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; editor/file-templates/packages.el ;;; editor/file-templates/packages.el
(package! yasnippet :pin "297546f0853a6a51f5b05e954d0c6aea8caa5ec2") (package! yasnippet :pin "eb5ba2664c3a68ae4a53bb38b85418dd131b208f")

View file

@ -7,5 +7,5 @@
(when (modulep! :editor evil) (when (modulep! :editor evil)
(package! evil-vimish-fold :pin "b6e0e6b91b8cd047e80debef1a536d9d49eef31a")) (package! evil-vimish-fold :pin "b6e0e6b91b8cd047e80debef1a536d9d49eef31a"))
(when (modulep! :tools tree-sitter) (when (modulep! :tools tree-sitter)
(package! ts-fold :pin "0627723e5f962fc72b238d4cf99a7f217e72aa3e" (package! ts-fold :pin "6ce584d1ac39f1e2bc2f66f815964e3047bd6f16"
:recipe (:host github :repo "emacs-tree-sitter/ts-fold"))) :recipe (:host github :repo "emacs-tree-sitter/ts-fold")))

View file

@ -82,6 +82,6 @@ This is controlled by `+format-on-save-disabled-modes'."
(save-excursion (save-excursion
(font-lock-fontify-region web-mode-scan-beg web-mode-scan-end))))) (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) (when (fboundp '+vc-gutter-update-h)
(+vc-gutter-update-h)))) (+vc-gutter-update-h))))

View file

@ -1,4 +1,4 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; editor/format/packages.el ;;; editor/format/packages.el
(package! apheleia :pin "96a9805ecb75aac2adde7568d26b3e3b3ffc19af") (package! apheleia :pin "61766b50b24fa16be519d77795dc63522e04dce8")

View file

@ -13,7 +13,7 @@
(defun +god--configure-cursor-and-modeline-h () (defun +god--configure-cursor-and-modeline-h ()
"Configure cursor type, cursor color and doom-modeline bar color depending on mode." "Configure cursor type, cursor color and doom-modeline bar color depending on mode."
(let* ((is-fill-overflow (> (current-column) fill-column)) (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) (previous-modeline-color (and (facep 'doom-modeline-bar)
(face-background 'doom-modeline-bar))) (face-background 'doom-modeline-bar)))
(is-god-mode (bound-and-true-p god-local-mode)) (is-god-mode (bound-and-true-p god-local-mode))
@ -26,7 +26,7 @@
(cond (buffer-read-only +god-read-only-mode-color) (cond (buffer-read-only +god-read-only-mode-color)
(is-fill-overflow +god-fill-overflow-color) (is-fill-overflow +god-fill-overflow-color)
(overwrite-mode +god-overwrite-mode-color) (overwrite-mode +god-overwrite-mode-color)
(t previous-cursor-color)))) ((or previous-cursor-color (face-background 'cursor))))))
(setq cursor-type next-cursor-type) (setq cursor-type next-cursor-type)
(unless (eq previous-cursor-color next-cursor-and-modeline-color) (unless (eq previous-cursor-color next-cursor-and-modeline-color)
(set-cursor-color next-cursor-and-modeline-color)) (set-cursor-color next-cursor-and-modeline-color))

View file

@ -6,4 +6,4 @@
(package! evil-multiedit :pin "23b53bc8743fb82a8854ba907b1d277374c93a79") (package! evil-multiedit :pin "23b53bc8743fb82a8854ba907b1d277374c93a79")
(package! evil-mc :pin "bdf893ea6f52fd0f10bece8ddae813658e17bbb4")) (package! evil-mc :pin "bdf893ea6f52fd0f10bece8ddae813658e17bbb4"))
((package! multiple-cursors :pin "234806c832994cadedb42596fe235e91bbd59e8c"))) ((package! multiple-cursors :pin "c870c18462461df19382ecd2f9374c8b902cd804")))

View file

@ -1,4 +1,4 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; editor/parinfer/packages.el ;;; editor/parinfer/packages.el
(package! parinfer-rust-mode :pin "e9a23e136b8c5f1fb718af93c19cd6ed22d8c98c") (package! parinfer-rust-mode :pin "a96c768e9dc4427c9ea18812a2f09e209a5e1a5e")

View file

@ -7,4 +7,4 @@
:recipe (:host github :recipe (:host github
:repo "doomemacs/snippets" :repo "doomemacs/snippets"
:files (:defaults "*")) :files (:defaults "*"))
:pin "c1384cc7975ee7ca7d551eb56c104d768440c3cb") :pin "3a0b029c5d104521ede8dcbeaff2972f56f067dc")

View file

@ -1,7 +1,7 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; editor/word-wrap/packages.el ;;; editor/word-wrap/packages.el
(package! adaptive-wrap :pin "70005d2012ab57c20be03c05aebd49318fe49c99") (package! adaptive-wrap :pin "a3b179ea21aeb4e8cfaf5646bb66d9d045263780")
(package! visual-fill-column (package! visual-fill-column
:recipe (:host github :repo "emacsmirror/visual-fill-column") :recipe (:host github :repo "emacsmirror/visual-fill-column")
:pin "5e74afe39d0afb911dae51af4e7a60ccdf9701f3") :pin "e04d3521b6dc2435de4c4a4b9cac5feb194f0d5b")

View file

@ -13,13 +13,17 @@ This module provides reasonable defaults and augmentations for dired.
- +icons :: - +icons ::
Enables the display of fancy icons depending on file types in dired buffers. Enables the display of fancy icons depending on file types in dired buffers.
- +ranger :: - +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 ** Packages
- [[doom-package:nerd-icons-dired]] if [[doom-module:+icons]] - [[doom-package:nerd-icons-dired]] if [[doom-module:+icons]]
- [[doom-package:dired-git-info]]
- [[doom-package:diff-hl]] - [[doom-package:diff-hl]]
- [[doom-package:diredfl]] - [[doom-package:diredfl]]
- [[doom-package:dired-rsync]] - [[doom-package:dired-rsync]]
- [[doom-package:dirvish]] if [[doom-module:+dirvish]]
- [[doom-package:fd-dired]] - [[doom-package:fd-dired]]
- [[doom-package:ranger]] if [[doom-module:+ranger]] - [[doom-package:ranger]] if [[doom-module:+ranger]]

View file

@ -145,12 +145,15 @@ we have to clean it up ourselves."
(when (modulep! +icons) (when (modulep! +icons)
(push +dired-dirvish-icon-provider dirvish-attributes)) (push +dired-dirvish-icon-provider dirvish-attributes))
(map! :map dirvish-mode-map (map! :map dirvish-mode-map
:n "b" #'dirvish-goto-bookmark :n "b" #'dirvish-quick-access
:n "z" #'dirvish-show-history :n "z" #'dirvish-history-jump
:n "f" #'dirvish-file-info-menu :n "f" #'dirvish-file-info-menu
:n "F" #'dirvish-toggle-fullscreen :n "F" #'dirvish-layout-toggle
:n "l" #'dired-find-file :n "l" #'dired-find-file
:n "h" #'dired-up-directory :n "h" #'dired-up-directory
:n "TAB" #'dirvish-subtree-toggle
:n "gh" #'dirvish-subtree-up
:n "gl" #'dirvish-subtree-down
:localleader :localleader
"h" #'dired-omit-mode)) "h" #'dired-omit-mode))

View file

@ -2,8 +2,8 @@
;;; emacs/undo/packages.el ;;; emacs/undo/packages.el
(if (modulep! +tree) (if (modulep! +tree)
(package! undo-tree :pin "f9e7eac16f674aa7ed8fa065401d26c0258a84f8") (package! undo-tree :pin "5e9f4c92348b3cfd6f140c1730294017dca4bc05")
(package! undo-fu :pin "04961ba775142627c5fa4bb94c3e507afedaecd1") (package! undo-fu :pin "ea902716f39c725db1b90dbb285b44404b3bd6df")
(package! undo-fu-session :pin "2b355c9d39b2688f859a762f2289f23fd16fadc4") (package! undo-fu-session :pin "75d78310c86901f01b35d47f3ac1a5c8368abba4")
(when (> emacs-major-version 27) ; unsupported in 27 (when (> emacs-major-version 27) ; unsupported in 27
(package! vundo :pin "10d011fb05a9db0cc2f641e5b5bebe4b5fb81b6f"))) (package! vundo :pin "a18d63a9a15d363c11e2405934e709723e472d86")))

View file

@ -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 "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. 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 ** OrgMsg
With the [[doom-module:+org]] flag, [[doom-package:org-msg]] is installed, and ~org-msg-mode~ is enabled before 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: composing the first message. To disable ~org-msg-mode~ by default:

View file

@ -50,11 +50,13 @@
"^List-.*:" "^List-.*:"
"^Received-SPF:" "^Received-SPF:"
"^DKIM-.*:" "^DKIM-.*:"
"^DomainKey-Signature:" "^DomainKey-.*:"
"^SPF-.*:" "^SPF-.*:"
"^Autocrypt:" "^Autocrypt:"
"^ARC-.*:" "^ARC-.*:"
"^Authentication-Results:") "^Authentication-Results:"
"^UI-.*:"
"^IronPort.*:")
wl-message-visible-field-list wl-message-visible-field-list
'("^Message-Id:" '("^Message-Id:"
"^User-Agent:" "^User-Agent:"
@ -84,6 +86,13 @@
(setq wl-message-id-domain wl-local-domain)) (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 ;; Use x-face only when compface installed
(when (modulep! +xface) (when (modulep! +xface)
(autoload 'x-face-decode-message-header "x-face-e21") (autoload 'x-face-decode-message-header "x-face-e21")

View file

@ -4,11 +4,11 @@
;; HACK These are wanderlust's dependencies (wanderlust depends on semi, semi ;; HACK These are wanderlust's dependencies (wanderlust depends on semi, semi
;; depends on flim, flim on apel), but they all have non-standard default ;; depends on flim, flim on apel), but they all have non-standard default
;; branches which straight cannot detect without our help. ;; branches which straight cannot detect without our help.
(package! apel :recipe (:branch "apel-wl") :pin "82eb2325bd149dc57b43a9ce9402c6c6183e4052") (package! apel :recipe (:branch "apel-wl") :pin "1a6fd3bab2cc6b0a450c2d801f77a1c9da0f72fb")
(package! flim :recipe (:branch "flim-1_14-wl") :pin "abdd2315006eb31476249223569808adb1c0f7b2") (package! flim :recipe (:branch "flim-1_14-wl") :pin "23bb29d70a13cada2eaab425ef80071564586a6d")
(package! semi :recipe (:branch "semi-1_14-wl") :pin "9063a4485b148a767ea924f0e7cc78d3524ba256") (package! semi :recipe (:branch "semi-1_14-wl") :pin "85a52b899ac89be504d9e38d8d406bba98f4b0b3")
(package! wanderlust :pin "c15e8ece4f34f10479e17cda19d10b98f6be3ec1") (package! wanderlust :pin "8a0ea2146ee919a5344bb25f198d45016bc716d9")
(when (modulep! +xface) (when (modulep! +xface)
(package! x-face-e21 (package! x-face-e21

View file

@ -28,8 +28,8 @@
:desc "Next buffer" "è" #'next-buffer) :desc "Next buffer" "è" #'next-buffer)
(:prefix-map ("g" . "git") (:prefix-map ("g" . "git")
(:when (modulep! :ui vc-gutter) (:when (modulep! :ui vc-gutter)
:desc "Jump to previous hunk" "é" #'git-gutter:previous-hunk :desc "Jump to previous hunk" "é" #'+vc-gutter/previous-hunk
:desc "Jump to next hunk" "è" #'git-gutter:next-hunk)))) :desc "Jump to next hunk" "è" #'+vc-gutter/next-hunk))))
(defun +layout-remap-evil-keys-for-azerty-h () (defun +layout-remap-evil-keys-for-azerty-h ()
(map! :nv "à" #'evil-execute-macro (map! :nv "à" #'evil-execute-macro
@ -48,8 +48,8 @@
:m "èy" #'+evil:c-string-encode :m "èy" #'+evil:c-string-encode
:m "éy" #'+evil:c-string-decode :m "éy" #'+evil:c-string-decode
(:when (modulep! :ui vc-gutter) (:when (modulep! :ui vc-gutter)
:m "èd" #'git-gutter:next-hunk :m "èd" #'+vc-gutter/next-hunk
:m "éd" #'git-gutter:previous-hunk) :m "éd" #'+vc-gutter/previous-hunk)
(:when (modulep! :ui hl-todo) (:when (modulep! :ui hl-todo)
:m "èt" #'hl-todo-next :m "èt" #'hl-todo-next
:m "ét" #'hl-todo-previous) :m "ét" #'hl-todo-previous)

View file

@ -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) :desc "Jump to documentation" "S" #'+lookup/documentation)
(:prefix-map ("g" . "git") (:prefix-map ("g" . "git")
(:when (modulep! :ui vc-gutter) (:when (modulep! :ui vc-gutter)
:desc "Jump to next hunk" ")" #'git-gutter:next-hunk :desc "Jump to next hunk" ")" #'+vc-gutter/next-hunk
:desc "Jump to previous hunk" "(" #'git-gutter:previous-hunk)) :desc "Jump to previous hunk" "(" #'+vc-gutter/previous-hunk))
(:prefix-map ("p" . "project") (:prefix-map ("p" . "project")
:desc "Browse other project" "»" #'doom/browse-in-other-project))) :desc "Browse other project" "»" #'doom/browse-in-other-project)))

View file

@ -3,17 +3,17 @@
;; Major modes ;; Major modes
(package! rjsx-mode :pin "b697fe4d92cc84fa99a7bcb476f815935ea0d919") (package! rjsx-mode :pin "b697fe4d92cc84fa99a7bcb476f815935ea0d919")
(package! typescript-mode :pin "4fcb4594819caf472ae42ea068a1c7795cf07f46") (package! typescript-mode :pin "fc3a4f3b275e8cf6cf41aa0c9ef42e25ef908feb")
;; Tools ;; Tools
(package! js2-refactor :pin "a0977c4ce1918cc266db9d6cd7a2ab63f3a76b9a") (package! js2-refactor :pin "a0977c4ce1918cc266db9d6cd7a2ab63f3a76b9a")
(package! npm-mode :pin "3ee7c0bad5b7a041d4739ef3aaa06a3dc764e5eb") (package! npm-mode :pin "3ee7c0bad5b7a041d4739ef3aaa06a3dc764e5eb")
;; Eval ;; Eval
(package! nodejs-repl :pin "3b841055cad00f442e4a9159b1056f59411b6646") (package! nodejs-repl :pin "03d0b64768b40b71ae54de1b50eb58719e615746")
(package! skewer-mode :pin "e5bed351939c92a1f788f78398583c2f83f1bb3c") (package! skewer-mode :pin "e5bed351939c92a1f788f78398583c2f83f1bb3c")
;; Programming environment ;; Programming environment
(package! tide :pin "b38dfc3f8fb754e64e48e76fc92d472cb3d1a3dc") (package! tide :pin "b38dfc3f8fb754e64e48e76fc92d472cb3d1a3dc")
(when (modulep! :tools lookup) (when (modulep! :tools lookup)
(package! xref-js2 :pin "fd6b723e7f1f9793d189a815e1904364dc026b03")) (package! xref-js2 :pin "e215af9eedac69b40942fff9d5514704f9f4d43e"))

View file

@ -4,7 +4,7 @@
#+since: 2.0.4 (#128) #+since: 2.0.4 (#128)
* Description :unfold: * 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 - Code completion, documentation look-up, code navigation and refactoring
([[doom-package:merlin]]) ([[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]]) - Auto-indentation ([[doom-package:ocp-indent]])
- Code formatting ([[doom-package:ocamlformat]]) - Code formatting ([[doom-package:ocamlformat]])
- Dune file format ([[doom-package:dune]]) - Dune file format ([[doom-package:dune]])
- Opam switch selection ([[doom-package:opam-switch-mode]])
** Maintainers ** Maintainers
*This module needs a maintainer.* [[doom-contrib-maintainer:][Become a maintainer?]] *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:ocamlformat]] if [[doom-module::editor format]]
- [[doom-package:ocp-indent]] - [[doom-package:ocp-indent]]
- [[doom-package:tuareg]] - [[doom-package:tuareg]]
- [[doom-package:opam-switch-mode]]
- [[doom-package:utop]] if [[doom-module::tools eval]] - [[doom-package:utop]] if [[doom-module::tools eval]]
- unless [[doom-module:+lsp]] - unless [[doom-module:+lsp]]
- [[doom-package:flycheck-ocaml]] if [[doom-module::checkers syntax]] - [[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 - ~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 cause columns to change as certain keywords are shortened (e.g. =fun= becomes
\lambda). \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 ** TODO Changelog
# This section will be machine generated. Don't edit it by hand. # 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) | | ~merlin-iedit-occurrences~ | [[kbd:][v R]] | visual refactor identifier under point (multiple cursors) |
| ~utop~ | [[kbd:][SPC o r]] | open =utop= as REPL | | ~utop~ | [[kbd:][SPC o r]] | open =utop= as REPL |
| ~utop-eval-region~ | [[kbd:][SPC c e]] | evaluate selected region in =utop= | | ~utop-eval-region~ | [[kbd:][SPC c e]] | evaluate selected region in =utop= |
| ~opam-switch-set-switch~ | [[kbd:][<localleader> w]] | evaluate selected region in =utop= |
* TODO Configuration * TODO Configuration
#+begin_quote #+begin_quote

View file

@ -20,10 +20,6 @@
;; harmless if `prettify-symbols-mode' isn't active ;; harmless if `prettify-symbols-mode' isn't active
(setq tuareg-prettify-symbols-full t) (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 (setq-hook! 'tuareg-mode-hook
comment-line-break-function #'+ocaml/comment-indent-new-line) comment-line-break-function #'+ocaml/comment-indent-new-line)
@ -123,6 +119,22 @@
(setq-local ocamlformat-file-kind 'interface))))) (setq-local ocamlformat-file-kind 'interface)))))
(setq-local +format-with 'ocamlformat)))) (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 ;; Tree sitter
(eval-when! (modulep! +tree-sitter) (eval-when! (modulep! +tree-sitter)
(add-hook! 'tuareg-mode-local-vars-hook #'tree-sitter!)) (add-hook! 'tuareg-mode-local-vars-hook #'tree-sitter!))

View file

@ -3,6 +3,8 @@
(package! tuareg :pin "1d53723e39f22ab4ab76d31f2b188a2879305092") (package! tuareg :pin "1d53723e39f22ab4ab76d31f2b188a2879305092")
(package! opam-switch-mode :pin "1069e56a662f23ea09d4e05611bdedeb99257012")
(unless (modulep! +lsp) (unless (modulep! +lsp)
(package! merlin :pin "8404f96693727f7b0edc0d0b14db57843d79e27b") (package! merlin :pin "8404f96693727f7b0edc0d0b14db57843d79e27b")
(package! merlin-eldoc :pin "bf8edc63d85b35e4def352fa7ce4ea39f43e1fd8") (package! merlin-eldoc :pin "bf8edc63d85b35e4def352fa7ce4ea39f43e1fd8")

View file

@ -49,6 +49,6 @@ properties and font-locking et all)."
(+org--yank-html-buffer (markdown))) (+org--yank-html-buffer (markdown)))
(_ (_
;; Omit after/before-string overlay properties in htmlized regions, so we ;; 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) (letf! (defun htmlize-add-before-after-strings (_beg _end text) text)
(ox-clip-formatted-copy beg end))))) (ox-clip-formatted-copy beg end)))))

View file

@ -31,14 +31,14 @@
(format "(defun org-git-version (&rest _) \"%s-??-%s\")\n" (format "(defun org-git-version (&rest _) \"%s-??-%s\")\n"
version (cdr (doom-call-process "git" "rev-parse" "--short" "HEAD"))) version (cdr (doom-call-process "git" "rev-parse" "--short" "HEAD")))
"(provide 'org-version)\n"))))) "(provide 'org-version)\n")))))
:pin "5bdfc02c6fa1b9ad4f075ac1ad1e4086ead310db") :pin "39272e2165ad9c49cfa9b5d749a5bb528dbadd87")
(package! org-contrib (package! org-contrib
:recipe (:host github :recipe (:host github
:repo "emacsmirror/org-contrib") :repo "emacsmirror/org-contrib")
:pin "d4056ce5d5611e1c971c151f182a2d407226fdb1") :pin "ccd4212866fb1be70d1f15a41264c45a281901ad")
(package! avy) (package! avy)
(package! htmlize :pin "09d43dfa44899f194095bb3500a45ec5b34d59c6") (package! htmlize :pin "ed5e5b05fd260e8f161a488d56f10e7f6e01fb75")
(package! org-yt (package! org-yt
:recipe (:host github :repo "TobiasZawada/org-yt") :recipe (:host github :repo "TobiasZawada/org-yt")
:pin "56166f48e04d83668f70ed84706b7a4d8b1e5438") :pin "56166f48e04d83668f70ed84706b7a4d8b1e5438")
@ -49,7 +49,7 @@
;; TODO Adjust when this is added to GNU ELPA ;; TODO Adjust when this is added to GNU ELPA
(when (modulep! +contacts) (when (modulep! +contacts)
(package! org-contacts (package! org-contacts
:pin "6660db078f7687af3bc31f702e3e957d4d7654bd" :pin "d0cb221502c9e104b6e3c358128b28761ffddb55"
:recipe (:host nil :recipe (:host nil
:type git :type git
:repo "https://repo.or.cz/org-contacts.git"))) :repo "https://repo.or.cz/org-contacts.git")))
@ -71,9 +71,9 @@
(when (modulep! :tools pdf) (when (modulep! :tools pdf)
(package! org-pdftools :pin "4e420233a153a9c4ab3d1a7e1d7d3211c836f0ac")) (package! org-pdftools :pin "4e420233a153a9c4ab3d1a7e1d7d3211c836f0ac"))
(when (modulep! :tools magit) (when (modulep! :tools magit)
(package! orgit :pin "a57beefa24712430fe6b5016b9273129931a8287") (package! orgit :pin "ca3bf7aa20074e25fee37b71cfef127b93a3dde7")
(when (modulep! :tools magit +forge) (when (modulep! :tools magit +forge)
(package! orgit-forge :pin "f2ff9e5ad68b3e860379a1d368ad6d8a9696b719"))) (package! orgit-forge :pin "7b010465ab96bea6d380ae1cfbd7999d528f1de9")))
(when (modulep! +brain) (when (modulep! +brain)
(package! org-brain :pin "2bad7732aae1a3051e2a14de2e30f970bbe43c25")) (package! org-brain :pin "2bad7732aae1a3051e2a14de2e30f970bbe43c25"))
(when (modulep! +dragndrop) (when (modulep! +dragndrop)
@ -84,11 +84,11 @@
(when (modulep! +ipython) ; DEPRECATED (when (modulep! +ipython) ; DEPRECATED
(package! ob-ipython :pin "7147455230841744fb5b95dcbe03320313a77124")) (package! ob-ipython :pin "7147455230841744fb5b95dcbe03320313a77124"))
(when (modulep! +jupyter) (when (modulep! +jupyter)
(package! jupyter :pin "2059d79b2fecf6d25a6c796b69ab954645ec37d1")) (package! jupyter :pin "b279c90295ed7ef89832d655cf8d9077233f1098"))
(when (modulep! +journal) (when (modulep! +journal)
(package! org-journal :pin "17b34ce8df9649a73b715c13698220bde1628668")) (package! org-journal :pin "17b34ce8df9649a73b715c13698220bde1628668"))
(when (modulep! +noter) (when (modulep! +noter)
(package! org-noter :pin "9e4f57957b8f54db20a4e13bf8d6b32e004ab3e8")) (package! org-noter :pin "68646b685a0d8c02419234922a9e2d885d6419df"))
(when (modulep! +pomodoro) (when (modulep! +pomodoro)
(package! org-pomodoro :pin "3f5bcfb80d61556d35fc29e5ddb09750df962cc6")) (package! org-pomodoro :pin "3f5bcfb80d61556d35fc29e5ddb09750df962cc6"))
(when (modulep! +pretty) (when (modulep! +pretty)
@ -100,11 +100,11 @@
:recipe (:host github :repo "anler/centered-window-mode") :recipe (:host github :repo "anler/centered-window-mode")
:pin "80965f6c6afe8d918481433984b493de72af5399") :pin "80965f6c6afe8d918481433984b493de72af5399")
(package! org-tree-slide :pin "e2599a106a26ce5511095e23df4ea04be6687a8a") (package! org-tree-slide :pin "e2599a106a26ce5511095e23df4ea04be6687a8a")
(package! org-re-reveal :pin "1944ac53d4cdd0fb250cc575447d5e6320fd5f81") (package! org-re-reveal :pin "77c805a89e09a46000932c8c609bf5d34cbe81cb")
(package! revealjs (package! revealjs
:recipe (:host github :repo "hakimel/reveal.js" :recipe (:host github :repo "hakimel/reveal.js"
:files ("css" "dist" "js" "plugin")) :files ("css" "dist" "js" "plugin"))
:pin "6410c756ea91ded3fa5f6b40a872523e7b8fe723")) :pin "472535065c7525abf0cc9df51c66f19fd2d2204f"))
(cond (cond
((modulep! +roam) ((modulep! +roam)
(package! org-roam (package! org-roam

View file

@ -1,7 +1,7 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; tools/ansible/packages.el ;;; tools/ansible/packages.el
(package! ansible :recipe (:nonrecursive t) :pin "1d7de8d3ddac980715eebd87ee66859f8665b101") (package! ansible :recipe (:nonrecursive t) :pin "b4dca00f89334392d770a7a67fffc935ec7354aa")
(package! ansible-doc :pin "86083a7bb2ed0468ca64e52076b06441a2f8e9e0") (package! ansible-doc :pin "86083a7bb2ed0468ca64e52076b06441a2f8e9e0")
(package! jinja2-mode :pin "03e5430a7efe1d163a16beaf3c82c5fd2c2caee1") (package! jinja2-mode :pin "03e5430a7efe1d163a16beaf3c82c5fd2c2caee1")
(package! yaml-mode :pin "7b5ce294fb15c2c8926fa476d7218aa415550a2a") (package! yaml-mode :pin "7b5ce294fb15c2c8926fa476d7218aa415550a2a")

View file

@ -8,10 +8,10 @@
(package! bibtex-completion :pin "8b71b4f5ce62eeaf18067f57faaddc06449fbe1c") (package! bibtex-completion :pin "8b71b4f5ce62eeaf18067f57faaddc06449fbe1c")
(package! helm-bibtex :pin "8b71b4f5ce62eeaf18067f57faaddc06449fbe1c")) (package! helm-bibtex :pin "8b71b4f5ce62eeaf18067f57faaddc06449fbe1c"))
(when (modulep! :completion vertico) (when (modulep! :completion vertico)
(package! citar :pin "885b86f6733fd70f42c32dd7791d3447f93db990") (package! citar :pin "07d2a63c99fe35cbd468f8e6a322de05f1a29469")
(package! citar-embark :pin "885b86f6733fd70f42c32dd7791d3447f93db990") (package! citar-embark :pin "07d2a63c99fe35cbd468f8e6a322de05f1a29469")
(when (modulep! :lang org +roam2) (when (modulep! :lang org +roam2)
(package! citar-org-roam :pin "82d47b5df1926627f56a09055c69b49b31cbbb9f"))) (package! citar-org-roam :pin "82d47b5df1926627f56a09055c69b49b31cbbb9f")))
(package! parsebib :pin "ace9df707108b17759c004c7387655277122d4c1") (package! parsebib :pin "ace9df707108b17759c004c7387655277122d4c1")
(package! citeproc :pin "44f90cb296766e03fffc28b7892521ab0e8709f1") (package! citeproc :pin "cfa30b6c95c7465a05da98eccf273608880b22d7")

View file

@ -1,4 +1,4 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; tools/collab/packages.el ;;; tools/collab/packages.el
(package! crdt :pin "4a18cd8539c8f3364e3ae903580328dd8b05fa78") (package! crdt :pin "9bf99e2ce35d23c3d60ad245b77ab3b5313184d4")

View file

@ -6,5 +6,5 @@
(package! realgud-trepan-ni :pin "0ec088ea343835e24ae73da09bea96bfb02a3130"))) (package! realgud-trepan-ni :pin "0ec088ea343835e24ae73da09bea96bfb02a3130")))
(when (modulep! +lsp) (when (modulep! +lsp)
(package! dap-mode :pin "11431a26bc4c8ca92b097dbdbcbdc9e3d7fb5583") (package! dap-mode :pin "b407773ebca56e3bd8e6a4643854e91cbde0c35e")
(package! posframe :pin "f4e9e509ba96ceb3c2b2b054957291607fb52651")) (package! posframe :pin "f4e9e509ba96ceb3c2b2b054957291607fb52651"))

View file

@ -1,4 +1,4 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; tools/direnv/packages.el ;;; tools/direnv/packages.el
(package! envrc :pin "8eb7401700b0080902ce200ad610ff8d2f2dcc27") (package! envrc :pin "2316e004c1574234fe4d991bd75a254cdeaa83ae")

View file

@ -3,4 +3,4 @@
(package! editorconfig (package! editorconfig
:recipe (:nonrecursive t) :recipe (:nonrecursive t)
:pin "d73b6392ded0476af93ec7ba75cca2909aa8d2dc") :pin "1651294334f3987d749eeb287f11d256cf2ba5b1")

View file

@ -1,6 +1,6 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; tools/eval/packages.el ;;; tools/eval/packages.el
(package! quickrun :pin "373634cf5143f9680164e27fa844d3b02408e917") (package! quickrun :pin "c58e2e4be58416fbb467b3bb191470a61408751c")
(when (modulep! +overlay) (when (modulep! +overlay)
(package! eros :pin "a9a92bdc6be0521a6a06eb464be55ed61946639c")) (package! eros :pin "a9a92bdc6be0521a6a06eb464be55ed61946639c"))

View file

@ -263,29 +263,41 @@ current buffer."
(< pt end)))))))) (< pt end))))))))
(defun +lookup-ffap-backend-fn (identifier) (defun +lookup-ffap-backend-fn (identifier)
"Tries to locate the file at point (or in active selection). "Tries to locate the file or URL 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)." See `ffap-alist' for ways to tweak how files are resolved. Falls back to
(let ((guess 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) (cond (identifier)
((doom-region-active-p) ((doom-region-active-p)
(buffer-substring-no-properties (buffer-substring-no-properties
(doom-region-beginning) (doom-region-beginning)
(doom-region-end))) (doom-region-end)))
((if (require 'ffap) (ffap-guesser))) ((if (require 'ffap) (ffap-guesser))) ; Powerful! See `ffap-alist'
((thing-at-point 'filename t))))) ((thing-at-point 'filename t)))))
(cond ((and (stringp guess) (cond ((and (stringp guess)
(or (file-exists-p guess) (or (file-exists-p guess)
(ffap-url-p guess))) (ffap-url-p guess)))
(find-file-at-point guess)) (find-file-at-point guess))
((and (modulep! :completion ivy) ;; Walk the file tree up to the project's root for relative paths.
(doom-project-p)) ((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))) (counsel-file-jump guess (doom-project-root)))
((and (modulep! :completion vertico) ((and (modulep! :completion vertico) (doom-project-p))
(doom-project-p))
(+vertico/consult-fd-or-find (doom-project-root) guess)) (+vertico/consult-fd-or-find (doom-project-root) guess))
((find-file-at-point (ffap-prompter guess)))) ((find-file-at-point (ffap-prompter guess))))
t)) (not (eq initial-buffer (current-buffer)))))
(defun +lookup-bug-reference-backend-fn (_identifier) (defun +lookup-bug-reference-backend-fn (_identifier)
"Searches for a bug reference in user/repo#123 or #123 format and opens it in "Searches for a bug reference in user/repo#123 or #123 format and opens it in

View file

@ -8,7 +8,7 @@
(package! helm)) (package! helm))
;; ;;
(package! dumb-jump :pin "ede6a04187e79a29ef31d14760ac0d8d4c5f4cc5") (package! dumb-jump :pin "3c2ab8dfff3a10d3c5f2efd69cfbc81fb5dbbd39")
(when (modulep! :completion ivy) (when (modulep! :completion ivy)
(package! ivy-xref :pin "a82e8e117d2dd62c28b6a3e3d6e4cfb11c0bda38")) (package! ivy-xref :pin "a82e8e117d2dd62c28b6a3e3d6e4cfb11c0bda38"))
(when (modulep! :completion helm) (when (modulep! :completion helm)

View file

@ -3,13 +3,13 @@
(if (modulep! +eglot) (if (modulep! +eglot)
(progn (progn
(package! eglot :pin "e7e49c789c4019dd4cd4ab3880517d01592d81f9") (package! eglot :pin "850cbd043084d7cc571e1090a4812db6e3f7d0bc")
(when (modulep! :completion vertico) (when (modulep! :completion vertico)
(package! consult-eglot :pin "64262e72452f8fe6dd49d31bcdd4bd577b7d682d")) (package! consult-eglot :pin "64262e72452f8fe6dd49d31bcdd4bd577b7d682d"))
(when (and (modulep! :checkers syntax) (when (and (modulep! :checkers syntax)
(not (modulep! :checkers syntax +flymake))) (not (modulep! :checkers syntax +flymake)))
(package! flycheck-eglot :pin "114e1315aaf0dc3196da67da426bbe2b46384fe2"))) (package! flycheck-eglot :pin "114e1315aaf0dc3196da67da426bbe2b46384fe2")))
(package! lsp-mode :pin "acad044ebc343c1eff0d9a875a13fb34ad113a9e") (package! lsp-mode :pin "cec9e56390e90d7ced3b18a922ab954e782b8628")
(package! lsp-ui :pin "00f1fecdfb41c30428734cf27e492f26f46627fb") (package! lsp-ui :pin "00f1fecdfb41c30428734cf27e492f26f46627fb")
(when (modulep! :completion ivy) (when (modulep! :completion ivy)
(package! lsp-ivy :pin "9ecf4dd9b1207109802bd1882aa621eb1c385106")) (package! lsp-ivy :pin "9ecf4dd9b1207109802bd1882aa621eb1c385106"))

View file

@ -108,7 +108,7 @@ modified."
;;;###autoload ;;;###autoload
(defun +magit-revert-buffer-maybe-h () (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 (when +magit--stale-p
(+magit--revert-buffer (current-buffer)))) (+magit--revert-buffer (current-buffer))))

View file

@ -1,9 +1,9 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; tools/magit/packages.el ;;; tools/magit/packages.el
(when (package! magit :pin "f9268a959828d0c6ab26171dd2fb1ffc55e5ae70") (when (package! magit :pin "ea0f07e54967197ac0b072a69ba314314a4080c1")
(when (modulep! +forge) (when (modulep! +forge)
(package! forge :pin "c3675fd068767c694177a310d4fa0a01f81bb2d3") (package! forge :pin "4adb94d23c8f28ea3b15757936c2203b3376586a")
(package! code-review (package! code-review
:recipe (:host github :recipe (:host github
:repo "doomelpa/code-review" :repo "doomelpa/code-review"

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 "a1048bceb2bd3f635437b0f2bfac27cae8c2dabc") (package! pdf-tools :pin "30b50544e55b8dbf683c2d932d5c33ac73323a16")
(package! saveplace-pdf-view :pin "ee95460cd934080338f03a16f95b549577425216") (package! saveplace-pdf-view :pin "ee95460cd934080338f03a16f95b549577425216")

View file

@ -1,5 +1,5 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; tools/rgb/packages.el ;;; tools/rgb/packages.el
(package! rainbow-mode :pin "70ed10d410ef00c82c49b2ba41647930626d6218") (package! rainbow-mode :pin "0740f31f300982534183a2f60b1918de418a6f2c")
(package! kurecolor :pin "fbf98e1e384dd11bbb5764ae54b36353f0691d1e") (package! kurecolor :pin "fbf98e1e384dd11bbb5764ae54b36353f0691d1e")

View file

@ -1,8 +1,8 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; tools/tree-sitter/packages.el ;;; tools/tree-sitter/packages.el
(package! tree-sitter :pin "3cfab8a0e945db9b3df84437f27945746a43cc71") (package! tree-sitter :recipe (:branch "master") :pin "02fe7b86d92b1aab954045146469b7893f0ab371")
(package! tree-sitter-langs :pin "b7895ca759563f3c7c3b928eb4f816bb4099d866") (package! tree-sitter-langs :pin "a06804e13fc1d24d0099b44ce23d6ac5e6bac5b8")
(package! tree-sitter-indent :pin "4ef246db3e4ff99f672fe5e4b416c890f885c09e") (package! tree-sitter-indent :pin "4ef246db3e4ff99f672fe5e4b416c890f885c09e")
(when (modulep! :editor evil +everywhere) (when (modulep! :editor evil +everywhere)

View file

@ -1,4 +1,4 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; ui/deft/packages.el ;;; ui/deft/packages.el
(package! deft :pin "bb1a16b87c3e0fe70fade6227e47dd7712b89bf6") (package! deft :pin "b369d7225d86551882568788a23c5497b232509c")

View file

@ -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: (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]]. - 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]]). - File-visiting buffers are slightly brighter (thanks to [[doom-package:solaire-mode]]).
** Maintainers ** Maintainers

View file

@ -1,5 +1,5 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; ui/doom/packages.el ;;; ui/doom/packages.el
(package! doom-themes :pin "3b2422b208d28e8734b300cd3cc6a7f4af5eba55") (package! doom-themes :pin "816fb54d60a7012b9b12cd995831d4226982b487")
(package! solaire-mode :pin "8ccdceeb9298b3c4e35f630914f467bf164f39ad") (package! solaire-mode :pin "8ccdceeb9298b3c4e35f630914f467bf164f39ad")

View file

@ -1,4 +1,4 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; ui/hl-todo/packages.el ;;; ui/hl-todo/packages.el
(package! hl-todo :pin "f1fef158f99a70746926ef52c59f4863a29b7ed7") (package! hl-todo :pin "dd46d426c0501b5e8ed976a834d3e54ae85731f7")

View file

@ -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. ;; 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), ;; 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. ;; 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)) (dolist (mode (ensure-list modes))
(delq! mode ligature-composition-table 'assq)) (delq! mode ligature-composition-table 'assq))
(after! ligature (after! ligature

View file

@ -1,4 +1,4 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; ui/minimap/packages.el ;;; ui/minimap/packages.el
(package! minimap :pin "90aeeb5798ff2fa8b08bd4965af5e43806e01645") (package! minimap :pin "4898d277686c2829c2e91416082f4252c1bb0ceb")

View file

@ -2,7 +2,7 @@
;;; ui/modeline/packages.el ;;; ui/modeline/packages.el
(unless (modulep! +light) (unless (modulep! +light)
(package! doom-modeline :pin "e09b8e989fa5fc1d98320aaa29d7138631b20ae5")) (package! doom-modeline :pin "11ae6c193cd9cb8d7ff7996058e6df2c0d1e408b"))
(package! anzu :pin "26fb50b429ee968eb944b0615dd0aed1dd66172c") (package! anzu :pin "26fb50b429ee968eb944b0615dd0aed1dd66172c")
(when (modulep! :editor evil) (when (modulep! :editor evil)
(package! evil-anzu :pin "d1e98ee6976437164627542909a25c6946497899")) (package! evil-anzu :pin "d1e98ee6976437164627542909a25c6946497899"))

View file

@ -5,10 +5,11 @@
* Description :unfold: * Description :unfold:
This module provides op-hints (operation hinting), i.e. visual feedback for This module provides op-hints (operation hinting), i.e. visual feedback for
certain operations. It highlights regions of text that the last operation (like certain editing operations. It highlights regions of text that the last
yank) acted on. 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 ** Maintainers
- [[doom-user:][@hlissner]] - [[doom-user:][@hlissner]]
@ -20,7 +21,7 @@ Uses [[doom-package:evil-goggles]] for evil users and [[doom-package:volatile-hi
** Packages ** Packages
- [[doom-package:evil-goggles]] if [[doom-module::editor evil]] - [[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 ** Hacks
/No hacks documented for this module./ /No hacks documented for this module./

View file

@ -63,11 +63,11 @@
:switch evil-goggles-enable-join :switch evil-goggles-enable-join
:advice evil-goggles--join-advice)))) :advice evil-goggles--join-advice))))
(use-package! goggles
(use-package! volatile-highlights
:unless (modulep! :editor evil) :unless (modulep! :editor evil)
:hook (doom-first-input . volatile-highlights-mode) :hook ((prog-mode text-mode) . goggles-mode)
:config :config
(after! undo-fu (goggles-define +goggles-general-undo undo) ; goggles only supports `primitive-undo' by default
(vhl/define-extension 'undo-fu 'undo-fu-only-undo 'undo-fu-only-redo) (goggles-define +goggles-register-paste insert-register)
(vhl/install-extension 'undo-fu))) (goggles-define +goggles-kill-word backward-kill-word kill-word)
(goggles-define +goggles-undo-fu undo-fu-only-undo undo-fu-only-redo))

View file

@ -3,4 +3,4 @@
(if (modulep! :editor evil) (if (modulep! :editor evil)
(package! evil-goggles :pin "34ca276a85f615d2b45e714c9f8b5875bcb676f3") (package! evil-goggles :pin "34ca276a85f615d2b45e714c9f8b5875bcb676f3")
(package! volatile-highlights :pin "fcf6e2778454ce514c189a7d1fe70e03ad81c325")) (package! goggles :pin "41d3669d7ae7b73bd39d298e5373ece48b656ce3"))

View file

@ -10,7 +10,7 @@
;;; Packages ;;; Packages
(use-package! centaur-tabs (use-package! centaur-tabs
:hook (doom-first-file . centaur-tabs-mode) :defer t
:init :init
(setq centaur-tabs-set-icons t (setq centaur-tabs-set-icons t
centaur-tabs-gray-out-icons 'buffer centaur-tabs-gray-out-icons 'buffer
@ -24,6 +24,10 @@
;; prevents that. ;; prevents that.
centaur-tabs-cycle-scope 'tabs) 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 :config
(add-hook! '(+doom-dashboard-mode-hook +popup-buffer-mode-hook) (add-hook! '(+doom-dashboard-mode-hook +popup-buffer-mode-hook)
(defun +tabs-disable-centaur-tabs-mode-maybe-h () (defun +tabs-disable-centaur-tabs-mode-maybe-h ()
@ -31,19 +35,11 @@
(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 (add-hook! 'doom-load-theme-hook
;; frequently. There really is no reason to call it more than 10 times per (defun +tabs-reload-centaur-tabs-h ()
;; second, as buffers rarely change groups more frequently than that. (when (bound-and-true-p centaur-tabs-mode)
(let ((time (float-time))) (centaur-tabs-mode -1)
(defadvice! +tabs--rate-limit-buffer-update-groups-a (fn) (centaur-tabs-mode +1)))))
: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)
;; TODO tab-line-mode (emacs 27) ;; TODO tab-line-mode (emacs 27)

View file

@ -1,4 +1,4 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; ui/tabs/packages.el ;;; ui/tabs/packages.el
(package! centaur-tabs :pin "0bb1aa18d475319df85f192dce3327802866c3c3") (package! centaur-tabs :pin "4a121a175e663295fcd295512642dae4d2ff9db3")

View file

@ -1,7 +1,7 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; ui/treemacs/packages.el ;;; ui/treemacs/packages.el
(package! treemacs :pin "8c6df39f01a4d47fda2cc943645fa067f771b748") (package! treemacs :pin "54ef590b7621032a76f8f3e307032fc13c802371")
(package! treemacs-nerd-icons :pin "9876cb478145a0ec4e36f64ff6583f3de7126216") (package! treemacs-nerd-icons :pin "9876cb478145a0ec4e36f64ff6583f3de7126216")
;; These packages have no :pin because they're in the same repo ;; These packages have no :pin because they're in the same repo
(when (modulep! :editor evil +everywhere) (when (modulep! :editor evil +everywhere)
@ -13,4 +13,4 @@
(package! treemacs-persp)) (package! treemacs-persp))
(when (and (modulep! +lsp) (when (and (modulep! +lsp)
(not (modulep! :tools lsp +eglot))) (not (modulep! :tools lsp +eglot)))
(package! lsp-treemacs :pin "e54e74deb8150964e3c3024e1ec14295a34e2a3b")) (package! lsp-treemacs :pin "1d43e9e0307f84496a4a7ddf9dba481000391dbd"))

View file

@ -13,44 +13,32 @@ Supports Git, Svn, Hg, and Bzr.
[[doom-contrib-maintainer:][Become a maintainer?]] [[doom-contrib-maintainer:][Become a maintainer?]]
** Module flags ** 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 :: - +pretty ::
Apply some stylistic defaults to the fringe, enabling thin bars in the fringe. Apply some stylistic defaults to the fringe that present the diff in the
This look takes after the modern look of git-gutter in VSCode and Sublime fringe as thin bars, taking after the modern look of the git-gutter plugin in
Text, without sacrificing on fringe width (which squeeze other indicators, VSCode and Sublime Text. However, this will look bad with themes that invert
like flycheck's, flymake's, or flyspell's). However, this will look bad with the foreground/background of diff-hl's faces (like modus-themes does).
themes that invert the foreground/background of either git-gutter's or
diff-hl's faces (like modus-themes does).
** Packages ** Packages
- [[doom-package:git-gutter-fringe]] unless [[doom-module:+diff-hl]] - [[doom-package:diff-hl]]
- [[doom-package:diff-hl]] if [[doom-module:+diff-hl]]
** Hacks ** Hacks
- The VC gutter will be updated when pressing ESC, leaving insert mode (evil - The VC gutter will be updated when pressing ESC, leaving insert mode (evil
users), or refocusing the frame or window where it is active. users), or refocusing the frame or window where it is active.
- If [[doom-module:+pretty]] is enabled - If [[doom-module:+pretty]] is enabled
- The fringes that both git-gutter-fringe and diff-hl define will be replaced - The fringes that diff-hl define will be replaced with a set of thin bars.
with a set of thin bars. This achieves a slicker look closer to git-gutter's This achieves a slicker look closer to git-gutter's appearance in VSCode or
appearance in VSCode or Sublime Text, but may look weird for themes that Sublime Text, but may look weird for themes that swap their faces'
swap their faces' :foreground and :background (like modus-themes). :foreground and :background (like modus-themes).
- The fringes are moved to the outside of the margins (closest to the frame - 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. 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.
- ~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
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
or 20. Since this isn't easily customized, it has been advised to shrink this popup to the side of its contents.
this popup to the side of its contents. - ~diff-hl-revert-hunk~ will sometimes move the cursor to an unexpected
- ~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
location (the bounds of hunks, is my guess), but this is not intuitive and often unexpected. Cursor movements have been suppressed for it.
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).
** TODO Changelog ** TODO Changelog
# This section will be machine generated. Don't edit it by hand. # This section will be machine generated. Don't edit it by hand.

View file

@ -1,11 +1,22 @@
;;; ui/vc-gutter/autoload/diff-hl.el -*- lexical-binding: t; -*- ;;; ui/vc-gutter/autoload/diff-hl.el -*- lexical-binding: t; -*-
;;;###if (modulep! +diff-hl)
;;;###autoload ;;;###autoload
(defalias '+vc-gutter/stage-hunk #'diff-hl-stage-current-hunk) (defalias '+vc-gutter/stage-hunk #'diff-hl-stage-current-hunk)
;;;###autoload ;;;###autoload
(defalias '+vc-gutter/revert-hunk #'diff-hl-revert-hunk)
;;;###autoload
(defalias '+vc-gutter/next-hunk #'diff-hl-next-hunk) (defalias '+vc-gutter/next-hunk #'diff-hl-next-hunk)
;;;###autoload ;;;###autoload
(defalias '+vc-gutter/previous-hunk #'diff-hl-previous-hunk) (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))

View file

@ -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)

View file

@ -1,13 +1,5 @@
;;; ui/vc-gutter/config.el -*- lexical-binding: t; -*- ;;; 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 ;;; Default styles
@ -23,36 +15,28 @@
;; having to shrink the fringe and sacrifice precious space for other fringe ;; having to shrink the fringe and sacrifice precious space for other fringe
;; indicators (like flycheck or flyspell). ;; indicators (like flycheck or flyspell).
;; REVIEW: Extract these into a package with faces that themes can target. ;; REVIEW: Extract these into a package with faces that themes can target.
(if (not (modulep! +diff-hl)) (defadvice! +vc-gutter-define-thin-bitmaps-a (&rest args)
(after! git-gutter-fringe :override #'diff-hl-define-bitmaps
(define-fringe-bitmap 'git-gutter-fr:added [224] (define-fringe-bitmap 'diff-hl-bmp-middle [224] nil nil '(center repeated))
nil nil '(center repeated)) (define-fringe-bitmap 'diff-hl-bmp-delete [240 224 192 128] nil nil 'top))
(define-fringe-bitmap 'git-gutter-fr:modified [224] (defun +vc-gutter-type-face-fn (type _pos)
nil nil '(center repeated)) (intern (format "diff-hl-%s" type)))
(define-fringe-bitmap 'git-gutter-fr:deleted [128 192 224 240] (defun +vc-gutter-type-at-pos-fn (type _pos)
nil nil 'bottom)) (if (eq type 'delete)
(defadvice! +vc-gutter-define-thin-bitmaps-a (&rest args) 'diff-hl-bmp-delete
:override #'diff-hl-define-bitmaps 'diff-hl-bmp-middle))
(define-fringe-bitmap 'diff-hl-bmp-middle [224] nil nil '(center repeated)) (advice-add #'diff-hl-fringe-bmp-from-pos :override #'+vc-gutter-type-at-pos-fn)
(define-fringe-bitmap 'diff-hl-bmp-delete [240 224 192 128] nil nil 'top)) (advice-add #'diff-hl-fringe-bmp-from-type :override #'+vc-gutter-type-at-pos-fn)
(defun +vc-gutter-type-face-fn (type _pos) (setq diff-hl-draw-borders nil)
(intern (format "diff-hl-%s" type))) (add-hook! 'diff-hl-mode-hook
(defun +vc-gutter-type-at-pos-fn (type _pos) (defun +vc-gutter-fix-diff-hl-faces-h ()
(if (eq type 'delete) (mapc (doom-rpartial #'set-face-background nil)
'diff-hl-bmp-delete '(diff-hl-insert
'diff-hl-bmp-middle)) diff-hl-delete
(advice-add #'diff-hl-fringe-bmp-from-pos :override #'+vc-gutter-type-at-pos-fn) diff-hl-change))))
(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 ;; FIX: To minimize overlap between flycheck indicators and diff-hl indicators
;; indicators in the left fringe. ;; in the left fringe.
(after! flycheck (after! flycheck
;; Let diff-hl have left fringe, flycheck can have right fringe ;; Let diff-hl have left fringe, flycheck can have right fringe
(setq flycheck-indication-mode 'right-fringe) (setq flycheck-indication-mode 'right-fringe)
@ -61,99 +45,10 @@
[16 48 112 240 112 48 16] nil nil 'center))) [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 ;;; diff-hl
(use-package! diff-hl (use-package! diff-hl
:when (modulep! +diff-hl)
:hook (find-file . diff-hl-mode) :hook (find-file . diff-hl-mode)
:hook (vc-dir-mode . diff-hl-dir-mode) :hook (vc-dir-mode . diff-hl-dir-mode)
:hook (dired-mode . diff-hl-dired-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 :config
(set-popup-rule! "^\\*diff-hl" :select nil :size '+popup-shrink-to-fit) (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. ;; PERF: A slightly faster algorithm for diffing.
(setq vc-git-diff-switches '("--histogram")) (setq vc-git-diff-switches '("--histogram"))
;; PERF: Slightly more conservative delay before updating the diff ;; 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-previous
:n "}" #'diff-hl-show-hunk-next :n "}" #'diff-hl-show-hunk-next
:n "S" #'diff-hl-show-hunk-stage-hunk)) :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 (add-hook! '(doom-escape-hook doom-switch-window-hook) :append
(defun +vc-gutter-update-h (&rest _) (defun +vc-gutter-update-h (&rest _)
"Return nil to prevent shadowing other `doom-escape-hook' hooks." "Return nil to prevent shadowing other `doom-escape-hook' hooks."

View file

@ -1,6 +1,4 @@
;; -*- no-byte-compile: t; -*- ;; -*- no-byte-compile: t; -*-
;;; ui/vc-gutter/packages.el ;;; ui/vc-gutter/packages.el
(if (modulep! +diff-hl) (package! diff-hl :pin "11f3113e790526d5ee00f61f8e7cd0d01e323b2e")
(package! diff-hl :pin "96620839430c1205cbb8c92dd54973397f70f9d2")
(package! git-gutter-fringe :pin "648cb5b57faec55711803cdc9434e55a733c3eba"))