Commit Graph

63 Commits

Author SHA1 Message Date
Johannes Altmanninger
c2ab5d4694 Allow to undo and redo selection changes
From the issue:

> It often happens to me that I carefully craft a selection with multiple
> cursors, ready to make changes elegantly, only to completely mess it
> up by pressing a wrong key (by merging the cursors for example). Being
> able to undo the last selection change (even if only until the previous
> buffer change) would make this much less painful.

Fix this by recording selection changes and allowing simple linear
undo/redo of selection changes.

The preliminary key bindings are <c-h> and <c-k>.
Here are some other vacant normal mode keys I considered

	X Y
	<backspace> <minus>
	# ^ =
	<plus> '

unfortunately none of them is super convenient to type.  Maybe we
can kick out some other normal mode command?

---

This feature has some overlap with the jump list (<c-o>/<c-i>) and
with undo (u) but each of the three features have their moment.

Currently there's no special integration with either peer feature;
the three histories are completely independent.  In future we might
want to synchronize them so we can implement Sublime Text's "Soft
undo" feature.

Note that it is possible to restore selections that predate a buffer
modification. Depending on the buffer modification, the selections
might look different of course. (When trying to apply an old buffer's
selection to the new buffer, Kakoune computes a diff of the buffers
and updates the selection accordingly. This works quite well for
many practical examples.)

This makes us record the full history of all selections for each
client. This seems wasteful, we could set a limit. I don't expect
excessive memory usage in practice (we also keep the full history of
buffer changes) but I could be wrong.

Closes #898
2022-09-02 02:59:47 +02:00
Johannes Altmanninger
545c8429e0 doc keys: avoid pleonasm 2022-07-30 22:18:37 +02:00
Maxime Coste
2d8456db10 Move user mappings to <space> and keep/remove selection to , 2022-07-05 08:43:40 +10:00
Maxime Coste
ef8a11b3db Make x just select the full lines
`x` is often criticized as hard to predict due to its slightly complex
behaviour of selecting next line if the current one is fully selected.

Change `x` to use the previous `<a-x>` behaviour, and change `<a-x>` to
trim to fully selected lines as `<a-X>` did.

Adapt existing indentation script to the new behaviour
2022-07-05 08:43:40 +10:00
Maxime Coste
d13b3f41cb Merge remote-tracking branch 'potatoalienof13/fixdoc' 2022-06-30 19:52:43 +10:00
Maxime Coste
d87ee212ba Insert all register values in prompt after <c-r> when Alt-modified
`<c-r><a-.>` will insert all selections joined by space instead of only
the main one as `<c-r>.` would.
2022-06-30 16:39:18 +10:00
potatoalienof13
810071a6ee Finish broken sentence 2022-06-28 18:27:00 -04:00
Johannes Altmanninger
7c43a4b51b doc: fix dead links to doc pages 2022-04-09 15:29:54 +02:00
Frank LENORMAND
85b78dda2e src: Select the data inserted by ! and <a-!>
Closes #1468
2022-03-06 10:13:14 +11:00
Coleman McFarland
c682f30ab6 Change "edition" to "editing" in keys.asciidoc 2022-02-13 21:18:35 -05:00
Frank LENORMAND
3131e18f28
doc keys: Explain <c-s> better 2021-09-11 09:14:51 +03:00
Tim Allen
b228232de7 Clarify which parts of Kakoune the extra_word_chars option affects.
Also, document the "empty option implies underscore" quirk.
2021-06-09 17:50:30 +10:00
Maxime Coste
fa3aa3c1a3 Add + key to duplicate selections and <a-+> to merge overlapping ones
This is an experiment and might get reverted if overlapping selections
prove too cumbersome.

Fixes #4041
2021-02-15 09:01:14 +11:00
Cedric Sodhi
221fc38bd9 Disabled backtick escaping
Fixes issue #2377 by removing the ability to escape backticks in backticks in compliance with asciidoc's behaviour. Adjusted hooks.asciidoc, keys.asciidoc, and command-parsing.asciidoc to match accordingly.
2020-10-27 12:36:33 +01:00
Maxime Coste
f549190a98 Add support for explicit completion in prompt mode 2020-10-19 19:36:58 +11:00
Delapouite
8989febe7a doc: mention comma key for entering user-mode 2020-10-04 13:34:57 +02:00
Maxime Coste
ca195ffd7b Merge branch 'docs' of http://github.com/migueldvb/kakoune 2020-08-23 14:01:01 +10:00
Johannes Altmanninger
9d33b57e49 doc: mention aliases <lt> and <gt> in keys.asciidoc
This information can also be found in in :doc mapping but I think this
doesn't hurt.
2020-07-25 20:07:18 +02:00
Johannes Altmanninger
48a53fecc3 doc: use angle brackets for page{up,down} like for other key names 2020-07-25 20:07:18 +02:00
Frank LENORMAND
24c5169400 src: Introduce a <percent> named key
Similarly to the <semicolon> key, make it easier to write
`:execute-keys` commands by replacing <percent> with `%`.

Highlighters can keep escaping the sign when regular expressions are
not quoted, but built-in scripts that use `%` as an editing primitive
have been modified to use the named key, for clarity.
2020-06-03 15:42:38 +03:00
Maxime Coste
61dc64808d Merge remote-tracking branch 'Delapouite/object-punctuation' 2020-05-30 09:23:06 +10:00
Johannes Altmanninger
e4f7d42396 doc: fix typos and clarify some parts 2020-05-28 18:37:26 +02:00
Miguel de Val-Borro
85227019ff Fix some typos in docs 2020-05-09 12:18:16 -04:00
Delapouite
8748bdbc10 doc(keys): mention punctuation text-objects
The fact that punctuation characters can act as surrounding
delimiters is a useful behavior but not obvious.

