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
These two commands aren't used anywhere and the specifics of how
people *want* these sort of commands to work are so specialized and
niche that ours are unlikely to suit most people's needs. As an
alternative, Evil users already have `evil-shift-right` and
`evil-shift-left`, and vanilla users can `(setq tab-always-indent nil)`,
among *many* other possible choices.
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.
To resist contamination from the current buffer or environment (e.g. due
to direnv). Also, ensure `doom-after-reload-hook` is executed, even if
the reload process fails.
Warnings about unused lexical variables, arity warnings, unescaped
single quotes in docstrings, shadowed variables, and invalid value for
:local depending on Emacs version.
This function should not be used as a substitute for
`package-initialize`, to activate packages installed via package.el,
this is solely for metadata for Doom's package manager.
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.
`persp-after-load-state-functions` functions must take arguments, but
`doom-kill-childframes-h` didn't take any, causing errors when loading
persp-mode sessions.
Fix: #8700
Amend: e5bbae8144
And use it to replace the various `posframe-delete-all` hooks littered
about to clean up child/posframes in contexts where they may linger
after destructive operations (like changing the active workspace or
executing `doom/reload`).
If the site-lisp load-path entries different between the non-interactive
and interactive sessions, there could be redundant paths prepended to
load-path, causing load order issues (#8607). This ensures they are
appended, instead.
Fix: #8607
For dictating what buffers are considered real based on their major
modes.
Also makes most terminal emulator or comint-mode buffers real by
default.
Fix: doomemacs/community#73
Emacs 29 introduced a `restart-emacs` command that is more reliable, but
it cannot restart Emacs with arbitrary arguments, which the old
`restart-emacs` library could. Without this capability,
`doom/restart-and-restore` is not trivially (or elegantly) possible, and
I can't justify a whole extra dependency just to support that,
especially in my pursuit to slim down Doom's core.
This commit also removes the doom/upgrade command, which is an awkward
and fickle command to support across platforms (too many edge cases).
This is a temporary measure until the interpolation in the powershell
script can be addressed directly (by someone better versed in
powershell).
Fix: #8572Close: #8654
Co-authored-by: kovan <kovan@users.noreply.github.com>
Treat paths as paths, rather than strings. Removes the requirements that
doom-*-dir variables end in slash (though I'll continue doing so as a
convention). Also moves a lot of cache/data into the current profile's
cache/data directories. Shouldn't actually affect anything for folks not
using Doom's profile system (yet).
Fix: #8616
Add `doom/toggle-scratch-buffer` and `doom/toggle-project-scratch-buffer`
commands that toggle scratch buffer visibility, consistent with how
`SPC o t` toggles the terminal popup.
Also extract mode determination logic into `doom--scratch-buffer-initial-mode`
helper to ensure toggle commands respect `doom-scratch-initial-major-mode`
configuration (including mode inheritance when set to `t`).
Keybindings updated to use toggle variants:
- `SPC x` (evil) / `C-c f x` (emacs) for scratch buffer
- `SPC p x` (evil) / `C-c p x` (emacs) for project scratch buffer
Fix: #8604
BREAKING CHANGE: Moves ws-butler, dtrt-indent, and whitespace defaults
out of Doom's core and into a new module. ws-butler is gated behind
+trim and dtrt-indent behind +guess. Users who depend on/like these
packages will need to enable the new module and their respective
flags (which is the default going forward).
This change is motivated by an ongoing effort to slim down Doom's
core (by (re)moving non-essentials from it).
This also addresses an issue where dtrt-indent would vastly increase
load times for some major-modes (e.g. elixir-mode & elm-mode, see #7537)
by restricting it to non-project files and non-read-only buffers AND
excludign those two major modes from indent guessing.
Fix: #8516Fix: #7537
Allows the association of arbitrary envvars or variables with the build
artifacts of a package. If they change, the package is rebuilt on the
next 'doom sync'. This is a temporary measure, which is why this is not
touted as a new feature. It will be replaced in v3.
Yes, yes. I did a stupid here. I depend on the order of a hash table,
and sure enough, that came back to bite me when that changed internally
in Emacs 29. In practice, this meant packages were getting
installed/rebuilt in reverse order, which, besides some odd output
during 'doom sync' for users on 29+, didn't pose any overt issues, but
may have caused strange, inexplicable byte-code warnings/errors.
But, rather than do the smart thing and *not* do this, I do the next
best thing: procrastinate! Because the solution is non-trivial (I don't
control the hash table in question) and this is precisely the sort of
technical debt I've fixed in v3, and I'd really, *really* rather beat my
head on that wall, rather than this one.
Prior to this, we had some rudimentary retry logic for failed git clones
resulting in an empty repo, but it didn't respond to other legit
errors (like connection errors or legit remote failures). This one does,
retrying in more contexts.
Close: #8523
Co-authored-by: NightMachinery <NightMachinery@users.noreply.github.com>
The Emacs appimage generates a new mountpoint on each invokation, but
Doom's profiles assume that the Emacs directories don't move. To make
Doom's profiles a little more profile, it will no longer set `load-path`
and simply add the new paths to the existing one. Same for
Info-directory-list.
Consequently, this also seems to speed up startup times for ~8% in my
tests. Neat.
Prevent rare edge cases where FORM is an atom, causing `cadr` to throw a
type error. Might explain some cases of `doom sync` doing nothing after
'> Generating N init files...'.
Amend: c014950f6d
While generating the autoloads for the current profile (at `doom sync`),
remove any `add-to-list` forms modifying `interpreter-mode-alist` or
`auto-mode-alist` in autoloaded `(when (treesit-available-p) ...)`
blocks. We want to fully rely on `major-mode-remap-defaults`.
When a pinned package is repinned, the package manager attempts to `git
checkout` the new pin, which won't work if the package isn't a git
repo (see 8cdddd87).
Amend: 8cdddd87d9
With af4cbc7, escaping and quoting in $EMACS is now respected by
bin/doom; so make use of it to fix issues with $EMACS paths/commands
that contain spaces.
Ref: af4cbc7791d2
Fix: #8475Fix: #8403
From this point on, Straight will download packages from tarballs (if
possible) from their associated forge rather than clone them as git
repositories. This is (marginally) faster and consumes significantly
less space. Doom treats its packages as build artifacts anyway.
This shouldn't cause any immediate breakage, but it may upset folks who
want their local package installs to be repositories. For them, this can
be reversed by simply adding this to $DOOMDIR/init.el:
(after! doom-straight
(setq straight-vc-use-snapshot-installation nil))
This only applies to packages installed after this point. Packages that
are already cloned as a repo will stay that way until the next time
they're uninstalled or reinstalled from scratch. Plus it only works on
systems that have `tar` in their $PATH *and* forges that are
supported (at the time of writing: github, gitlab, codeberg, bitbucket,
and sourcehut).
Ref: radian-software/straight.el@4241b63952
Doesn't change the default behavior of the command, but adds an optional
FRAMES argument (a list of frames or `t` for all open and future
frames). If passed the prefix arg, FRAMES default to `t`, which applies
the opacity change to all open and future frames.
Close: #8395
Co-authored-by: lattarov <lattarov@users.noreply.github.com>