unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Stefan Monnier <monnier@iro.umontreal.ca>
To: Juri Linkov <juri@linkov.net>
Cc: emacs-devel@gnu.org
Subject: Re: master 12409c9: New transient mode 'repeat-mode' to allow shorter key sequences (bug#46515)
Date: Thu, 18 Feb 2021 10:32:23 -0500	[thread overview]
Message-ID: <jwva6s18kdt.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: <87lfbln1w8.fsf@mail.linkov.net> (Juri Linkov's message of "Thu,  18 Feb 2021 11:37:19 +0200")

>>> +(defvar next-error-repeat-map
>>> +  (let ((map (make-sparse-keymap)))
>>> +    (define-key map    "n" 'next-error)
>>> +    (define-key map "\M-n" 'next-error)
>>> +    (define-key map    "p" 'previous-error)
>>> +    (define-key map "\M-p" 'previous-error)
>>> +    map)
>>> +  "Keymap to repeat next-error key sequences.  Used in `repeat-mode'.")
>>> +(put 'next-error 'repeat-map 'next-error-repeat-map)
>>> +(put 'previous-error 'repeat-map 'next-error-repeat-map)
>>
>> Could we avoid this duplication between the map and the
>> `repeat-map` property?
>>
>>> +            (set-transient-map map)))))))
>>
>> For example passing a second argument t to `set-transient-map` makes
>> `set-transient-map` look to see if the key just typed was found in the
>> map and if so keep the transient alive, which seems to [after an
>> admittedly cursory check of the code] play the same role as what your
>> `repeat-map` property does, but without the duplication.
>
> The current design relies on post-command-hook that runs after every command.
> Using the second argument KEEP-PRED of set-transient-map will add duplication:
> the same map will be set by both post-command-hook and KEEP-PRED.

My point was not to say "use `keep-pred`", but to point out that
`keep-pred` found a way to solve the same problem without the duplication.

[ I'd be nice to be able to use `keep-pred` directly since it would
  likely make the code simpler, but it may well be that this is
  incompatible with the current code's design or with its intended
  behavior, or that it would require further changes that would make the
  overall code more complex.  ]

> So currently there is no duplication.

There is in the above code snippet: the `put` statements are redundant
since the same info is fundamentally already available from
`next-error-repeat-map`.


        Stefan




  reply	other threads:[~2021-02-18 15:32 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20210217180506.28704.14280@vcs0.savannah.gnu.org>
     [not found] ` <20210217180507.C061220DFB@vcs0.savannah.gnu.org>
2021-02-18  4:39   ` master 12409c9: New transient mode 'repeat-mode' to allow shorter key sequences (bug#46515) Stefan Monnier
2021-02-18  9:37     ` Juri Linkov
2021-02-18 15:32       ` Stefan Monnier [this message]
2021-02-18 17:29         ` Juri Linkov
2021-02-23 22:08           ` Stefan Monnier
2021-02-24 18:45             ` Juri Linkov
2021-02-24 18:58               ` Stefan Monnier
2021-02-24 19:44                 ` Juri Linkov
2021-02-24 20:53                   ` Stefan Monnier

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=jwva6s18kdt.fsf-monnier+emacs@gnu.org \
    --to=monnier@iro.umontreal.ca \
    --cc=emacs-devel@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 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).