Now uses an interned hook name (that could be removed, unlike the
uninterned symbol make-symbol creates).
Also, for consistency: fun -> fn
No fun allowed!
Adds new convenience macros like print! and insert!, and adds classes;
which are helper functions that can be called inline within format!,
print! et co, e.g.
(format! "%s" (filename "/tmp/some/file")) ; => file
(format! "%s" (relpath "/tmp/some/file" "/tmp")) ; => some/file
(format! "%s" (dirname "/tmp/some/file")) ; => /tmp/some
Check out doom-format-class-alist for more.
- Remove core-os and move many of its settings out to other core
libraries, where they belong
- Significantly improve commenting & compartmentalization of many
settings
- Correct some mis-named public hooks (that were named as if they were
private)
- Move the vast majority of optimizations to "Optimizations" section in
core.el
- Don't activate xclip-mode or osx-clipboard-mode if we're accessing
Emacs through an SSH connection (does more bad than good there)
- Add fast-but-imprecise-scrolling = t
- Set bidi-display-reordering = 'left-to-right, at the recommendation of
an Emacs dev. Apparently setting it to nil is undefined, as Emacs is
designed to always assume it's set; setting it explicitly to
left-to-right will still do what was originally intended by turning it
off: to reduce line/text scans for bidirectional text, which gives us
a moderate boost in general runtime snappiness
- Set inhibit-compacting-fon-caches = t on windows (where it struggles
especially with icon fonts)
- Disables "literal" mode for very large files (because I will be
backporting so-long.el from Emacs 27 in the next commit)
The two doom-gc-* variables in init.el couples the rest of the config to
these two files. The bulk of GC/file-handler optimization was moved into
core.el and simplified (all that idle-timer voodoo was overkill).
Also adds (setq frame-inhibit-implied-reize t) to early-init, which
speeds up startup a fair bit in some edge cases with larger fonts.
squash! Simplify and decouple init files
This is second of three big naming convention changes. In this commit,
we change the naming conventions for hook functions and variable
functions:
1. Replace the bar | to indicate a hook function with a -h suffix, e.g.
doom|init-ui -> doom-init-ui-h
doom|run-local-var-hooks -> doom-run-local-var-hooks-h
2. And add a -fn suffix for functions meant to be set on variables,
e.g.
(setq magit-display-buffer-function #'+magit-display-buffer-fn)
See ccf327f8 for the reasoning behind these changes.
This is first of three big naming convention updates that have been a
long time coming. With 2.1 on the horizon, all the breaking updates will
batched together in preparation for the long haul.
In this commit, we do away with the asterix to communicate that a
function is an advice function, and we replace it with the '-a' suffix.
e.g.
doom*shut-up -> doom-shut-up-a
doom*recenter -> doom-recenter-a
+evil*static-reindent -> +evil--static-reindent-a
The rationale behind this change is:
1. Elisp's own formatting/indenting tools would occasionally struggle
with | and * (particularly pp and cl-prettyprint). They have no
problem with / and :, fortunately.
2. External syntax highlighters (like pygmentize, discord markdown or
github markdown) struggle with it, sometimes refusing to highlight
code beyond these symbols.
3. * and | are less expressive than - and -- in communicating the
intended visibility, versatility and stability of a function.
4. It complicated the regexps we must use to search for them.
5. They were arbitrary and over-complicated to begin with, decided
on haphazardly way back when Doom was simply "my private config".
Anyhow, like how predicate functions have the -p suffix, we'll adopt the
-a suffix for advice functions, -h for hook functions and -fn for
variable functions.
Other noteable changes:
- Replaces advice-{add,remove}! macro with new def-advice!
macro. The old pair weren't as useful. The new def-advice! saves on a
lot of space.
- Removed "stage" assertions to make sure you were using the right
macros in the right place. Turned out to not be necessary, we'll
employ better checks later.
This has been deprecated for a while. I will remove it entirely with the 2.1
release, but for now, you can no longer patch your app bundle with this.
Use 'doom env refresh' instead.
This way, projectile caches won't expire when restarting Emacs, but
instead time + projectile-files-cache-expire seconds from the time it is
serialized.
The package! family of macros will throw an error if used in the wrong
files. This same check would prevent macroexpand from expanding them, or
prevent them from being evaluated inline.
Fixes an edge case where setq-hook! would override the setq hooks of
other calls to setq-hook!
I want to avoid make-symbol/gensym so users can refer to these hook
functions by name, in case users want to remove these hooks by hand, if
necessary (e.g. for debugging purposes).
custom-set-faces! and custom-theme-set-faces! are now drop-in
replacements for custom-set-faces and custom-theme-set-faces with one
major distinction: the latter will wait for the theme to be loaded
before applying the changes, this allows you to use theme-specific APIs
in your face definitions (like doom-color from doom-themes).
You no longer have to think about load order when using these macros.