Elisp Meta Characters in String
— Kaushal ModiThe setup of outshine package for emacs requires the user to set the
variable outline-minor-mode-prefix
to "\M-#"
before the outline-mode
package (that ships with emacs) is loaded.
The best way to do this is via the Customize interface in emacs.
So I did M-x customize
and set that variable’s value to "\M-#"
and restarted
emacs and that worked.
But then I was surprised to see that value being saved in the custom.el
as
'(outline-minor-mode-prefix "\243")
.
After some digging, I came across this elisp meta-character syntax reference,
In a string, the 2**7 bit attached to an ASCII character indicates a meta character; thus, the meta characters that can fit in a string have codes in the range from 128 to 255, and are the meta versions of the ordinary ASCII characters.
Thus if the decimal ASCII value of the #
character is 35, the decimal
value of \M-#
will be “2**7 bit attached to #” i.e. 2**7 + 35 = 128 + 35 =
163. But the value of \M-#
got stored in custom.el
as \243
.
From the elisp general escape syntax reference,
An octal escape sequence consists of a backslash followed by up to three octal digits; thus, ‘?\101’ for the character A
.. and doing decimal to octal conversion of 163 gives 243!