3rdparty: Add my old scripts to convert linux console keymap
I wrote that for the initial Bépo keymap. Change-Id: Ib1d54a3326724741615fb5ead6fd5f98701ad782
This commit is contained in:
+11
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
|
||||||
|
tgzbase='fr-dvorak-bepo-keymaps-1.0rc2'
|
||||||
|
tgzname="$tgzbase.tgz"
|
||||||
|
tgzurl="http://download.tuxfamily.org/dvorak/keymaps/$tgzname"
|
||||||
|
|
||||||
|
#wget "$tgzurl"
|
||||||
|
tar zxvf "$tgzname"
|
||||||
|
./parse_linux_keymap.sh "$tgzbase"/fr-dvorak-bepo-utf8.map > bepo.keymap
|
||||||
|
keymap -o 'French (Bépo)' -c bepo.keymap
|
||||||
+1567
File diff suppressed because it is too large
Load Diff
+479
@@ -0,0 +1,479 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# path to a keysymdef.h
|
||||||
|
KEYSYM_PATHS=(/usr/include/X11/ /zeta/apps/X11R6.4/include/X11/ ./)
|
||||||
|
KEYSYMDEF=keysymdef.h
|
||||||
|
|
||||||
|
# maps Linux (X11) keycodes to BeOS keycodes
|
||||||
|
L2B=(
|
||||||
|
0x00 0x00 0x12 0x13 0x14 0x15 0x16 0x17
|
||||||
|
0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x00 0x00
|
||||||
|
#16
|
||||||
|
0x27 0x28 0x29 0x2a 0x2b 0x2c 0x2d 0x2e
|
||||||
|
0x2f 0x30 0x31 0x32 0x00 0x00 0x3c 0x3d
|
||||||
|
#32
|
||||||
|
0x3e 0x3f 0x40 0x41 0x42 0x43 0x44 0x45
|
||||||
|
0x46 0x11 0x00 0x33 0x4c 0x4d 0x4e 0x4f
|
||||||
|
#48
|
||||||
|
0x50 0x51 0x52 0x53 0x54 0x55 0x00 0x00
|
||||||
|
0x00 0x5e 0x00 0x00 0x00 0x00 0x00 0x00
|
||||||
|
#64
|
||||||
|
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
|
||||||
|
#72
|
||||||
|
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
|
||||||
|
#80
|
||||||
|
0x00 0x00 0x00 0x00 0x00 0x00 0x69 0x00
|
||||||
|
#88
|
||||||
|
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
|
||||||
|
#96
|
||||||
|
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
|
||||||
|
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
|
||||||
|
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
|
||||||
|
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
|
||||||
|
#128
|
||||||
|
)
|
||||||
|
|
||||||
|
stop () {
|
||||||
|
echo "$@"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
warn () {
|
||||||
|
echo "warning: " "$@" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
remap_key_l2b () {
|
||||||
|
echo "$((${L2B[$1]}))"
|
||||||
|
}
|
||||||
|
|
||||||
|
unicode_to_utf8 () {
|
||||||
|
uni="${1}"
|
||||||
|
if [ "${uni:0:2}" = "U+" ]; then
|
||||||
|
uni="${uni:2}"
|
||||||
|
fi
|
||||||
|
if [ "${uni:0:2}" = "0x" ]; then
|
||||||
|
uni="${uni:2}"
|
||||||
|
fi
|
||||||
|
if [ "${#uni}" = "3" ]; then
|
||||||
|
uni="0${uni}"
|
||||||
|
fi
|
||||||
|
case "$uni" in
|
||||||
|
[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F])
|
||||||
|
#utf8="$(echo -en "\x${uni:0:2}\x${uni:2}" | iconv -f UCS-2BE -t UTF-8 | od -A n -t x1 | sed 's/ /\\\x/g')"
|
||||||
|
utf8="$(echo -en "\x${uni:0:2}\x${uni:2}" | iconv -f UCS-2BE -t UTF-8 | od -A n -t x1 | sed 's/ //g')"
|
||||||
|
#utf8="$uni"
|
||||||
|
if [ -z "$uni" ]; then
|
||||||
|
warn "empty utf-8 for '$uni'"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
warn "unhandled unicode '$uni'"
|
||||||
|
utf8="00"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
echo "0x$utf8"
|
||||||
|
}
|
||||||
|
|
||||||
|
broken_unicode_to_utf8 () {
|
||||||
|
uni="${1}"
|
||||||
|
if [ "${lk:0:2}" = "U+" ]; then
|
||||||
|
uni="${lk:2}"
|
||||||
|
fi
|
||||||
|
case "$uni" in
|
||||||
|
[0-7][0-9a-f])
|
||||||
|
utf8="$uni"
|
||||||
|
;;
|
||||||
|
00[0-7][0-9a-f])
|
||||||
|
utf8="${uni:2:2}"
|
||||||
|
;;
|
||||||
|
# 01[0-7][0-9a-f])
|
||||||
|
# utf8="c5$(printf '' $((0x80${uni:2:2})))"
|
||||||
|
# ;;
|
||||||
|
20[8-9a-f][0-9a-f])
|
||||||
|
utf8="e282${uni:2:2}"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
warn "unhandled unicode '$uni'"
|
||||||
|
utf8="00"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
echo "0x$utf8"
|
||||||
|
}
|
||||||
|
|
||||||
|
convert_keyval () {
|
||||||
|
lk="$1"
|
||||||
|
if [ "${lk:0:1}" = "+" ]; then
|
||||||
|
warn "unhandled +"
|
||||||
|
lk="${lk:1}"
|
||||||
|
fi
|
||||||
|
warn "lk: $lk"
|
||||||
|
case "$lk" in
|
||||||
|
[0-9a-zA-Z])
|
||||||
|
echo "'$lk'"
|
||||||
|
;;
|
||||||
|
U+*)
|
||||||
|
echo "$(unicode_to_utf8 $lk)"
|
||||||
|
;;
|
||||||
|
space)
|
||||||
|
echo "' '"
|
||||||
|
;;
|
||||||
|
underscore)
|
||||||
|
echo "'_'"
|
||||||
|
;;
|
||||||
|
'')
|
||||||
|
echo "''"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
keysymhex="$(grep "XK_$lk[ ]" "$keysymdef" | awk '{print $3}')"
|
||||||
|
warn "found: '$keysymhex'"
|
||||||
|
if [ -n "$keysymhex" ]; then
|
||||||
|
echo "$(unicode_to_utf8 $keysymhex)"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
case "$lk" in
|
||||||
|
one)
|
||||||
|
echo "'1'";;
|
||||||
|
two)
|
||||||
|
echo "'2'";;
|
||||||
|
three)
|
||||||
|
echo "'3'";;
|
||||||
|
four)
|
||||||
|
echo "'4'";;
|
||||||
|
five)
|
||||||
|
echo "'5'";;
|
||||||
|
six)
|
||||||
|
echo "'6'";;
|
||||||
|
seven)
|
||||||
|
echo "'7'";;
|
||||||
|
eight)
|
||||||
|
echo "'8'";;
|
||||||
|
nine)
|
||||||
|
echo "'9'";;
|
||||||
|
zero)
|
||||||
|
echo "'0'";;
|
||||||
|
*)
|
||||||
|
warn "unknown: '$lk'"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
echo "''"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
parse_lkeymap () {
|
||||||
|
while read line; do
|
||||||
|
if [ "${line:0:1}" = "#" ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
keyspec="${line%=*}"
|
||||||
|
keyvals="${line#*=}"
|
||||||
|
if [ "${keyspec}" = "${keyvals}" ]; then
|
||||||
|
#warn "skipping $line"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
mods=0
|
||||||
|
for k in $keyspec; do
|
||||||
|
#echo -n "-$k-"
|
||||||
|
case "$k" in
|
||||||
|
Shift|shift)
|
||||||
|
mods=$((mods | 0x1))
|
||||||
|
;;
|
||||||
|
Control|control)
|
||||||
|
mods=$((mods | 0x4))
|
||||||
|
;;
|
||||||
|
Alt|alt)
|
||||||
|
mods=$((mods | 0x2))
|
||||||
|
#warn "unhandled modifier"
|
||||||
|
;;
|
||||||
|
AltGr|altgr)
|
||||||
|
mods=$((mods | 0x40))
|
||||||
|
;;
|
||||||
|
plain)
|
||||||
|
mods=0
|
||||||
|
continue;;
|
||||||
|
keycode)
|
||||||
|
continue;;
|
||||||
|
*)
|
||||||
|
case "${k:0:1}" in
|
||||||
|
[0-9]*)
|
||||||
|
keycode="${k/[^0-9]}"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
stop "unknown: $k"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
if [ $((mods & 0x2)) -gt 0 ]; then
|
||||||
|
#echo "skipping Alt line: $line"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
hkeycode="$(remap_key_l2b "$keycode")"
|
||||||
|
#echo "$hkeycode"
|
||||||
|
# handle values
|
||||||
|
kv=($keyvals)
|
||||||
|
hkv=('' '' '' '')
|
||||||
|
if [ -z "${kv[1]}" ]; then
|
||||||
|
case "${kv[0]}" in
|
||||||
|
[a-z])
|
||||||
|
#echo "plop-${kv[0]}-"
|
||||||
|
kv[1]="$(echo "${kv[0]}" | tr '[a-z]' '[A-Z]')"
|
||||||
|
#echo "-${#kv[@]}-"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
for n in $(seq 0 3); do
|
||||||
|
#if [ -z "${kv[$n]}" ]; then
|
||||||
|
# continue;
|
||||||
|
#fi
|
||||||
|
hkv[$n]="$(convert_keyval "${kv[$n]}")"
|
||||||
|
if [ "${hkv[$n]}" = "" ]; then
|
||||||
|
hkv[$n]="''"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
#echo "-$mods-"
|
||||||
|
case "$mods" in
|
||||||
|
0)
|
||||||
|
eval "hkmap_${hkeycode}[0]=\"${hkv[0]}\"" # n
|
||||||
|
eval "hkmap_${hkeycode}[1]=\"${hkv[1]}\"" # s
|
||||||
|
#eval "hkmap_${hkeycode}[2]=\"${hkv[2]}\"" # c
|
||||||
|
eval "hkmap_${hkeycode}[3]=\"${hkv[2]}\"" # o
|
||||||
|
eval "hkmap_${hkeycode}[4]=\"${hkv[3]}\"" # os
|
||||||
|
eval "hkmap_${hkeycode}[5]=\"${hkv[1]}\"" # C
|
||||||
|
eval "hkmap_${hkeycode}[6]=\"${hkv[0]}\"" # Cs
|
||||||
|
eval "hkmap_${hkeycode}[7]=\"${hkv[2]}\"" # Co
|
||||||
|
eval "hkmap_${hkeycode}[8]=\"${hkv[3]}\"" # Cos
|
||||||
|
;;
|
||||||
|
64) #Option(AltGr)
|
||||||
|
eval "hkmap_${hkeycode}[3]=\"${hkv[0]}\""
|
||||||
|
;;
|
||||||
|
65) #Shift+Option(AltGr)
|
||||||
|
eval "hkmap_${hkeycode}[4]=\"${hkv[0]}\""
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
warn "unhandled modifiers $mods"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
#for i in $(seq 0 3); do
|
||||||
|
# if [ -z "${kv[$i]}" ]; then
|
||||||
|
# break
|
||||||
|
# fi
|
||||||
|
#
|
||||||
|
# #echo "[$i]='${kv[$i]}'"
|
||||||
|
#done
|
||||||
|
#echo ":$keycode:"
|
||||||
|
#echo "$keyspec===$keyvals"
|
||||||
|
done
|
||||||
|
gen_hkeymap
|
||||||
|
}
|
||||||
|
|
||||||
|
prefill_hkeymap () {
|
||||||
|
for n in $(seq 0 127); do
|
||||||
|
val="''"
|
||||||
|
val2=""
|
||||||
|
case $n in
|
||||||
|
1)
|
||||||
|
val="0x1b";;
|
||||||
|
[2-9]|1[0-6])
|
||||||
|
val="0x10";;
|
||||||
|
$((0x1e)))
|
||||||
|
val="0x08";;
|
||||||
|
$((0x1f)))
|
||||||
|
val="0x05";;
|
||||||
|
$((0x20)))
|
||||||
|
val="0x01";;
|
||||||
|
$((0x21)))
|
||||||
|
val="0x0b";;
|
||||||
|
$((0x23)))
|
||||||
|
val="'/'";;
|
||||||
|
$((0x24)))
|
||||||
|
val="'*'";;
|
||||||
|
$((0x25)))
|
||||||
|
val="'-'";;
|
||||||
|
$((0x26)))
|
||||||
|
val="0x09";;
|
||||||
|
$((0x34)))
|
||||||
|
val="0x7f";;
|
||||||
|
$((0x35)))
|
||||||
|
val="0x04";;
|
||||||
|
$((0x36)))
|
||||||
|
val="0x0c";;
|
||||||
|
$((0x37)))
|
||||||
|
val="0x01";val2="'7'";;
|
||||||
|
$((0x38)))
|
||||||
|
val="0x1e";val2="'8'";;
|
||||||
|
$((0x39)))
|
||||||
|
val="0x0b";val2="'9'";;
|
||||||
|
$((0x3a)))
|
||||||
|
val="'+'";;
|
||||||
|
$((0x47)))
|
||||||
|
val="0x0a";;
|
||||||
|
$((0x48)))
|
||||||
|
val="0x1c";val2="'4'";;
|
||||||
|
$((0x49)))
|
||||||
|
val="''";val2="'5'";;
|
||||||
|
$((0x4a)))
|
||||||
|
val="0x1d";val2="'6'";;
|
||||||
|
$((0x57)))
|
||||||
|
val="0x1e";;
|
||||||
|
$((0x58)))
|
||||||
|
val="0x01";val2="'1'";;
|
||||||
|
$((0x59)))
|
||||||
|
val="0x1e";val2="'2'";;
|
||||||
|
$((0x5a)))
|
||||||
|
val="0x0b";val2="'3'";;
|
||||||
|
$((0x5b)))
|
||||||
|
val="0x0a";;
|
||||||
|
$((0x61)))
|
||||||
|
val="0x1c";;
|
||||||
|
$((0x62)))
|
||||||
|
val="0x1f";;
|
||||||
|
$((0x63)))
|
||||||
|
val="0x1d";;
|
||||||
|
$((0x64)))
|
||||||
|
val="0x05";val2="'0'";;
|
||||||
|
$((0x65)))
|
||||||
|
val="0x7f";val2="'.'";;
|
||||||
|
# $((0x66)))
|
||||||
|
# val="''";;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
if [ -z "$val2" ]; then
|
||||||
|
val2="$val"
|
||||||
|
fi
|
||||||
|
eval "hkmap_$n=(\"$val\" \"$val2\" \"$val\" \"$val\" \"$val2\" \"$val\" \"$val2\" \"$val\" \"$val2\")"
|
||||||
|
|
||||||
|
#eval v="(\${hkmap_$n[*]})"
|
||||||
|
#echo "${v[7]}"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
gen_hkeymap () {
|
||||||
|
echo "#!/bin/keymap -l
|
||||||
|
Version = 3
|
||||||
|
CapsLock = 0x3b
|
||||||
|
ScrollLock = 0x0f
|
||||||
|
NumLock = 0x22
|
||||||
|
LShift = 0x4b
|
||||||
|
RShift = 0x56
|
||||||
|
LCommand = 0x5d
|
||||||
|
RCommand = 0x00
|
||||||
|
LControl = 0x5c
|
||||||
|
RControl = 0x60
|
||||||
|
LOption = 0x66
|
||||||
|
ROption = 0x5f
|
||||||
|
Menu = 0x68
|
||||||
|
#
|
||||||
|
# Lock settings
|
||||||
|
# To set NumLock, do the following:
|
||||||
|
# LockSettings = NumLock
|
||||||
|
#
|
||||||
|
# To set everything, do the following:
|
||||||
|
# LockSettings = CapsLock NumLock ScrollLock
|
||||||
|
#
|
||||||
|
LockSettings =
|
||||||
|
|
||||||
|
# Legend:
|
||||||
|
# n = Normal
|
||||||
|
# s = Shift
|
||||||
|
# c = Control
|
||||||
|
# C = CapsLock
|
||||||
|
# o = Option
|
||||||
|
# Key n s c o os C Cs Co Cos
|
||||||
|
"
|
||||||
|
|
||||||
|
for n in $(seq 0 127); do
|
||||||
|
printf "Key 0x%02x = " $n
|
||||||
|
eval v="(\${hkmap_$n[*]})"
|
||||||
|
for n in $(seq 0 8); do
|
||||||
|
printf "%-10s" "${v[$n]}"
|
||||||
|
done
|
||||||
|
echo ""
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "
|
||||||
|
Acute ' ' = 0xc2b4
|
||||||
|
Acute 'A' = 0xc381
|
||||||
|
Acute 'E' = 0xc389
|
||||||
|
Acute 'I' = 0xc38d
|
||||||
|
Acute 'O' = 0xc393
|
||||||
|
Acute 'U' = 0xc39a
|
||||||
|
Acute 'Y' = 0xc39d
|
||||||
|
Acute 'a' = 0xc3a1
|
||||||
|
Acute 'e' = 0xc3a9
|
||||||
|
Acute 'i' = 0xc3ad
|
||||||
|
Acute 'o' = 0xc3b3
|
||||||
|
Acute 'u' = 0xc3ba
|
||||||
|
Acute 'y' = 0xc3bd
|
||||||
|
AcuteTab = Option Option-Shift CapsLock-Option CapsLock-Option-Shift
|
||||||
|
Grave ' ' = '\`'
|
||||||
|
Grave 'A' = 0xc380
|
||||||
|
Grave 'E' = 0xc388
|
||||||
|
Grave 'I' = 0xc38c
|
||||||
|
Grave 'O' = 0xc392
|
||||||
|
Grave 'U' = 0xc399
|
||||||
|
Grave 'a' = 0xc3a0
|
||||||
|
Grave 'e' = 0xc3a8
|
||||||
|
Grave 'i' = 0xc3ac
|
||||||
|
Grave 'o' = 0xc3b2
|
||||||
|
Grave 'u' = 0xc3b9
|
||||||
|
GraveTab = Option Option-Shift CapsLock-Option CapsLock-Option-Shift
|
||||||
|
Circumflex ' ' = '^'
|
||||||
|
Circumflex 'A' = 0xc382
|
||||||
|
Circumflex 'E' = 0xc38a
|
||||||
|
Circumflex 'I' = 0xc38e
|
||||||
|
Circumflex 'O' = 0xc394
|
||||||
|
Circumflex 'U' = 0xc39b
|
||||||
|
Circumflex 'a' = 0xc3a2
|
||||||
|
Circumflex 'e' = 0xc3aa
|
||||||
|
Circumflex 'i' = 0xc3ae
|
||||||
|
Circumflex 'o' = 0xc3b4
|
||||||
|
Circumflex 'u' = 0xc3bb
|
||||||
|
CircumflexTab = Normal Shift CapsLock CapsLock-Shift
|
||||||
|
Diaeresis ' ' = 0xc2a8
|
||||||
|
Diaeresis 'A' = 0xc384
|
||||||
|
Diaeresis 'E' = 0xc38b
|
||||||
|
Diaeresis 'I' = 0xc38f
|
||||||
|
Diaeresis 'O' = 0xc396
|
||||||
|
Diaeresis 'U' = 0xc39c
|
||||||
|
Diaeresis 'Y' = 0xc5b8
|
||||||
|
Diaeresis 'a' = 0xc3a4
|
||||||
|
Diaeresis 'e' = 0xc3ab
|
||||||
|
Diaeresis 'i' = 0xc3af
|
||||||
|
Diaeresis 'o' = 0xc3b6
|
||||||
|
Diaeresis 'u' = 0xc3bc
|
||||||
|
Diaeresis 'y' = 0xc3bf
|
||||||
|
DiaeresisTab = Normal Shift CapsLock CapsLock-Shift
|
||||||
|
Tilde ' ' = '~'
|
||||||
|
Tilde 'A' = 0xc383
|
||||||
|
Tilde 'O' = 0xc395
|
||||||
|
Tilde 'N' = 0xc391
|
||||||
|
Tilde 'a' = 0xc3a3
|
||||||
|
Tilde 'o' = 0xc3b5
|
||||||
|
Tilde 'n' = 0xc3b1
|
||||||
|
TildeTab = Option Option-Shift CapsLock-Option CapsLock-Option-Shift
|
||||||
|
"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# find keysymdef.h
|
||||||
|
for d in "${KEYSYM_PATHS[@]}"; do
|
||||||
|
if [ -e "$d$KEYSYMDEF" ]; then
|
||||||
|
keysymdef="$d$KEYSYMDEF"
|
||||||
|
break;
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -z "$keysymdef" ]; then
|
||||||
|
stop "Cannot find a keysymdef.h"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
prefill_hkeymap
|
||||||
|
|
||||||
|
parse_lkeymap < "$1"
|
||||||
Reference in New Issue
Block a user