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.
 
 
 
 
 
 

191 lines
5.8 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
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_CONSOLE_KEYMAP=${NEO_CONSOLE_KEYMAP:-$HOME/neo/neo.map}
KEYSYMDEF=${KEYSYMDEF:-/usr/include/X11/keysymdef.h}
die() {
$ECHO_e "${red}$@${normal}" >&2
$ECHO_e "${red}Die Belegung konnte nicht auf NEO geändert werden.${normal}" >&2
exit 1
}
die2() {
set_xkbmap de
die "Fehler beim Laden der Xmodmap $@."
}
numlock_manually() {
$ECHO_e "${orange}Fehler beim setzen des Status von NumLock.${normal}" >&2
$ECHO_e "${orange}Sehr wahrscheinlich ist das Programm ›numlockx‹ nicht installiert.${normal}" >&2
$ECHO_e "${orange}Installieren Sie es, um diese Meldung zukünftig zu vermeiden.${normal}" >&2
$ECHO_e "Bitte jetzt ${orange}NumLock${normal} von Hand auf ${orange}$1${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
echo
echo "Um die NEO-Belegung zu aktivieren muss das Root-Passwort eingegeben werden."
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
}
help() {
cat <<HELP
Aufruf: $0 [-q] [NEO-X-Variante]
Aktiviert die NEO-Tastaturbelegung.
NEO-X-Variante:
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
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
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 an
set_keymap "${NEO_CONSOLE_KEYMAP}"
# schalte versehentlich angeschaltetes CapsLock aus
# keymap hat nur shiftlock => man kommt nicht mehr raus…
setleds -caps
else
# versuche in letzter Sekunde versehentliches CapsLock anschalten zu verhindern
# xmodmap hat nur shiftlock => man kommt nicht mehr raus…
xmodmap -e "clear Lock"
numlockx off || numlock_manually 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
if [ -z $NEO_X_VARIANTE ]; then
if [ -f $NEO_XMODMAP ]; then
NEO_X_VARIANTE=xmodmap
else
NEO_X_VARIANTE=xkbmap
fi
fi
case "${NEO_X_VARIANTE}" in
xkbmap)
[ $quiet ] || echo "Die xkbmap wird geladen…"
set_xkbmap "${NEO_XKBMAP}" "${NEO_XKBVARIANT}"
;;
xmodmap)
if [ ! true ]; then
# hier wurde früher überprüft, ob die keysymdef.h vorhanden und aktuell ist. Diese Datei ist jedoch in aktuellen Standardinstallationen nicht mehr vorhanden.
# ehemals: if [ ! -f ${KEYSYMDEF} ] || [ `grep -c 'dead_dasia' ${KEYSYMDEF}` -eq 0 ]; then
$ECHO_e "${red}Das System scheint älter zu sein, weiche auf neo_de_alternative aus.${normal}"
NEO_XMODMAP=${NEO_XMODMAP_ALTERNATIVE}
fi
[ $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}"
;;
*)
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