Commit graph

967 commits

Author SHA1 Message Date
Henrik Lissner
e53b9dfece
fix(word-wrap): accommodate line numbers
Line numbers pad the left side of the buffer with ~5 characters and are
treated as part of its contents, so `visual-fill-column` would wrap text
at column 75 instead of 80. Now, `visual-fill-column-extra-text-width`
is adjusted whenever `visual-fill-column-mode` or
`display-line-numbers-mode` are toggled.
2026-05-13 23:04:56 -04:00
Henrik Lissner
916a5560d9
bump: :editor evil
emacs-evil/evil-collection@5c79c9e09c -> emacs-evil/evil-collection@cf16b126fe
redguardtoo/evil-nerd-commenter@ae52c5070a -> redguardtoo/evil-nerd-commenter@db5ee61a6e
2026-05-13 16:15:07 -04:00
Henrik Lissner
179e5fb320
fix(snippets): copy-and-edit workflow
There were a number of issues with the "copy and edit" workflow of the
snippets module. I.e. Snippets that live in $EMACSDIR/.local should not
be modified directly, so they ought to be opened in read-only-mode. This
also originally applied to file-templates snippets, but I figured that
was too excessive.

With this, you can now type `C-c C-e` in these buffers to automatically
copy them to $DOOMDIR/snippets/MODE/ so you can create your own to
overwrite the original.

