From: Paul Nelson <ultrono@gmail.com>
To: Juri Linkov <juri@linkov.net>
Cc: 74140@debbugs.gnu.org
Subject: bug#74140: [PATCH] Add :continue-only directive for repeat maps in bind-keys, use-package
Date: Mon, 4 Nov 2024 21:45:15 +0100 [thread overview]
Message-ID: <CAOA-32M5L2EyUGbU24JqF8uWmq5_8STQAX_yyWAAH7eO6452nw@mail.gmail.com> (raw)
In-Reply-To: <87ldxy953e.fsf@mail.linkov.net>
> > activate continue bind
> > :continue yes yes yes
> > :continue-only no yes yes
> > :exit no no yes
> > :enter yes no no
>
> Thanks, this table provides a clear overview.
>
> So bind-keys doesn't need :enter? Ok.
I understand the purpose of bind-keys to be "bind keys to commands in
a keymap". Since :enter doesn't bind a key, it doesn't fit in
bind-keys.
There is a missing fourth case ("yes, no, yes") describing a key bound
to a command in a repeat map which the command activates but the key
exits. I haven't been imaginative enough to think of a good use case.
"Why does this command start a repeat sequence, but then terminate it
when I try to use it in that sequence?"
>
> Since defvar-keymap uses :continue by default,
> what is missing in defvar-keymap is :continue-only.
> For adding :continue-only to defvar-keymap
> I looked how you implemented it for bind-keys,
> and it seems making an alias doesn't look
> like a clean solution.
>
> I know that 'define-repeat-map' makes an alias as well.
> So some time ago I had one idea how such aliases
> could be avoided. The solution would be to put
> a new property like this:
>
> (put 'yank 'repeat-continue-keys '("y"))
> (put 'undo 'repeat-continue-keys '("C-/"))
>
> Its semantics is that when such a property exists
> then repeat-mode will check if the last typed keys
> don't exist in this list, only then the repeat map
> should be activated.
>
I didn't quite follow. If the repeat map is active and the user
presses "C-/", then repeat-mode will see that the key in question
exists in the repeat-continue-keys list, and so will not activate the
repeat map. This is the opposite of the intended behavior. Perhaps
I've misunderstood?
I think that in an ideal world, "repeat-map" would be a property of a
keybinding inside a keymap, rather than a command. The alias-based
approach gives one approximation to that.
I guess one alias-free approach would be to introduce a
repeat-continue property describing keymaps that a command should
perpetuate, e.g.,
(put 'yank 'repeat-continue '(paragraph-repeat-map))
(put 'undo 'repeat-continue '(paragraph-repeat-map))
Anyway, is the idea that you'd like to see equivalent functionality in
defvar-keymap and/or to have both implementations avoid aliases?
next prev parent reply other threads:[~2024-11-04 20:45 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-31 17:36 bug#74140: [PATCH] Add :continue-only directive for repeat maps in bind-keys, use-package Paul Nelson
2024-11-01 7:54 ` Juri Linkov
2024-11-01 8:29 ` Paul Nelson
2024-11-01 8:58 ` Paul Nelson
2024-11-04 19:22 ` Juri Linkov
2024-11-04 20:45 ` Paul Nelson [this message]
2024-11-05 18:25 ` Juri Linkov
2024-11-05 20:51 ` Paul Nelson
2024-11-07 19:41 ` Juri Linkov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAOA-32M5L2EyUGbU24JqF8uWmq5_8STQAX_yyWAAH7eO6452nw@mail.gmail.com \
--to=ultrono@gmail.com \
--cc=74140@debbugs.gnu.org \
--cc=juri@linkov.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.