#!/bin/bash align() { sed '/\/ d /\/ d /\/ d /\/ d /\/ d /\/ d /\/ d /\/ d /\/ d /\/ d /\/ d /\/ d /\/ d /\/ d' } normal="$({ paste -d ' ' <(xmodmap -pke | sed '1 d; s/.*= /"/; /.*=/ d; s/ .*/":/' | sed '/^"XF86Eject"/ { N; s/.*\n// }') \ <(go doc uinput.keyesc | sed '/Key/ !d; s/^\s*/uinput./; s/ .*/,/' | align) | # Skip really non-matching section, we echo some of them below sed '/^"XF86Tools"/,/^"XF86AudioPreset"/ d' | # Remove duplicate keys sed '/^"XF86Mail":.*Email/ d; /^"Cancel":.*Stop/ d; /^"XF86Send":.*file/ d; /^"Print":.*Sysrq/ d; /Key102Nd,$/ d' echo '"XF86WebCam": uinput.KeyCamera,' echo '"Print": uinput.KeyPrint,' } | sed 's/^".*"/\L&/; s/^/\t/')" printf %s\\n "var xKeysNormal = map[string]int{ $normal } " echo 'var xKeysShifted = map[string]int{' { paste -d ' ' <(xmodmap -pke | sed '1 d; s/.*= /"/; /.*=/ d; s/\S* /"/; s/ .*/":/' | sed '/^"XF86Eject"/ { N; s/.*\n// }') \ <(go doc uinput.keyesc | sed '/Key/ !d; s/^\s*/uinput./; s/ .*/,/' | align) | sed '/^"NoSymbol"/ d; /^\S*_[LR]"/ d; /Key102Nd,$/ d' } | sed 's/^".*"/\L&/; s/^/\t/' | awk 'NR == FNR {if (length($1) > 4) a[$1]; next} !($1 in a)' <(printf %s\\n "$normal") - echo '}'