Stefan Monnier <[EMAIL PROTECTED]> writes:

>> (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)

Please add parentheses to clarify precedence here.

> +           ? 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))

Shouldn't that be 0x80 ?

>       XSETINT (c, (XINT (c) | meta_modifier) & ~0x80);
>  
>        /* Allow string since binding for `menu-bar-select-buffer'

-- 
Kim F. Storm <[EMAIL PROTECTED]> http://www.cua.dk



_______________________________________________
emacs-pretest-bug mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/emacs-pretest-bug

Reply via email to