neo-layout/linux/bin/asdf

172 lines
5.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Copyright 2008 Bernd Steinhauser <berniyh@exherbo.org>
# Copyright 2008 Benjamin Kellermann
# Copyright 2008 Pascal Hauck
# Copyright 2008 Erik Streb del Toro
# Distributed under the terms of the GNU General Public License v3
#prevent CapsLock while asdf is running
xmodmap -e "clear Lock" 2> /dev/null
# colours in the Bash
normal="\033[0m"
red="\033[31m"
orange="\033[33m"
green="\033[32m"
if [ -f "${NEO_CONFIG}" ]; then
. "${NEO_CONFIG}" || die "Fehler beim Verwenden der Konfigurationsdatei ${NEO_CONFIG}"
elif [ -f "${HOME}"/.neorc ]; then
. "${HOME}"/.neorc || die "Fehler beim Verwenden der Konfigurationsdatei ${HOME}/.neorc"
elif [ -f /etc/neo.conf ]; then
. /etc/neo.conf || die "Fehler beim Verwenden der Konfigurationsdatei /etc/neo.conf"
else
echo "${red}Keine Konfigurationsdatei für NEO gefunden. Das Verwenden der Standardwerte kann fehlschlagen!${normal}"
fi
# Default values
NEO_XKBMAP=${NEO_XKBMAP:-de}
NEO_XKBVARIANT=${NEO_XKBVARIANT:-neo}
NEO_XMODMAP=${NEO_XMODMAP:-$HOME/neo/neo_de.xmodmap}
NEO_XMODMAP_XPROG=${NEO_XMODMAP_XPROG:-$HOME/neo/neo_de_x-prog.xmodmap}
NEO_XMODMAP_ALTERNATIVE=${NEO_XMODMAP_ALTERNATIVE:-$HOME/neo/neo_de_alternative.xmodmap}
NEO_XMODMAP_EVDEV=${NEO_XMODMAP_EVDEV:-$HOME/neo/neo_de_evdev.xmodmap}
NEO_CONSOLE_KEYMAP=${NEO_CONSOLE_KEYMAP:-$HOME/neo/neo.map}
help() {
cat <<HELP
Aufruf: $0 [-q] [NEO-X-Variante]
Aktiviert die NEO-Tastaturbelegung.
NEO-X-Variante als NEO-X-Variante kann verwendet werden:
xkmbap i.d.R. wenn Rootrechte vorhanden sind
xmodmap i.d.R. wenn NEO nur für einen Benutzer verwendet werden soll
alternative sollte geladen werden, wenn das Laden der Xmodmap fehl schlägt
xprog falls ältere X-Programme (wie xedit oder xfig) verwendet werden
evdev falls der evdev-Treiber verwendet wird
Das Skript erkennt, falls sich der Benutzer nur auf einer Textkonsole befindet und ändert
auch dort die Belegung (hierfür sind allerdings Rootrechte erforderlich!)
-q, --quiet gibt abgesehen von Fehlern keine Meldungen aus
NEO-Tastaturbelegung
Homepage: http://neo-layout.org/
HELP
exit 0
}
die() {
echo -e "${red}$@${normal}" >&2
echo -e "${red}Die Belegung konnte nicht auf NEO geändert werden.${normal}"
exit 1
}
die2() {
set_xkbmap de
die "Fehler beim Laden der Xmodmap $@."
}
numlock_manually() {
echo -e "${orange}$1${normal}" >&2
echo -e "Bitte jetzt ${orange}NumLock${normal} von Hand auf ${orange}$2${normal} schalten und ${orange}Enter${normal} drücken um fortzufahren…" >&2
read enter
}
set_xmodmap() {
if [ -f "$@" ]; then
set_xkbmap lv
xmodmap "$@" || die2 $@
else
die "Die Xmodmap-Datei ${orange}$@${red} gibt es nicht."
fi
}
set_xkbmap() {
setxkbmap "$@" || die "Die xkbmap ${orange}$@${red} wurde nicht gefunden."
}
set_keymap() {
if [ -f "$@" ]; then
if [ "${EUID}" = 0 ]; then
loadkeys "$@" || die "Fehler beim Laden der Keymap ${orange}$@${red}."
else
sudo loadkeys "$@" || die "Fehler bei der Verwendung von ${orange}sudo${red}, um die Belegung zu ändern."
fi
else
die "Die keymap-Datei ${orange}$@${red} gibt es nicht."
fi
}
while [ ! -z "$1" ]; do
case $1 in
-h | --help )
help
;;
-q | --quiet )
quiet=1
;;
* )
NEO_X_VARIANTE=${1-$NEO_X_VARIANTE}
shift $#
;;
esac
shift
done
if [ -n "$SSH_CONNECTION" ]; then
die "In einer ssh-session kann die Belegung nicht geändert werden."
fi
if [ -z ${DISPLAY} ]; then
setleds +num || numlock_manually "Fehler beim setzen des Status von NumLock." an
setleds -caps
set_keymap "${NEO_CONSOLE_KEYMAP}"
else
numlockx off || numlock_manually "Fehler beim setzen des Status von NumLock." aus
for modifier in 51 94; do
xset -r ${modifier} || echo -e "${orange}Fehler beim Ausschalten von Autorepeat beim Modifier ${modifier}.${normal}" >&2
done
for deadkey in 21 35 49; do
xset -r ${deadkey} || echo -e "${orange}Fehler beim Ausschalten von Autorepead bei der toten Taste ${deakey}.${normal}" >&2
done
case "${NEO_X_VARIANTE}" in
xkbmap)
[ $quiet ] || echo "Die xkbmap wird geladen…"
set_xkbmap "${NEO_XKBMAP}" "${NEO_XKBVARIANT}"
;;
xmodmap)
[ $quiet ] || echo "Das Laden der Xmodmap kann einige Sekunden dauern…"
set_xmodmap "${NEO_XMODMAP}"
;;
xprog)
[ $quiet ] || echo "Das Laden der Xmodmap (Variante für X-Programme) kann einige Sekunden dauern…"
set_xmodmap "${NEO_XMODMAP_XPROG}"
;;
alternative)
[ $quiet ] || echo "Das Laden der alternativen Xmodmap kann einige Sekunden dauern…"
set_xmodmap "${NEO_XMODMAP_ALTERNATIVE}"
;;
evdev)
[ $quiet ] || echo "Das Laden der Xmodmap (evdev-Variante) kann einige Sekunden dauern…"
set_xmodmap "${NEO_XMODMAP_EVDEV}"
;;
*)
die "${NEO_X_VARIANTE} ist eine unbekannte X-Variante der NEO-Belegung."
;;
esac
fi
if [ ! "$quiet" ]; then
echo
echo "Die Tastaturbelegung wurde auf NEO geändert."
echo -e "Mit ${green}neo${normal} und ${green}num${normal} erhält man ein Bild der NEO-Belegung."
echo -e "Durch ${green}uiae${normal} kehrt man wieder zur Standardbelegung zurück."
fi