Some doom commands will generate a temporary script at
~/.emacs.d/.local/.doom.sh so that it can run an arbitrary shell command
after the current invocation of bin/doom ends. Very useful for, say,
restarting the currently running doom command after a destructive
operation, like updating Doom's source code, tangling your literate
config, or for launching arbitrary programs, like a new instance of
Emacs. This is necessary because elisp lacks an execv implementation.
However, for some folks, .doom.sh wasn't executing at all. This meant:
1. Some `doom upgrade`s would upgrade Doom itself but never move on to
the second step of the process: updating its packages.
2. Literate config users could tangle their configs on `doom sync`, but
the actual syncing process would never happen (#3746).
3. `doom run` would do nothing.
I hadn't realized /bin/sh runs bash in POSIX mode (at least, on systems
where /bin/sh = bash, like nixOS or macOS). In POSIX mode the script
will abort the if a builtin command (like export) returns a non-zero
exit code. Since .doom.sh is basically a bunch of exports followed by an
arbitrary command, and there are some environment variables
that can trigger validation errors (like UID triggering a "read-only
variable" error), we have a problem.
Hopefully addresses #3746
The user's private packages.el is read first, to ensure disabled
packages are recorded as soon as possible, however, this means private
packages are recorded early into `doom-packages`, and so are built
first (and thus, before org-mode, which is later registered by the
lang/org module).
This compilation order can cause lots of issues with org packages
loading the older, built-in version of org included with Emacs, instead
of the newer org-mode.
May address #3172
To add support for "update 11", see:
http://akrl.sdf.org/gccemacs.html#org4b11ea1
Also:
+ Move eln files to ~/.emacs.d/.local/cache/eln
+ Disable comp-deferred-compilation by default (now that it is
enabled-by-default upstream).
Tangling would load org libraries. If org hasn't been installed yet,
this means the older version is loaded, later interfering with the
installation and byte-compilation of the new package, causing down the
road.
This advice doesn't kill (real) buffers if they're visible in another
window, but would prompt you about unsaved buffers even if it wasn't
destined to be killed. Now it only prompts you if the buffer will be
killed.
- Tangling no longer adds temp files to recentf (#3685)
- If :tangle yes is used, the result is no longer tangled to
/tmp/config.org.*.el
- In interactive sessions the org buffer is no longer interfered with
when tangling (by scrolling up to the top of the page, or undoing
overlays/markers).
- Tangling no longer triggers formatters (or any save/write hooks).
- Appease byte-compiler sama, complaining about free variables.
- Moves clipetty to its own, opt-in module (#2671, #3195, #3498)
- Fix cursor shape changing between evil states (#1994)
- Moves `xterm-mouse-mode` and `visible-cursor` config out of core.
Currently, `add-load-path!` doesn’t check for duplicates in `load-path`, because `cl-pushnew` tests for equality with `eql`. This changes the predicate to `string=`, fixing the bug.
Since bury-buffer is already on SPC b z, and isn't a common operation in
day to day Emacs use.
Other useful keybinds:
ZZ -> Save then kill current window
zx -> kill current buffer (prompts if unsaved)
SPC b z -> bury buffer
zn -> (operator) narrow buffer
zN -> widen narrowed buffer
+ Fixes: doom-unpropertize-kill-ring-h ran too late to affect the value
of kill-ring that gets saved.
+ Adds: now persist mark-ring and global-mark-ring (doesn't affect evil
users)
If a load call occurs within the autoloads file and throws a
file-missing error, it would be misleading to say 'doom sync' will fix
it, so forward the real error!
I had incorrectly assumed tramp-own-remote-path would prepend the remote
system's PATH to tramp's exec-path, but it does not, it prepends your
local machine's PATH onto it. tramp-default-remote-path was what I was
looking for and it is already in tramp-remote-path by default.
If tramp can't find a program on the remote it's because either the
remote doesn't support getconf (which tramp uses to scrape the remote
PATH), or your PATH on the remote has been incorrectly configured.
Doom highlights incorrect indentation (i.e. tabs if indent-tabs-mode =
nil, spaces if indent-tabs-mode = t). This used to be disabled in
read-only buffers (e.g. built-in libraries), making style conflicts hard
to see. No more! Now you can see the mess for yourself!
This should at least report what function invoked the error.
doom-first-input-hook was especially problematic because it runs on
pre-command-hook, which Emacs is very protective of. It will smother
errors that arise from it and auto-remove the offending hook. This
self-correction is nice for avoiding a broken Emacs, but it makes it
tough to debug those issues.