This introduces the `g o d` text object for comparing regions. It works
like evil-exchange. Select two regions in sequence with `g o d` and an
ediff buffer of the selections will pop up.
Signed-off-by: Rudi Grinberg <me@rgrinberg.com>
Focus-on-split is being disabled to achieve vim parity. The advice is
still necessary to ensure splitting updates the window buffer list, so
operations like winner-undo undoes correctly.
To match vim's behavior, when splitting windows. The
+evil-window-split-a and +evil-window-vsplit-a advice are still
necessary to preserve proper "window focus" order.
Keybinds that correct behavior or provide or extend vim functionality
were moved to their respective modules, or to the :editor evil module.
Keybinds in the global space, that are particularly opinionated but
potentially harmful or imposing as a default, or likely for users to
change (like leader keys), are kept in config/default.
Calling this pivotal macro "def-package!" has frequently been a source
of confusion. It is a thin wrapper around use-package, and it should be
obvious that it is so. For this reason, and to match the naming
convention used with other convenience macros/wrappers, it is now
use-package!.
Also changes def-package-hook! -> use-package-hook!
The old macros are now marked obsolete and will be removed when straight
integration is merged.
- 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)
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.
ysiw<testRET will transform
String
To
test<String>
In C-style major modes that use angle bracket generics/templates (e.g.
C++, rust, C#, java, swift, and typescript).
It was formerly escaped because of general bugginess, particularly when
bind -v was used in zsh. It's still too buggy to enable in vterm-mode,
however.
They are:
]m, [m
Jump to next/previous beginning of method/function.
]M, [M
Jump to next/previous end of method/function
]#, [#
Jump to next/previous preprocessor directive (only supports C-style
directives for now)
]*, [* (or ]\, [\)
Jump to next/previous comment
And rebind its keys from C-a/C-S-a to g= and g-. This is because the old
narrow/widen commands aren't nearly as useful (and have a number of
alternative keybinds).
As much as I'd like to us C-a/C-x (as it is in Vim), C-x is an essential
keybind for Emacs.
Also, in visual mode, each number will be affected incrementally (ala g
C-a and g C-x in vim).
set-cursor-color causes an expensive redraw. Plugins like treemacs may
silently change window focus, triggering these calls and causing
freezing. We use evil-set-cursor-color instead, which avoids
set-cursor-color unless the cursor's color has changed.
Since we can't predict what kind of frames the user will open, we assume
they're graphical. Terminal+daemon users will have to undo this in
`~/.emacs.d/init.el`.