Neo ist eine ergonomische Tastaturbelegung, welche für die deutsche Sprache optimiert ist. https://neo-layout.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

154 lines
4.2 KiB

#!/bin/sh
# 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
# colour definitions
normal="\033[0m"
red="\033[31m"
orange="\033[33m"
green="\033[32m"
if [ "foo`echo -e bar`" = "foobar" ];then
# GNU echo
ECHO_e="echo -e"
else
# POSIX echo
ECHO_e="echo"
fi
# Default values
STD_X_VARIANTE=${STD_X_VARIANTE:-xkbmap}
STD_XKBMAP=${STD_XKBMAP:-de}
STD_XKBVARIANT=${STD_XKBVARIANT:-nodeadkeys}
STD_XMODMAP=${STD_XMODMAP:-""}
STD_CONSOLE_KEYMAP="${STD_CONSOLE_KEYMAP:-de-latin1-nodeadkeys}"
NUM_LOCK_STATUS=${NUM_LOCK_STATUS:-on}
die() {
$ECHO_e "${red}$@${normal}" >&2
$ECHO_e "${red}Die Belegung konnte nicht geändert werden.${normal}" >&2
exit 1
}
set_xmodmap() {
if [ -f "$@" ]; then
xmodmap "$@" || die "Fehler beim Laden der Xmodmap $@."
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 [ "${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
}
help() {
cat <<HELP
Aufruf: $0 [-q] [Standard-X-Variante]
Aktiviert die Standard-Tastaturbelegung.
Neo-X-Variante:
xkmbap in den meisten Fällen richtig (Standardeinstellung)
xmodmap nur sinnvoll, wenn eine eigene Xmodmap als Standardbelegung 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
Homepage: http://neo-layout.org/
HELP
exit 0
}
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_e "${red}Keine Konfigurationsdatei für NEO gefunden.\nDas Verwenden der Standardwerte kann fehlschlagen!${normal}" >&2
fi
if [ -n "$SSH_CONNECTION" ]; then
die "In einer ssh-session kann die Belegung nicht geändert werden."
fi
while [ ! -z "$1" ]; do
case $1 in
-h | --help )
help
;;
-q | --quiet )
quiet=1
;;
* )
STD_X_VARIANTE=${1-$STD_X_VARIANTE}
shift $#
;;
esac
shift
done
if [ -z ${DISPLAY} ]; then
set_keymap "${STD_CONSOLE_KEYMAP}"
if [ "${NUM_LOCK_STATUS}" = "on" ]; then
setleds -num || $ECHO_e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2
else
setleds +num || $ECHO_e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2
fi
else
for modifier in 51 94; do
xset r ${modifier} || $ECHO_e "${orange}Fehler beim Wiederherstellen von Autorepeat beim Modifier ${modifier}.${normal}" >&2
done
for deadkey in 21 35 49; do
xset r ${deadkey} || $ECHO_e "${orange}Fehler beim Wiederherstellen von Autorepead bei der toten Taste ${deakey}.${normal}" >&2
done
case "${STD_X_VARIANTE}" in
xkbmap)
[ $quiet ] || echo "Die Standardbelegung wird geladen…"
set_xkbmap "${STD_XKBMAP}" "${STD_XKBVARIANT}"
;;
xmodmap)
if [ "${STD_XMODMAP}" ]; then
[ $quiet ] || echo "Die Standard-Xmodmap wird geladen…"
set_xmodmap "${STD_XMODMAP}"
else
$ECHO_e "${red}Es wurde keine Standard-Xmodmap definiert.${normal}" >&2
die "In der Regel ist ${green}uiae${red} ohne weitere Angaben erfolgreich."
fi
;;
*)
die "${orange}${STD_X_VARIANTE}${red} ist eine unbekannte X-Variante der Neo-Belegung."
;;
esac
if [ "${NUM_LOCK_STATUS}" = "on" ]; then
numlockx on || $ECHO_e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2
else
numlockx off || $ECHO_e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2
fi
fi
if [ ! "$quiet" ]; then
echo
echo "Die Tastaturbelegung wurde auf die Standardbelegung geändert."
$ECHO_e "Durch ${green}asdf${normal} kehrt man wieder zur Neo-Belegung zurück."
fi