Subject: misc/29648: Userland implementation of Slovenian keymap
To: None <misc-bug-people@netbsd.org, gnats-admin@netbsd.org,>
From: None <jkovacic@gmail.com>
List: netbsd-bugs
Date: 03/10/2005 07:04:00
>Number:         29648
>Category:       misc
>Synopsis:       Userland implementation of Slovenian keymap
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    misc-bug-people
>State:          open
>Class:          support
>Submitter-Id:   net
>Arrival-Date:   Thu Mar 10 07:04:00 +0000 2005
>Originator:     Jernej Kovacic
>Release:        NetBSD 2.0-releae
>Organization:
>Environment:
>Description:
Slovenian keymap not supported in NetBSD. kern/29615 already suggests an in-kernel solution, this is its userland version that does not require recompiling the kernel.
>How-To-Repeat:

>Fix:
Copy/paste the following lines into a file (e.g. /usr/share/wscons/keymaps/pckbd.si):

------ file start ----------
# Slovenian keymap (usable in most parts of the former Yugoslavia)
# by Jernej Kovacic

keycode   2=1 exclam asciitilde
keycode   3=2 quotedbl L2_caron
keycode   4=3 numbersign asciicircum
keycode   5=4 dollar L2_breve
keycode   6=5 percent degree
keycode   7=6 ampersand	L2_ogonek
keycode   8=7 slash grave
keycode   9=8 parenleft L2_dotabove
keycode  10=9 parenright acute
keycode  11=0 equal L2_dblacute
keycode  12=apostrophe question diaeresis
keycode  13=plus asterisk cedilla
keycode  16=q Q backslash
keycode  17=w W bar
keycode  21=z Z
keycode  26=L2_scaron L2_Scaron division
keycode  27=L2_dstroke L2_Dstroke multiply
keycode  33=f F bracketleft
keycode  34=g G bracketright
keycode  37=k K L2_lstroke
keycode  38=l L L2_Lstroke
keycode  39=L2_ccaron L2_Ccaron
keycode  40=L2_cacute L2_Cacute ssharp
keycode  41=cedilla diaeresis
keycode  43=L2_zcaron L2_Zcaron currency
keycode  44=y Y
keycode  47=v V at
keycode  48=b B braceleft
keycode  49=n N braceright
keycode  50=m M section
keycode  51=comma semicolon
keycode  52=period colon
keycode  53=minus underscore
keycode  86=less greater
keycode 184=Mode_switch Multi_key
-------- file end ---------------

open /etc/wscons.conf, comment out any lines starting with encoding and add
mapfile  /usr/share/wscons/keymaps/pckbd.si
(or whatever your filename is).

Now you have to recompile wsconsctl so it will recognise new keysyms. Open sys/dev/wscons/wsksymdef.h

If you want central/eastern European charcters to be encoded in Unicode,
insert the following lines into it:

------ file section start -----------
#define KS_L2_Lstroke		0x0141
#define KS_L2_lstroke		0x0142
#define KS_L2_Cacute		0x0106
#define KS_L2_cacute		0x0107
#define KS_L2_Ccaron		0x010c
#define KS_L2_ccaron		0x010d
#define KS_L2_Scaron		0x0160
#define KS_L2_scaron		0x0161
#define KS_L2_Zcaron		0x017d
#define KS_L2_zcaron		0x017e
#define KS_L2_Dstroke		0x0110
#define KS_L2_dstroke		0x0111
#define KS_L2_caron		0x02c7
#define KS_L2_breve		0x02d8
#define KS_L2_ogonek		0x02db
#define KS_L2_dotabove		0x02d9
#define KS_L2_dblacute		0x02dd
-------- file section end -----------

if you prefer ISO8859-2 encoded characters, insert the following lines instead:

------ file section start -----------
/*
 * Group Latin-2 (characters from iso8859-2)
*/

#define KS_L2_Lstroke		0xa3
#define KS_L2_lstroke		0xb3
#define KS_L2_Cacute		0xc6
#define KS_L2_cacute		0xe6
#define KS_L2_Ccaron		0xc8
#define KS_L2_ccaron		0xe8
#define KS_L2_Scaron		0xa9
#define KS_L2_scaron		0xb9
#define KS_L2_Zcaron		0xae
#define KS_L2_zcaron		0xbe
#define KS_L2_Dstroke		0xd0
#define KS_L2_dstroke		0xf0
#define KS_L2_caron		0xb7
#define KS_L2_breve		0xa2
#define KS_L2_ogonek		0xb2
#define KS_L2_dotabove		0xff
#define KS_L2_dblacute		0xbd
-------- file section end -----------

Then copy wsksymdef.h to /usr/include/dev/wscons
and recompile wsconsctl:

cd sbin/wsconsctl
make
make install

Now you can restart your computer.

If you don't want to recompile wsconsctl, do not touch wsksymdef.h. Just open pckbd.si again and replace newly created ISO8859-2 keysyms with their ISO8859-1 "counterparts" bearing the same numeric code:

L2_Lstroke	-->	sterling
L2_lstroke	-->	threesuperior
L2_Cacute	-->	AE
L2_cacute	-->	ae
L2_Ccaron	-->	Egrave
L2_ccaron	-->	egrave
L2_Scaron	-->	copyright
L2_scaron	-->	onesuperior
L2_Zcaron	-->	registered
L2_zcaron	-->	threequarters
L2_Dstroke	-->	ETH
L2_dstroke	-->	eth
L2_caron	-->	periodcentered
L2_breve	-->	cent
L2_ogonek	-->	twosuperior
L2_dotabove	-->	ydiaeresis
L2_dblacute	-->	onehalf

edit /etc/wscons.conf as described above and reboot.

If you have any further questions, do not hesitate to ask me.