dc00eee820
git-svn-id: https://svn.neo-layout.org@2333 b9310e46-f624-0410-8ea1-cfbb3a30dc96
191 lines
5.8 KiB
Bash
Executable file
191 lines
5.8 KiB
Bash
Executable file
#!/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
|