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 <s...@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