Subject: 29; Disabling smerge-command-prefix results in error

From: Jonas Bernoulli <[email-masked]>
Date: Wed, 29 Jan 2025 20:28:32 +0100

Hello,

In Emacs 28 the prefix key was defined like this:

  (defcustom smerge-command-prefix "\C-c^"
    "Prefix for `smerge-mode' commands."
    :type '(choice (const :tag "ESC"   "\e")
                   (const :tag "C-c ^" "\C-c^" )
                   (const :tag "none"  "")
                   string))

  (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'

A possible fix could be to do it old-school:

  (defvar smerge-mode-map
    (let ((map (make-sparse-keymap))
          (key (key-description smerge-command-prefix)))
      (when (key-valid-p key)
        (keymap-set map key smerge-basic-map))
      map))

Best regards,
Jonas