GNU Emacs Lisp Reference Manual
These functions convert events, key sequences or characters to textual descriptions. These descriptions are useful for including arbitrary text characters or key sequences in messages, because they convert non-printing and whitespace characters to sequences of printing characters. The description of a non-whitespace printing character is the character itself.
single-key-description, below.
C-, a meta character turns into a string starting with M-,
and space, linefeed, etc. appear as SPC, LFD, etc. A
function key symbol appears as itself. An event that is a list appears
as the name of the symbol in the car of the list.
(single-key-description ?\C-x)
=> "C-x"
(key-description "\C-x \M-y \n \t \r \f123")
=> "C-x SPC M-y SPC LFD SPC TAB SPC RET SPC C-l 1 2 3"
(single-key-description 'C-mouse-1)
=> "C-mouse-1"
single-key-description, except that control characters are
represented with a leading caret (which is how control characters in
Emacs buffers are usually displayed).
(text-char-description ?\C-c)
=> "^C"
(text-char-description ?\M-m)
=> "M-m"
(text-char-description ?\C-\M-m)
=> "M-^M"