This "hidden" text-object feature deserves to be described explicitely.
2020-05-06 23:02:29 +02:00
Delapouite
551d7dfbac doc: mention newly introduced <semicolon> and <a-semicolon> keys
Ref: #3156
2019-10-28 22:18:55 +01:00
Maxime Coste
fc3a1b6973 Make arrow keys normal mode mappings instead of commands 2019-09-15 19:40:38 +10:00
Joachim Henke
4c61f82fb2 fix a few typos 2019-07-06 17:37:30 +02:00
Jason Felice
7cf6eddc30 Add object mode expansions 2019-02-17 20:18:19 -05:00
Jason Felice
000aa2282c Add object command 2019-02-14 09:32:04 -05:00
Jan-Jaap Korpershoek
0d8d32cf38 Change all instances of count to monospace 2019-02-01 18:19:50 +01:00
Jan-Jaap Korpershoek
4521099ebb Add explanation of count for s and S commands 2019-02-01 16:36:57 +01:00
Maxime Coste
e0b9327a9f Merge remote-tracking branch 'lenormf/fix-trim-selections' 2018-11-27 18:25:14 +11:00
Frank LENORMAND
2d44712766 src: Implement <a-m> and <a-M>
Closes #2425
2018-09-30 19:56:37 +03:00
Frank LENORMAND
6b7200e4d5 src: Move <a-m> to <a-_> 2018-09-30 19:45:20 +03:00
Frank LENORMAND
3d79107773 src: Drop selections that only contain whitespace on _
Fixes #2387
2018-09-27 14:47:26 +03:00
Eric James Michael Ritz
a2f844cfb4 Improve the documentation for the 'm' key
The GitHub issue referenced below describes the default behavior of
the 'm' key in a way that was unknown to me.  As the issue says,
"'m' is a pretty misunderstood key", and goes on to describe how
the documentation makes it sound as if the cursor must be on the
matching character before 'm' will work.  However, this is not true;
pressing 'm' will jump forward to "select the next sequence enclosed
in balanced chars".  This patch updates the documentation so that it
describes that behavior.

GitHub-Issue: #2425
Special-thanks: Delapouite
2018-09-23 12:43:22 -04:00
Delapouite
afc1aab60a docs: add few missing characters in faces and keys pages 2018-09-09 11:19:45 +02:00
Maxime Coste
37e2558413 Add readline word erase bindings, throw in clipboard for good measure
Add <c-w> and <a-d> (along with <c-W> and <a-D> that work on WORDs),
and <c-y> which pastes the transient clipboard contant (which saves
big erase, such as word erase and line end/begin erase).

Fixes #2355
2018-09-04 07:55:56 +10:00
Maxime Coste
4b7e77ae00 Change line editing bindings to match readline's
In the end, no better solution materialized so far, and custom
Kakoune line editing bindings are hard to remember. Using well
known readline bindings seems just more convenient.

Closes #800, although it does not contain all the binding proposed
by it (I might accept a few additional ones, such as <c-w>, but not
too much, I still see that as a hack pending a nicer solution).
2018-09-03 22:15:28 +10:00
Delapouite
c2bd4b38a0 Add toggling capabilities for <c-o> in Insert and Prompt mode
Ref #2121
2018-08-27 22:08:38 +02:00
Maxime Coste
d23ac09fc1 Add support for <a-;> in prompt mode
Fixes #2096
Closes #2060
2018-07-15 11:17:16 +10:00
Delapouite
8ca98da1cb docs: add missing <a-{> <a-}> <a-[> and <a-]> keys 2018-06-03 10:29:52 +02:00
Delapouite
43745a8fb2 docs: Add more info about which keys use a default register 2018-05-25 09:15:07 +02:00
Delapouite
408c3d6957 Docs: homogenize "selections" idiom in keys.asciidoc 2018-05-07 10:58:58 +02:00
Delapouite
9f852652ee Docs: fix rotate content example 2018-04-19 18:55:41 +02:00
Tim Allen
50e422659b Add support for the shift modifier.
Because keyboard layouts vary, the shift-modifier `<s-…>` is only supported
for special keys (like `<up>` and `<home>`) and for ASCII lowercase where
we assume the shift-modifier just produces the matching uppercase character.
Even that's not universally true, since in Turkish `i` and `I` are not an
uppercase/lowercase pair, but Kakoune's default keyboard mappings already
assume en-US mappings for mnemonic purposes.

Mappings of the form `<s-x>` are normalized to `<X>` when `x` is an ASCII
character. `<backtab>` is removed, since we can now say `<s-tab>`.
2018-04-11 15:15:45 +10:00
Maxime Coste
6ee60ff9d7 Prompt: add <a-!> to expand the typed expansions in current line
Fixes #1952
2018-04-04 11:00:25 +10:00
Maxime Coste
ec7f3738ee Move rotate selection and rotate selection contents to ) and <a-)>
Backward rotation are supported with (.

Fixes #1210
2018-03-25 11:39:26 +11:00
Maxime Coste
11d6aefc91 Merge remote-tracking branch 'Delapouite/keys' 2018-03-11 12:09:02 +11:00
Maxime Coste
4584ecac77 Move WORD text object to <a-w>
It improves consistency and it looked like there was support for that
change on github.
Fixes #1861
2018-03-10 00:25:19 +11:00