gigatron/rom/Contrib/kervinck/Keymaps/mkkeys.sh
2025-01-28 19:17:01 +03:00

75 lines
1.4 KiB
Bash

#!/bin/bash
./remap |
sort -n -k 8 -k6 -k 4 -k 2 |
awk '
function emit()
{
if (ascii == 0)
return;
a[j++] = map FS mods FS code FS ascii
if (j == 3 && a[0] ~ /^UGDFIE/ && a[1] ~ /^UGDFIE/) {
map = "UGDFIE"
mods = 3
j = 0
a[j++] = map FS mods FS code FS ascii
}
if ($8 != ascii || $6 != code) {
for (i=0; i<j; i++)
print a[i]
j = 0
}
}
BEGIN {
L[0] = "U"
L[1] = "G"
L[2] = "D"
L[3] = "F"
L[4] = "I"
L[5] = "E"
emit()
}
{
if ($8 != ascii || $6 != code || $4 != mods) {
emit()
map = "------"
mods = $4
code = $6
ascii = $8
}
map = substr(map, 1, $2) L[$2] substr(map, $2+2, length(map)-$2)
}
END {
$8 = 0
emit()
}' |
awk '{
map = ""
if ($1~/U/) map = map "+US"; else map = map " "
if ($1~/G/) map = map "+GB"; else map = map " "
if ($1~/D/) map = map "+DE"; else map = map " "
if ($1~/F/) map = map "+FR"; else map = map " "
if ($1~/I/) map = map "+IT"; else map = map " "
if ($1~/E/) map = map "+ES"; else map = map " "
if ($2 == 0) mod = "NOMOD"
if ($2 == 1) mod = "SHIFT"
if ($2 == 2) mod = "ALTGR"
if ($2 == 3) mod = "EVERY"
printf " { %-18s +%s, 0x%02x, %3d },", map, mod, $3, $4
if (32 < $4 && $4 <= 126 && $4 != last)
printf " // '"'"'%c'"'"'", $4
last = $4
printf "\n"
}' > keys.txt
echo "Sanity check:"
for C in +US +GB +DE +FR +IT +ES
do
echo -n "$C:"
grep $C keys.txt | awk -F, '{print $3}' | sort -u | wc -l
done