diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2025-03-22 13:45:28 +0300 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2025-03-22 14:13:53 +0300 |
commit | 867d22e419afe769f05ad26b61c6ea5ea1432c3c (patch) | |
tree | 72d70f75c7f80a6d41f08e90e66fbd6adf23f5ae /src/cmdline.c | |
parent | 33f71654136014bac094babaaa81d91245fdd24c (diff) | |
download | sciteco-867d22e419afe769f05ad26b61c6ea5ea1432c3c.tar.gz |
harmonized all word-movement and deletion commands: they move/delete until the beginning of words now
* All commands and their documentations were inconsistent.
* ^W rubbed out to the beginning of words.
* Shift+Right (fnkeys.tes) moved to the beginning of the next word if
invoked at the beginning of a word and to the end of the next word otherwise.
* <W> (and <V> and <Y> by extension) moved to the end of the next word.
* The cheat sheet would claim that <W> moves to the beginning of the next word.
* Video TECO's <W> command would differ again from everything else.
With positive arguments, it moved to the beginning of words, while
with negative it moved to end of words.
I decided not to copy this behavior.
* It has been decided to adopt a consistent beginning-of-words policy.
-W therefore differs from Video TECO in moving to the beginning of the
current or previous word.
* teco_find_words() is now based on parsing the document pointer, instead
of relying on SCI_WORDENDPOSITION, since the latter cannot actually be
used to skip strictly non-word characters.
This requires a constant amount of Scintilla messages but will require fewer
messages only when moving for more than 3 words.
* The semantics of <W> are therefore now consistent with Vim and Emacs as well.
* Shift+Right/Left is still based on SCI_WORDENDPOSITION, so it's behavior
differs slightly from <W> for instance at the end of lines, as it will
stop at linebreaks.
* Unfortunately, these changes will break lots of macros, among others
the M#rf, M#sp and git.blame macros ("Useful macros" from the wiki).
Diffstat (limited to 'src/cmdline.c')
-rw-r--r-- | src/cmdline.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/cmdline.c b/src/cmdline.c index dde096d..b3da887 100644 --- a/src/cmdline.c +++ b/src/cmdline.c @@ -509,6 +509,10 @@ teco_state_stringbuilding_start_process_edit_cmd(teco_machine_stringbuilding_t * case TECO_CTL_KEY('W'): { /* rubout/reinsert word */ teco_interface_popup_clear(); + /* + * NOTE: This must be consistent with teco_find_words(): + * Always delete to the beginning of the previous word. + */ g_auto(teco_string_t) wchars; wchars.len = teco_interface_ssm(SCI_GETWORDCHARS, 0, 0); wchars.data = g_malloc(wchars.len + 1); |