emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Suggestion for improving ergonomics of repeat-maps: define-repeat-ma


From: acdw
Subject: Re: Suggestion for improving ergonomics of repeat-maps: define-repeat-map
Date: Fri, 10 Sep 2021 00:53:10 +0000
User-agent: Cyrus-JMAP/3.5.0-alpha0-1229-g7ca81dfce5-fm-20210908.005-g7ca81dfc

On 2021-09-09 (Thursday) at 17:50, Juri Linkov <juri@linkov.net> wrote:

> > 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 think this is an absolutely wonderful idea, especially to have 
`define-keymap' be more like `setq' (in fact, I think even more functions could 
be defined this way, but I digress).  I can work on a `define-keymap' this 
weekend, and incorporate `define-repeat-keymap' in it :D

> 
> > 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.

This is the biggest reason I'm asking about `define-repeat-map' here; It's 
definitely a user-configuration-ease type macro/function (honestly this 
probably should be a function, the more I think about it).  It's not very 
"Emacs-y", from what I've seen of the "Emacs-y" way to do things.

However, `define-repeat-key' /does/ have some functionality that's not included 
in even the code you've included: it automatically creates the necessary 
aliases for continuation commands, which you'd need to do separately to create 
`forward-word-with-case' and `backward-word-with-case', above.

Though now that I'm thinking of it, I'd probably rewrite your example to include

(define-repeat-key map "f" (defalias 'forward-word-with-case 'forward-word))

Though I don't think /that's/ very "Emacs-y", either.

At the very least I'd be happy to add `define-repeat-map' or something like it 
to ELPA.

-- 
~ acdw
acdw.net | breadpunk.club/~breadw



reply via email to

[Prev in Thread] Current Thread [Next in Thread]