Defining `*-any-quote` objects via the exiting `*-block` helpers leads
to incorrect behaviour, where the trailing boundary is also included as
part of the selection (cursor on `|`, selection between `|`):
```
start: "te|st"
v i q: "|test"|
```
The expected behaviour is the same as `v i "`:
```
start: "te|st"
v i q: "|test|"
```
Fix: #5698
Taking a look at the built in windmove functions shows that Emacs has a
built in function for swapping windows called `window-swap-states`.
Using this ensures the window state is maintained.
Ref: #6023
Co-authored-by: luveti <luveti@users.noreply.github.com>
Emacs 27 introduced a bunch of `window-*-change-functions` hooks,
including `window-selection-change-functions` and
`window-buffer-change-functions`, which handles 98% of the use case for
Doom's `doom-switch-{buffer,window,frame}-hook` hooks, so I've rewritten
them to use them under the hood, which amounts to simpler code and fewer
hacks.
According to the documentation of `evil-window-split` the variable
`evil-split-window-below` needs to be non-nil for the new window to be
created below; and for `evil-window-vsplit` it is the variable
`evil-vsplit-window-right` that needs to be non-nil for the window to be
created on the right.
This is to accommodate users who default to emacs mode, rather than
insert mode. The two are also very alike, so many of these checks should
apply to both (almost) equally.
To use rename-file, copy-file and delete-file, so these commands can
enjoy the benefits of any plugins that have advised these, like org-roam
does for rename-file.
Also makes +evil/easymotion generic; it can now be moved to any key, and
new keys can be added to the <easymotion> event, rather than having to
wait for evilem-map to become available.
Also fixes +org/goto-visible if used before avy is loaded.
Relevant to #1672
This can be used to extract paths from evil-ex style paths. e.g. the
following inserts the stdout into the current buffer (assuming we're in
~/some/project/filename.c):
:R!echo %:P ~/some/project
:R!echo %:t filename.c
:R!echo %:e c
:R!echo %:r filename
:R!echo ~/another/project/%:t:r.h
~/another/project/filename.h
:R % contents of current file
http://vimdoc.sourceforge.net/htmldoc/cmdline.html#filename-modifiers
has a full list of vim filename modifiers. Doom doesn't support all of
them, but it does support most of them.
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.