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"