unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Juri Linkov <juri@linkov.net>
To: acdw <acdw@acdw.net>
Cc: emacs-devel@gnu.org
Subject: Re: Suggestion for improving ergonomics of repeat-maps: define-repeat-map
Date: Thu, 09 Sep 2021 20:50:52 +0300	[thread overview]
Message-ID: <874katproz.fsf@mail.linkov.net> (raw)
In-Reply-To: <f40f80de-a69f-44e8-8eec-6618dbd3c275@www.fastmail.com> (acdw@acdw.net's message of "Wed, 08 Sep 2021 03:22:15 +0000")

> I've written a package[1] for my own ease of use in defining
> repeat-maps for Emacs 28, and a few people have told me I should see
> about adding it to Emacs proper.  So here we are.

Thanks, this would be a nice addition.

> (defvar case-repeat-map
>   (let ((map (make-sparse-keymap)))
>     (define-key map "c" #'capitalize-word)
>     (define-key map "u" #'upcase-word)
>     (define-key map "l" #'downcase-word)
>     ;; movement
>     (define-key map "f" #'forward-word-with-case)
>     (define-key map "b" #'backward-word-with-case)
>     map)
>   "A map to repeat word-casing commands.  For use with `repeat-mode'.")

The reason why currently in Emacs core repeat-maps are defined this way
is because this is a standard way to define a keymap.

If normal keymaps were defined with a macro similar to the macro
that you created, it would be easier to migrate the existing repeat-maps
to your macro.  I mean if we had a macro `define-keymap' that defines
normal keymaps and that is similar to your `define-repeat-map',
then creating a repeat-map from the normal map would require just
changing the macro name `define-keymap' to `define-repeat-map'.

> I wrote the macro `define-repeat-map' to alleviate this large amount
> of configuration.  Using this macro, the above turns into this:
>
> ~~~
> (define-repeat-map case
>   ("c" capitalize-word
>    "u" upcase-word
>    "l" downcase-word)
>   (:continue "f" forward-word
>              "b" backward-word)
>   (:enter downcase-dwim
>           upcase-dwim
>           capitalize-dwim))

I'd like to hear more opinions whether the above macro is a better
way to define repeat-maps in Emacs core.  I'm sure this macro is nice
to use in a personal customization init file, but the question is
about using it in Emacs core.  If this will be preferable for Emacs core,
then it could be included in repeat.el.  Otherwise, GNU ELPA is a better place.
Then for Emacs core I'd suggest at least to add another macro
'define-repeat-key' that will remove the need of adding manually
`(put command 'repeat-map 'case-repeat-map)`, e.g.:

(defvar case-repeat-map
  (let ((map (make-sparse-keymap)))
    (define-repeat-key map "c" #'capitalize-word)
    (define-repeat-key map "u" #'upcase-word)
    (define-repeat-key map "l" #'downcase-word)
    ;; movement
    (define-repeat-key map "f" #'forward-word-with-case)
    (define-repeat-key map "b" #'backward-word-with-case)
    map)

Then it will preserve the same style already used in core.



  parent reply	other threads:[~2021-09-09 17:50 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-08  3:22 Suggestion for improving ergonomics of repeat-maps: define-repeat-map acdw
2021-09-08 14:54 ` Philip Kaludercic
2021-09-08 17:01   ` acdw
2021-09-09 17:50 ` Juri Linkov [this message]
2021-09-09 18:06   ` Lars Ingebrigtsen
2021-09-09 20:35     ` Augusto Stoffel
2021-09-09 20:39       ` Lars Ingebrigtsen
2021-09-10  0:53     ` acdw
2021-09-10 10:53       ` Lars Ingebrigtsen
2021-10-04  8:22       ` Lars Ingebrigtsen
2021-10-04  9:05         ` Adam Porter
2021-10-04  9:49           ` Lars Ingebrigtsen
2021-10-04 11:29             ` Adam Porter
2021-10-04 11:33               ` Lars Ingebrigtsen
2021-10-04 18:18             ` Juri Linkov
2021-10-04 19:02               ` Lars Ingebrigtsen
2021-10-04 19:24                 ` Stefan Monnier
2021-10-04 19:54                   ` Lars Ingebrigtsen
2021-10-04 20:16                   ` Lars Ingebrigtsen
2021-09-10  0:53   ` acdw

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

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=874katproz.fsf@mail.linkov.net \
    --to=juri@linkov.net \
    --cc=acdw@acdw.net \
    --cc=emacs-devel@gnu.org \
    /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 public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).