This also fixes an issue where `+snippets/find` and
`+snippets/find-for-current-mode` may throw errors about an undefined
`template-uuid` variable (doomemacs/community#105)

Fix: doomemacs/community#105
2026-05-11 17:41:25 -04:00
Henrik Lissner
ff439b1f43
fix(evil): don't byte-compile evil-numbers for now
The closure in which `incf` is called upstream is byte-compiled at build
time, long before our `incf` alias is defined. Injecting the alias into
the child process Straight builds packages in is non-trivial and moving
to a fork (nicholas-stout/evil-numbers) that could suddenly be deleted
isn't ideal, so I'll simply avoid byte-compiling this package for the
time being.

Fix: #8765
Amend: 541207196f
2026-05-08 00:29:53 -04:00
Henrik Lissner
b52818be56
refactor: modules: drop Emacs 28 support (part 2)
Removing 27-28 compatibility code from modules, since 28.x support was
dropped in 9fbae87.

Ref: 9fbae872c5
2026-05-07 01:17:08 -04:00
Henrik Lissner
541207196f
fix(evil): evil-numbers: void-function incf error
Upstream is using `incf` before it was introduced in Emacs 31 (or maybe
they were trying to use the old, deprecated cl.el macro).

Fix: #8765
Ref: juliapath/evil-numbers#30
Ref: juliapath/evil-numbers#31
2026-05-06 22:40:56 -04:00
Henrik Lissner
a174a69259
fix(evil): evil-collection: ensure defaults are eval'ed early
And doesn't wait until after evil is loaded to set them.
2026-05-05 17:52:41 -04:00
Henrik Lissner
9c68603315
fix(evil): evil-collection-repl-submit-state = insert
Formerly, RET would submit input in comint and REPL buffers, but
upstream introduced `evil-collection-repl-submit-state` recently,
changing RET to insert a literal newline and requiring users switch to
normal mode to submit it. This is unexpected and unintuitive
behavior (S-RET has always been the "insert literal newline" key in
these contexts) so revert to the old behavior.

Ref: emacs-evil/evil-collection@14c09ec65c
Ref: emacs-evil/evil-collection@e02e2e373f
Amend: 2cfa2ff00b
2026-05-05 17:51:47 -04:00
Henrik Lissner
ee7e6d60b1
fix(format): properly forward from lsp to chained formatters 2026-05-04 19:06:02 -04:00
Henrik Lissner
2cfa2ff00b
bump: :editor
emacs-evil/evil-collection@4ad1646964 -> emacs-evil/evil-collection@5c79c9e09c
emacsorphanage/god-mode@e6eef24dbf -> emacsorphanage/god-mode@d965515cd8
https://github.com/emacs-tree-sitter/treesit-fold@d70c5f7240a8 -> https://github.com/emacs-tree-sitter/treesit-fold@e6b215b8f25f
magnars/multiple-cursors.el@ddd677091a -> magnars/multiple-cursors.el@94b8b07a4b
radian-software/apheleia@e6e5d5523d -> radian-software/apheleia@fa5d35ea43
2026-05-04 18:39:33 -04:00
Henrik Lissner
d42c5b9ecb
fix(snippets): suppress prompts in completion/doc popups
Otherwise the expansion of snippets for the sole purpose of preview
windows and documentation popups will trigger unexpected prompts.
2026-04-30 02:42:31 -04:00
Alejandro Blasco
6be3337b49 fix(evil): tab ex commands
`:tablast` was calling +workspace/switch-to-last, which was renamed to
+workspace/switch-to-final back in bc6c4b3.
Also added a Vim-style `:tabfirst` counterpart.

Fix: bc6c4b3
Amend: d4d78b2
2026-04-27 17:54:08 -04:00
Henrik Lissner
b42187998d
docs(evil): update list of ex commands 2026-04-24 05:44:33 -04:00
Henrik Lissner
8bfd1cb890
refactor(evil): rename :messages ex command to :msg 2026-04-24 05:44:33 -04:00
Henrik Lissner
d4d78b23ea
fix(evil): ex commands
The syntax for making certain parts of an ex command optional does not
work if those parts are in the middle of the command (they have to be at
the end), so many of these commands were partially
non-functional (`l[ine]diff` could only be invoked with `:l[ine]`).

Also renames some of these commands:

- :linediff  => :ldiff
- :k[ill]    => :kill
- :k[ill]all => :killa[ll]
- :k[ill]m   => :killm[atch]
- :k[ill]o   => :killo[ther]
- :k[ill]b   => :killb[uried]
2026-04-24 05:44:33 -04:00
Henrik Lissner
3f3bfdf273
refactor(evil): remove unused, redundant, or defunct ex commands
- The gist module was removed some time ago
- There is no merit to a :http ex command (just use `M-x httpd-start`).
- There is no merit to git ex commands (in their current form, at
  least).
- The :sw[iper] command was too niche. A more generalized command (maybe
  similar to/based on `+default/search-buffer`) would be appropriate,
  but that's for another day.
2026-04-24 05:44:33 -04:00
Henrik Lissner
502cb4e209
refactor(evil): remove +evil:read
evil-read was changed upstream to substitute filename modifiers, so :R
is redundant.

Ref: emacs-evil/evil@e7c019291b
2026-04-24 05:44:33 -04:00
Henrik Lissner
07e7b4b41e
feat(word-wrap): accept minor modes in +word-wrap-visual-modes
And instead of disabling +word-wrap in org-mode wholesale, only disable
it in the presence of `org-indent-mode` (or `markdown-indent-mode`) --
modes that use `line-prefix`/`wrap-prefix` text properties that could
conflict with `adaptive-wrap-prefix-mode` (which the word-wrap module
uses).
2026-04-24 05:44:33 -04:00
Henrik Lissner
472053fd79
tweak(evil): +evil:help
Redesigns the :h[elp] ex command to:

- Provide ex command TAB completion in the ex command line.
- Prompt for ex command if no input is given.
- No longer require ex commands be prefixed with a colon.
2026-04-24 05:44:32 -04:00
Henrik Lissner
1fba9711d2
refactor(word-wrap): general reformat and revise 2026-04-20 00:56:16 -04:00
Henrik Lissner
707da6f7e9
bump: :editor lispy
abo-abo/lispy@fe44efd215 -> enzuru/lispy@c42d3737c5

abo-abo/lispy hasn't been updated in 3 years. The fork is maintained and
has fixed a number of issues.

Fix: #8755
2026-04-19 05:17:33 -04:00
Henrik Lissner
7cf7ac5b2b
bump: :input :editor
emacs-evil/evil-collection@8f261eb0c2 -> emacs-evil/evil-collection@4ad1646964
skk-dev/ddskk@6fea7fb48c -> skk-dev/ddskk@e8bf68b270
2026-04-02 21:22:19 -04:00
Tim Ruffing
ed67d0dde3 fix(evil): update cursor colors before they're applied
Fix: #6221
Ref: d1bed29680
Ref: 69ea5c2020
2026-03-31 21:05:57 -04:00
Tim Ruffing
3c248708c9 revert: fix(lispy): evil-escape keybind collision on j
evil-escape had been disabled in lispy because of a key binding conflict
involving the evil-escape-key-sequence "jk". But the latter is nil since
68ec9e9c86, so we can re-enable evil-escape.

Ref: 68ec9e9c86
Revert: ccd20847c7
2026-03-27 20:12:00 -04:00
Henrik Lissner
38f93d2444
bump: :ui :tools :editor
emacs-citar/citar@911a7d59c4 -> emacs-citar/citar@8d061b5d27
emacs-evil/evil-collection@d052ad2ec1 -> emacs-evil/evil-collection@8f261eb0c2
emacs-lsp/lsp-mode@197f56bf7a -> emacs-lsp/lsp-mode@9a2513cb40
emacs-straight/adaptive-wrap@d75665b9c8 -> emacs-straight/adaptive-wrap@6b9ffc18cd
emacs-straight/dape@d5ce595033 -> svaante/dape@1e86212784
jdtsmith/ultra-scroll@08758c6772 -> jdtsmith/ultra-scroll@0a9a26071e
jwiegley/ob-gptel@60e704a390 -> jwiegley/ob-gptel@cbed018a7d
karthink/gptel@ecb6276a94 -> karthink/gptel@0239c93d47
minad/goggles@81adff62ca -> minad/goggles@73040c4dc8
purcell/envrc@f44353c42c -> purcell/envrc@60820285ae
radian-software/apheleia@2bc2bb4cc2 -> radian-software/apheleia@e6e5d5523d
seagle0128/doom-modeline@1953aa47a4 -> seagle0128/doom-modeline@e3ad151fe9
2026-03-26 20:03:36 -04:00
Henrik Lissner
40e40f1bd7
docs(fold): update package list 2026-03-26 00:01:58 -04:00
Henrik Lissner
8f97fe4aff
refactor(evil): general reformat and revise 2026-03-25 18:58:53 -04:00
Henrik Lissner
3c0f7ab076
feat(evil): extend embrace support to more modes
And treesit modes.
2026-03-25 18:54:47 -04:00
Henrik Lissner
127e54c1dd
nit(whitespace): revise global-dtrt-indent-mode comment 2026-03-20 21:55:22 -04:00
Henrik Lissner
0d35240e70
refactor: large file optimizations
Fixes the large-file detection and rewrites it to lean more on the
built-in `so-long` library to detect and handle "large" files (whose
line count exceeds a given threshold). This removes the various
`doom-large-*` variables, replacing them with
`doom-file-lines-threshold-alist`, which defaults to 15-25k lines for
all modes, depending in the presence of IGC or native-comp.

I also no longer do this large file detection in 28 or older, because
it's not worth the trouble to maintain. Users that care about
performance should be on 30+ anyway.
2026-03-20 21:52:52 -04:00
Henrik Lissner
c0662f6ea1
feat(lib): introduce set-indent-vars! & doom-indent API
Introduces a systemic fix to the problem where most major modes don't
set `tab-width` and/or `standard-indent` to match the mode-specific
indent variables. This tries to guess the indent variable(s) for any
given major mode, by searching for variables that end in:

  X-ts-mode-indent-offset
  X-indent-offset
  X-indent-level
  X-tab-width
  X-basic-offset

Where X is the major mode without the (base-)?(ts-)?-mode suffix. This
should resolve to the correctly variable for most popular or newer
packages. For modes where it isn't enough, modules will have to manually
register with `set-indent-vars!`.

This commit also moves various indent commands to a new
lisp/lib/indent.el library and rewrites `doom/set-indent-width` to use
this new API (which no longer depends on editorconfig, and less on
dtrt-indent).

Fix: #8713
2026-03-15 02:23:40 -04:00
Henrik Lissner
3a2c12073f
refactor: s/set-debug-variable!/set-debug-var!/
There will be more of these set-variable-type autodefs in the future, so
I'd rather make the abbreviation of "variable" the precedent now than
destructively rename them all later.
2026-03-13 17:42:00 -04:00
Henrik Lissner
f2257c3fa9
fix: defcustom :type specifiers
setopt throws a void-function nil error if a variable's :type specifier
is invalid.

Fix: #8710
2026-03-12 16:29:37 -04:00
Henrik Lissner
73d643da83
fix: appease byte-compiler across the board
Warnings about unused lexical variables, arity warnings, unescaped
single quotes in docstrings, shadowed variables, and invalid value for
:local depending on Emacs version.
2026-03-11 22:50:33 -04:00
Henrik Lissner
dfc75cc56e
tweak(evil): increase evil-ex-hl-update-delay for special-mode
Which magit modes are derived from.
2026-03-11 22:50:33 -04:00
Henrik Lissner
4fe1cbeddb
refactor: s/when-let/when-let*/
The former is deprecated on Emacs 31 for the latter.
2026-03-09 03:28:06 -04:00
Henrik Lissner
4cf886ba30
refactor: remove old unit tests
Making room for the new tests and framework coming in v3. Besides, these
old tests haven't been used in years.
2026-03-08 19:41:17 -04:00
Henrik Lissner
d1ca5fe8c8
fix(fold): remove references to +compat flag
This flag was never implemented and snuck into 743d624.

Amend: f2678b3ea2
2026-03-08 03:23:14 -04:00
Henrik Lissner
08ab5d53b4
docs: update doomemacs repo urls
Close: #8695
Co-authored-by: kovan <kovan@users.noreply.github.com>
2026-03-05 22:48:55 -05:00
Henrik Lissner
d23bbe8772
fix(evil): +evil--use-evil-registers-a: recursive advice
Prevent `get-register`s advice from affecting the `get-register` call in
`evil-get-register` in `+evil--use-evil-registers-a`.

Ref: #8698
Fix: #8699
Amend: 88e2a0d5de
2026-03-04 04:06:58 -05:00
Henrik Lissner
2105bf59c3
nit: minor reformatting & revise comments
Getting these small edits out of the way to simplify v3 merge conflicts.
2026-03-02 19:50:51 -05:00
Henrik Lissner
6c0881c684
nit: revise TODO/FIXME/HACK/REVIEW/etc in comments
Some were outdated, some were incorrectly labeled, others were already
completed, some were missing... Gotta fix them all.

Also, in :ui hl-todo, there are comments that describe how Doom uses
each of these annotations; those have been updated.
2026-03-02 19:45:09 -05:00
Henrik Lissner
470e653f08
bump: :app :config :editor :emacs :email :input
emacs-straight/use-package@039b721a4d -> emacs-straight/use-package@4090d3267f
emacsmirror/undo-fu-session@34ae31308d -> emacsmirror/undo-fu-session@92d733a5b1
https://git.notmuchmail.org/git/notmuch@5c921b6c0b2d -> https://git.notmuchmail.org/git/notmuch@73746c0eb3a0
https://git.savannah.gnu.org/git/emms.git@1d48a1133db2 -> https://git.savannah.gnu.org/git/emms.git@002a8db0913c
https://github.com/emacs-tree-sitter/treesit-fold@c5f0a95550d1 -> https://github.com/emacs-tree-sitter/treesit-fold@d70c5f7240a8
jeremy-compostella/org-msg@327768e2c3 -> jeremy-compostella/org-msg@aa608b3995
juliapath/evil-numbers@e7adac70a0 -> juliapath/evil-numbers@616aff9e5c
kidd/org-gcal.el@36cbdb453d -> kidd/org-gcal.el@0f46c08f60
radian-software/apheleia@143c1dffed -> radian-software/apheleia@2bc2bb4cc2
skeeto/elfeed@66cfe43dfc -> skeeto/elfeed@bbb3cac27b
tumashu/posframe@4fc893c3c9 -> tumashu/posframe@3a80911b2f
2026-03-02 01:44:27 -05:00
Henrik Lissner
10d0b60f5d
refactor(lib): deprecate pushnew!
In the spirit of 6f40ad5, I'm deprecating this macro because it doesn't
provide enough value to exist and serves only to complicate a casual
reader's understanding of Doom's modules.

Ref: 6f40ad55f5
2026-03-01 18:10:43 -05:00
Henrik Lissner
2c42e47a30
nit(evil): reformat & revise comments
Tidy up in preparation for bigger changes post-v3.
2026-03-01 18:10:43 -05:00
Henrik Lissner
88e2a0d5de
feat(evil,vertico): merge evil's into emacs' registers
Makes Emacs more broadly aware of Evil's registers (when Evil is
active), and fixes an issue where our advice integrating
`consult-register` with Evil registers would properly list Evil
registers, but not fetch/insert them correctly (#8698).

Fix: #8698
Close: #8699
Co-authored-by: liaowang11 <liaowang11@users.noreply.github.com>
2026-03-01 18:10:43 -05:00
Henrik Lissner
2428689f3b
fix(evil): appease byte-compiler (unused var) 2026-03-01 18:10:42 -05:00
Henrik Lissner
a5a56cd171
revert: evil-numbers
juliapath/evil-numbers@616aff9e5c -> juliapath/evil-numbers@e7adac70a0

Original issue was not resolved.

Ref: b002bf3f8e
Amend: a0d6aac43f
2026-02-15 21:58:25 -05:00
kovan
e989ab4920 fix(evil): reference correct kill-buffer function in :kill ex command
The :k(ill) ex command referenced `doom/kill-current-buffer`, which
doesn't exist. Replace with `kill-current-buffer`, matching every other
kill-buffer binding in the codebase (zx, SPC b k, q, etc.).

Fix: #6341
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 21:54:19 -05:00
Henrik Lissner
60c0febf19
nit(evil): +evil--clean-isearch-overlays-a: add REVIEW note
Ref: #8625
Amend: 9019a16887
2026-02-14 20:04:31 -05:00