Re: vt and keyboard accents

From: Stefan Esser <se_at_FreeBSD.org>
Date: Wed, 01 Feb 2023 16:35:53 UTC
Am 29.01.23 um 01:54 schrieb Yuri:
> Looking into an issue with accents input for vt and cz (so
> /usr/share/vt/keymaps/cz.kbd) keyboard where some of the accents are
> working and other result weird unrelated characters output.
> 
> Checking kbdcontrol -d output, there is an obvious difference with
> keymap contents -- all mappings are trimmed down to 1 byte after reading:
> 
> kbdcontrol:
>    dacu  180  ( 180 180 ) ( 'S' 'Z' ) ( 'Z' 'y' ) ( 's' '[' )
>               ( 'z' 'z' ) ( 'R' 'T' ) ( 'A' 193 ) ( 'L' '9' )
>               ( 'C' 006 ) ( 'E' 201 ) ( 'I' 205 ) ( 'N' 'C' )
>               ( 'O' 211 ) ( 'U' 218 ) ( 'Y' 221 ) ( 'r' 'U' )
>               ( 'a' 225 ) ( 'l' ':' ) ( 'c' 007 ) ( 'e' 233 )
>               ( 'i' 237 ) ( 'n' 'D' ) ( 'o' 243 ) ( 'u' 250 )
>               ( 'y' 253 )
> 
> keymap:
>    dacu 0xb4    ( 0xb4   0xb4    ) ( 'S'    0x015a  ) ( 'Z'    0x0179  )
> ( 's'    0x015b  )
>                 ( 'z'    0x017a  ) ( 'R'    0x0154  ) ( 'A'    0xc1    )
> ( 'L'    0x0139  )
>                 ( 'C'    0x0106  ) ( 'E'    0xc9    ) ( 'I'    0xcd    )
> ( 'N'    0x0143  )
>                 ( 'O'    0xd3    ) ( 'U'    0xda    ) ( 'Y'    0xdd    )
> ( 'r'    0x0155  )
>                 ( 'a'    0xe1    ) ( 'l'    0x013a  ) ( 'c'    0x0107  )
> ( 'e'    0xe9    )
>                 ( 'i'    0xed    ) ( 'n'    0x0144  ) ( 'o'    0xf3    )
> ( 'u'    0xfa    )
>                 ( 'y'    0xfd    )
> 
> Source of the problem is the following definition in sys/sys/kbio.h:
> 
> struct acc_t {
>          u_char          accchar;
>          u_char          map[NUM_ACCENTCHARS][2];
> };
> 
> While the keymaps were converted to have the unicode characters for vt
> in the commit below, the array to store them (map) was missed, or was
> there a reason for this?
> 
> ---
> commit 7ba08f814546ece02e0193edc12cf6eb4d5cb8d4
> Author: Stefan Eßer <se@FreeBSD.org>
> Date:   Sun Aug 17 19:54:21 2014 +0000
> 
>      Attempt at converting the SYSCONS keymaps to Unicode for use with
> NEWCONS.
>      I have spent many hours comparing source and destination formats,
> and hope
>      to have caught the most severe conversion errors.
> ---
> 
> I have tried the following patch and it allows me to enter all accents
> documented in the keymap, though I must admit I'm not sure it does not
> have hidden issues:
> 
> diff --git a/sys/sys/kbio.h b/sys/sys/kbio.h
> index 7f17bda76c5..fffeb63e226 100644
> --- a/sys/sys/kbio.h
> +++ b/sys/sys/kbio.h
> @@ -200,7 +200,7 @@ typedef struct okeymap okeymap_t;
> 
>   struct acc_t {
>          u_char          accchar;
> -       u_char          map[NUM_ACCENTCHARS][2];
> +       int             map[NUM_ACCENTCHARS][2];
>   };
> 

I have extended the range of the map array entries to 16 bits,
which is sufficient for all currently defined keymap entries,
see commit 1e0853ee8403.

Thanks for reporting!

Regards, STefan