GNU bug report logs - #75933
29; Disabling smerge-command-prefix results in error

Previous Next

Package: emacs;

Reported by: Jonas Bernoulli <jonas <at> bernoul.li>

Date: Wed, 29 Jan 2025 19:29:01 UTC

Severity: normal

Full log


View this message in rfc822 format

From: Stefan Monnier <monnier <at> iro.umontreal.ca>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: Jonas Bernoulli <jonas <at> bernoul.li>, 75933 <at> debbugs.gnu.org
Subject: bug#75933: 29; Disabling smerge-command-prefix results in error
Date: Sat, 22 Feb 2025 11:23:41 -0500
> Ping! How should we proceed with this issue?

Maybe another way to look at it is that it's again bumping into
`define-keymap`s limitation that you can't easily "deactivate"
a binding.

We saw that back in the bug#68213: if a keymap is defined where some of
the key sequences are chosen dynamically (typically coming from a config
var), we tend to get into trouble where it can be difficult/inconvenient
to avoid duplicate key bindings (we fixed that problem by demoting that
error to a warning), and similarly there's no easy way for the user to
say "no key at all" (which was another way we could have fixed the
problem in bug#68213).

Maybe we should have an "impossible key sequence" (like we have the
`regexp-unmatchable`) and offer it in the customization interface?
And then arrange for `define-keymap` (and maybe others) to handle
it accordingly.

Not sure what that key sequence should be, but some choices that come to
mind would be:

- nil
- [] (a.k.a "")
- [impossible]


        Stefan

>> Cc: 75933 <at> debbugs.gnu.org
>> Date: Thu, 06 Feb 2025 14:50:04 +0100
>> From:  Jonas Bernoulli via "Bug reports for GNU Emacs,
>>  the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
>> 
>> Stefan Monnier <monnier <at> iro.umontreal.ca> writes:
>> 
>> >>   (easy-mmode-defmap smerge-mode-map
>> >>     `((,smerge-command-prefix . ,smerge-basic-map))
>> >>     "Keymap for `smerge-mode'.")
>> >>
>> >> In Emacs 29.1 (after 2ae3b66fa80 and some fixup commits), the former
>> >> remained as it was in 28, but the latter was replaced with:
>> >>
>> >>   (defvar-keymap smerge-mode-map
>> >>     (key-description smerge-command-prefix) smerge-basic-map)
>> >>
>> >> Setting the option to "", to add no prefix command, results in:
>> >>
>> >>   keymap--check: "" is not a valid key definition; see `key-valid-p'
>> >
>> > Emacs Emacs<29 setting the option to "" resulted in keeping
>> > `smerge-mode-map` empty, AFAICT.  Is that what you wanted or did you
>> > expect all the bindings of `smerge-basic-map` to be made available
>> > without a prefix?
>> 
>> Well *I* am perfectly happy with the defaults.  But there's at least one
>> Magit user who never uses Smerge and thus doesn't want keymaps cluttered
>> with its bindings.
>> 
>> > To my mind the value "" would be closer to meaning that all the bindings
>> > of `smerge-basic-map` should be made available without a prefix, and if
>> > we want to allow the bindings to be completely absent, it might make
>> > more sense to use a nil value.
>> 
>> That does make sense to me too, but I don't think that users who have
>> set this to "", to not even use a top-level binding for Smerge commands,
>> would be happy if the meaning were changed to add *multiple* top-level
>> bindings, that's worse for them than the default of one prefix keymap.
>> So it might be better to use two new symbols, such as 'top-level and
>> 'none, and make "" a backward compatibility alias for 'none.
>> 
>> 
>> 
>> 





This bug report was last modified 112 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.