Hi Robert

I just tried using key-description, for example

(define-minor-mode math-typing-mode
  "A minor mode for typing maths characters"
  :init-value nil
  :lighter " Math"
  (let ((map (make-sparse-keymap)))
    (if math-typing-mode
     (progn

        (define-key map (kbd "C-3") (key-description "\u00B3"))

        (use-local-map map))
      (use-local-map nil))))

but this produces the same result as 

(define-key map (kbd "C-3") "\u00B3")

while

(define-key map (kbd "C-3") [?\u00B3]) or my original lambda works (inserts the unicode character when you press C-3)

Probably I misunderstand what you are suggesting though?



On Mon, 9 Jun 2025 at 15:40, Eli Zaretskii <eliz@gnu.org> wrote:
> Cc: 78714@debbugs.gnu.org, Andreas Schwab <schwab@linux-m68k.org>
> From: Robert Pluim <rpluim@gmail.com>
> Date: Mon, 09 Jun 2025 13:48:31 +0200
>
> >>>>> On Mon, 9 Jun 2025 11:05:40 +0100, John Holman <john.g.holman@gmail.com> said:
>
>     John> Many thanks Andreas - that's certainly more concise than using a lambda.
>     John> I do think this is a trap for users who may expect that a key definition
>     John> that a single character string simply specifies the character to be
>     John> inserted when that key is pressed rather than a macro. Treating a string
>     John> with a single character as a character to insert rather than a
>     John> one-character macro might avoid that, or if that is awkward to implement or
>     John> otherwise undesirable an explicit warning in the documentation might help.
>     John> The documentation for define-key does say that a string is treated as a
>     John> keyboard macro, but the significance of that is easy to miss.
>
> (info "(emacs) Init Rebinding") describes how to do this. The
> docstring for `keymap-global-set' also mentions `key-description',
> which avoids the need to manually write in vector notation, which I
> guess we could add to `keymap-set' as well.

Feel free to add that.