Subject: bug#13599: 24.2; (max-char) is too low (and hard to change)

From: Josh <[email-masked]>
Date: Thu, 31 Jan 2013 13:22:20 -0800

On Thu, Jan 31, 2013 at 11:08 AM, Eli Zaretskii <[email-masked]> wrote:
>> From: Magnar Sveen <[email-masked]>
[...]
>> Doing a M-: (read-char) s-8 gives me the key value of 8388664.
>
> Which is 800038 in hex.  Rings any bells?  (Hint: 38 hex is the digit
> 8.)
>
>> Following that up with (keyboard-translate 8388664 ?\[) does not work,
>> since it fails the (characterp) test. Turns out that (max-char) is a C
[...]
>> So, is this a bug?
> No.

At a minimum the fact that (characterp (read-char)) can ever return
nil indicates disagreement between the two functions about exactly
what a "character" is.  It would be good to reconcile this
disagreement in their documentation if nothing else.

Given the existence of read-key, is it necessary for read-char to be
able to return values greater than MAX_CHAR?  If it's indeed
necessary, would it be reasonable to add an optional parameter to
read-char for callers such as quoted-insert to specify that read-char
should return only values <= MAX_CHAR?

Josh

On Thu, Jan 31, 2013 at 11:08 AM, Eli Zaretskii <[email-masked]> wrote:
>> From: Magnar Sveen <[email-masked]>
>> Date: Thu, 31 Jan 2013 19:42:27 +0100
>>
>> Due to my weird norwegian keyboard, I'm trying to map my s-8 to [.
>>
>> Doing a M-: (read-char) s-8 gives me the key value of 8388664.
>
> Which is 800038 in hex.  Rings any bells?  (Hint: 38 hex is the digit
> 8.)
>
>> Following that up with (keyboard-translate 8388664 ?\[) does not work,
>> since it fails the (characterp) test. Turns out that (max-char) is a C
>> function that returns the highest allowed keycode. On my Emacs, that
>> is 4194303.
>>
>> Since (max-char) is a function and not a variable, and a C function at
>> that (not advisable when called from another C function (characterp)) -
>> I am left without options to rectify it. Or maybe I could use a hex
>> editor. :-)
>
> Your s-8 is a character with a modifier.  max-char returns the max
> value of a character, excluding any modifiers.  So that value has
> nothing to do with your difficulties in binding s-8 to insert [.
> Something entirely different is at work here, probably some problem in
> the code that you used to do the key binding.  But since you didn't
> show that code, it's hard to help you.
>
>> So, is this a bug?
>
> No.
>
>> Is it weird that max-char is a function? In C?
>
> That's precisely so people will be unable to change the value.  It's
> immutable.
>
>
>