blob: 583746455d5424fbafa175006ae5876b47adca9c (
plain) (
tree)
|
|
#!/bin/dash
load_layout () {
if test -f "${XDG_RUNTIME_DIR}/.setkeys_layout"; then
cat "${XDG_RUNTIME_DIR}/.setkeys_layout"
fi
}
save_layout () {
printf '%s\n' "$1" > "${XDG_RUNTIME_DIR}/.setkeys_layout"
}
if test "$1" = "greek"; then
layout=gr
elif test "$1" = "swedish"; then
layout=se
elif test "$1" = "english"; then
layout=en_US
elif test "$1" = "toggle"; then
layout="$(load_layout)"
if test "$layout" = se; then
layout=gr
else
layout=se
fi
elif test $# = 0; then
layout="$(load_layout)"
else
layout="$1"
fi
if test -z "$layout"; then
layout=se
fi
save_layout "$layout"
setxkbmap \
-rules evdev \
-model pc105 \
-layout "$layout" \
-variant '' \
-option '' \
-option terminate:ctrl_alt_bksp,compose:rwin,keypad:future \
-types complete \
-compat complete \
-synch
{
# Assign LeftCtrl to CapsLock
printf '%s\n' 'keycode 66 = Control_L Control_L Control_L Control_L'
# Assign LeftHyper to LeftCtrl
printf '%s\n' 'keycode 37 = Hyper_L Hyper_L Hyper_L Hyper_L'
# Assign remove layout switch from LeftShift
printf '%s\n' 'keycode 50 = Shift_L Shift_L Shift_L Shift_L'
if test -z "${NO_UNICOMP}"; then
# Unicomp's newer versions of New Model M swapped AltGr and RSuper
# making it a torture device for even someone with as big hands as mine
if (cat /sys/class/input/*/name; cat "${XDG_RUNTIME_DIR}/vmhostkeyboards" ) 2>/dev/null | grep Unicomp > /dev/null; then
# Assign Compose to AltGr
printf '%s\n' 'keycode 108 = Multi_key Multi_key Multi_key Multi_key'
# Assign AltGr to RightSuper
printf '%s\n' 'keycode 134 = ISO_Level3_Shift ISO_Level3_Shift ISO_Level3_Shift ISO_Level3_Shift'
fi
fi
cat <<EOF
clear Shift
clear Lock
clear Control
clear mod1
clear Mod2
clear Mod3
clear Mod4
clear Mod5
add Shift = Shift_L Shift_R
add Control = Control_L Control_R
add Mod1 = Alt_L Meta_L
add Mod2 = Num_Lock
add Mod3 = Hyper_L
add Mod4 = Super_L
add Mod5 = ISO_Level3_Shift
EOF
} | xmodmap -
if cat /sys/class/input/*/name | grep Unicomp > /dev/null; then
# Turn off numlock LED
input="$( (grep Unicomp /sys/class/input/*/name; cat "${XDG_RUNTIME_DIR}/vmhostkeyboards" | grep Unicomp || :) 2>/dev/null | \
sed 's|^/sys/class/input/\(.*\)/name:.*$|\1|g' | sed 1q)"
if ! echo 0 | sponge "/sys/class/leds/${input}::numlock/brightness" 2>/dev/null; then
if isfg; then
# TODO do at boot
asroot chown ${USER}:${USER} "/sys/class/leds/${input}::numlock/brightness"
echo 0 | sponge "/sys/class/leds/${input}::numlock/brightness"
fi
fi
fi
# Esc = 9
# F1…F10 = 67…76
# F11…F12 = 95…96
# § = 49
# 1…9 = 10…18
# 0+´ = 19…21
# Backspace = 22
# Tab = 23
# qwertyuiopå¨ = 24…35
# Enter = 36
# CapsLock = 66
# asdfghjklöä = 38…48
# ' = 51
# LeftShift = 50
# < = 94
# zxcvbnm,.- = 52…61
# RightShift = 62
# LeftCtrl = 37
# LeftSuper = 133
# Alt = 64
# Space = 65
# AltGr = 108
# RightSuper = 134
# Menu = 135
# RightCtrl = 105
# SysReq = 107
# ScrlLock = 78
# Break = 127
# Insert = 118
# Home = 110
# PageUp = 112
# Delete = 119
# End = 115
# PageDown = 117
# Up = 111
# Left = 113
# Down = 116
# Right = 114
# NumLock = 77
# Num/ = 106
# Num* = 63
# Num- = 82
# Num7 = 79
# Num8 = 80
# Num9 = 81
# Num+ = 86
# Num4 = 83
# Num5 = 84
# Num6 = 85
# Num1 = 87
# Num2 = 88
# Num3 = 89
# NumEnter = 104
# Num0 = 90
# Num, = 91
|