Subject: bug#47688: 28.0.50; repeat-mode: Make rectangle commands repeatable. Also some misc. queries, comments

From: Juri Linkov <[email-masked]>
Date: Mon, 12 Apr 2021 19:16:16 +0300

> Could you please add rectangle commands to the repeatable set?

Could you please demonstrate an example of the real key sequences
where repeat-mode could help to greatly reduce the length of
such key sequences.

> This is what I have in my .emacs.  It works reasonably well, except
> for the `x' (- `rectangle-exchange-point-and-mark') key below:
>
> Issue 1:
> --------
>
> In Non-repeat mode,
>
> 1. Press C-x SPC and make a rectangel.
>
> 2. Press C-x C-x 4 or more times.  You will see the cursor jumping
>    between the corners.
>
> With below snippet installed, in repeat-mode, repeat the above
> operations with single key strokes. I am seeing that the 3rd press of
> x gets me out of the repeat loop and inserts the char "x" in the
> buffer.

Thanks for reporting the issue, this is fixed now.

> Issue 2:  A repeat map can provide a custom `:help'-er
> -----------------------------------------------------
>
> This is the message I see in the minibuffer.
>
>     Repeat with c, ESC, w, r, d, k, o, b, C-b, x, C-x, f, C-f, <left>,
>     SPC, <down>, C-n, N, <up>, C-p, <right>, t, y
>
> 1. `ESC' above correpsonds to `M-w' in the repeat map.  The single
>     character `ESC' confused me for some time.  I wonder if the help
>     text could be improved in this case.

I don't know if there is a function that extracts all key sequences
from the keymap.

There is describe-map-tree that prints the keybindings to the output buffer,
but what is needed is a function that just returns a list of key sequences
from the keymap.

> 2. The help text is really really big, and it clutters the echo area.
>
>    It seems that .... Repeatable keys are essentially a poor-man's
>    hydra,
>
>    So, a repeat-map, like the rectangle one below, which has lots of
>    keybindings can set a `:help' attribute on itself.
>    `repeat-post-hook' can then rely on this `:help'-er to provide a
>    help much similar to what the hydra package provides.

A new option is implemented now.

> Issue 3:  A repeat map can take `:keep-pred' (or a `:exit-key') and other properties.
> ----------------------------------------------------------------------------
>
> When looked askance, `repeat-post-hook' is essentially a wrapper
> around `transient-map'.
>
> So, a `repeat-map' can take a `:keep-pred' and `:on-exit' attributes,
> in addition to a `:help' attribute.

We already tried to change the values of set-transient-map arguments,
but such arguments break repeat-map.

> This will obviate the need for the global `repeat-exit-key' i.e., the
> choice of how the map exits should itself be delegated to the repeat
> map. `

The purpose of repeat-exit-key is to avoid the need to add an exit key
to every keymap.

> Suggestion 1:  Provide a macro(?) for creating repeatable commands.
> ------------------------------------------------------------------
>
> Suggestion 2:
> ------------
>
> Provide a defmacro for chained commands.  I am making the suggestion
> here. I will provide details in a separate bug report.

Such convenience macros are better suitable for a separate package like hydra.