This was an elusive bug caused by two upstream behaviors:
1. `kill-buffer` will silently refuse to kill a buffer if there is a
thread associated with it.
2. `global-diff-hl-mode` activates `diff-hl-mode` in *most* buffers,
even invisible ones. This calls `diff-hl-update` each time
it does. This isn't a problem *unless* you have `diff-hl-update-async`
enabled, because it creates a thread every time `diff-hl-update` is
called. That means for every buffer -- real or transient -- you have
a new thread queued.
And this caused two main issues:
1. Temporary buffers are often opened and closed very rapidly (often
faster than the thread can complete), so they weren't getting cleaned
up. I hope you weren't too attached to your memory, because you'll
have a lot of buried buffers to feed before long!
2. In cases where `diff-hl-update` simply takes a long time, multiple
calls to it would queue more threads. When Emacs eventually yields
the CPU to them, you'll get random,
impossible-to-predict-or-track-down freezes. Joy!
This may very well be enough reason to disable `diff-hl-update-async` by
default, but I didn't want to give up on it *just* yet, despite how
inelegant this solution is...
Fix: #7954Fix: #7991
- Remove +dired--suppress-hooks-in-previews-a, because Dirvish already
does this.
- Exploit dirvish-preview-environment instead of hardcoding the
enable-local-variables let-binding for the child process. Its defaults
are more reasonable.
BREAKING CHANGE: Removes magit-todos from the magit module. I've always
thought my choice to include it as a 'reasonable default' in this module
was a bit dubious. Given how trivial the config is, I leave it to users
to install if they want it, instead.
Prior to this, I used window-width to determine whether file details
should be hidden, but there was a jarring delay on `dirvish-setup-hook`
that made the effect look awful (especially when walking up and down
file trees).
This changes `dirvish-hide-details` to accept a list of contexts where
it should be enabled, which I think is more elegant. Of course,
`dirvish-hide-details` will fall back on old behavior if set to `t` or
`nil`.
I'll consider upstreaming it later (and perhaps doing similar for
`dirvish-hide-cursor`).
Ref: #6760
Currently, setting `dirvish-use-mode-line` to nil blanks out the
mode-line, and setting it to `t` makes Dirvish use its own mode-line. To
get the default mode-line, `dirvish-mode-line-format` needs to be set to
nil, but even then Dirvish will prepend a bar to the default-mode-line
so it can control its height, which I think is a confusing chain of
causes and effects.
This changes the behavior such that `dirvish-use-mode-line` controls
whether `dirvish-mode-line-format` will be used or not. I'll upstream
this to hlissner/dirvish later.
Fix: #8000
Apheleia's default config for prettier adds --use-tabs/--tab-width to
force prettier to match Emacs' indent settings, which is fine until a
prettier config file tries to overwrite it and is ignored. As a
compromise (and stopgap solution), I omit these flags if any prettier
settings are set in the current project.
Fix: #7998
BREAKING CHANGE: This drops the Dired module's +ranger flag and replaces
much of this module's innards with (my maintained fork of) Dirvish,
which provides a spiritually similar (if not superior) experience to
Ranger. Plus, Dirvish makes most of our dired plugins unnecessary.
Also, I am now registering myself as this module's maintainer now that I
dogfood and maintain Dirvish.
Close: #6760
Co-authored-by: alexluigit <alexluigit@users.noreply.github.com>
Co-authored-by: hpfr <hpfr@users.noreply.github.com>
Co-authored-by: LemonBreezes <LemonBreezes@users.noreply.github.com>
Co-authored-by: pharcosyle <pharcosyle@users.noreply.github.com>
These uses of this macro are a micro optimization that yield no benefit.
The only place it's useful is in autoloads (which are guaranteed to be
byte-compiled during `doom sync`).
popen is a dependency of flymake-popen, and is on nongnu-elpa, which
wasn't supported by straight until recently, so the package! statement
is no longer needed.
Ref: 71469d8056
Due to the nested structure of eglot-server-programs, our advice would
not correctly detect entries for some modes (like javascript modes),
effectively disabling Eglot in those modes.
I've replaced the advice with a solution baked into lsp!, so folks still
have the option of using eglot-ensure directly if they want it activated
unconditionally.
Amend: #7219
Reduces edge cases, in the case the user eagerly loads any of these
packages. Also replaces all hardcoded paths to ocp-indent and opam's
executables with variables, respecting user configuration.
The ocamlformat.el package reinvents what Apheleia is already doing, but
Apheleia's default definition for ocamlformat is a little simplistic.
This merges the efforts of both and allows us to cut down on an unneeded
dependency.