[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Euro sign bound, Pound sign not bound. (Bug?)
From: |
Stefan Monnier |
Subject: |
Re: Euro sign bound, Pound sign not bound. (Bug?) |
Date: |
Mon, 07 May 2007 11:27:02 -0400 |
User-agent: |
Gnus/5.11 (Gnus v5.11) Emacs/22.1.50 (gnu/linux) |
> (t 342604 self-insert-command)
[...]
> (t 2211 nil)
> or generically: (key-binding (vector (string-to-char "£")) t) ->
> self-insert-command
> (key-binding "£" t) -> nil
> So, it seems to be a problem with the string specification of the key.
Oh, it rings a bell: IIRC key-sequences specified as strings are presumed to
be "sequences of bytes" (because the use of a string was introduced when
those key-sequences could only come from a tty). So they do not behave
correctly in the presence of non-ASCII chars.
The patch below seems to fix the problem.
Stefan
--- keymap.c 04 avr 2007 10:34:26 -0400 1.350
+++ keymap.c 07 mai 2007 11:17:18 -0400
@@ -1155,7 +1155,8 @@
if (SYMBOLP (def) && !EQ (Vdefine_key_rebound_commands, Qt))
Vdefine_key_rebound_commands = Fcons (def, Vdefine_key_rebound_commands);
- meta_bit = VECTORP (key) ? meta_modifier : 0x80;
+ meta_bit = (VECTORP (key) || STRINGP (key) && STRING_MULTIBYTE (key)
+ ? meta_modifier : 0x80);
if (VECTORP (def) && ASIZE (def) > 0 && CONSP (AREF (def, 0)))
{ /* DEF is apparently an XEmacs-style keyboard macro. */
@@ -1311,7 +1312,7 @@
c = Fevent_convert_list (c);
/* Turn the 8th bit of string chars into a meta modifier. */
- if (INTEGERP (c) && XINT (c) & 0x80 && STRINGP (key))
+ if (STRINGP (key) && XINT (c) & 0x8 && !STRING_MULTIBYTE (key))
XSETINT (c, (XINT (c) | meta_modifier) & ~0x80);
/* Allow string since binding for `menu-bar-select-buffer'