From 7d09e97f09acd58ab66752a3f12dcb7d663e67cf Mon Sep 17 00:00:00 2001
From: knittl <knittl@b9310e46-f624-0410-8ea1-cfbb3a30dc96>
Date: Thu, 2 Oct 2008 13:38:05 +0000
Subject: einspielen der patches von bernd steinhauser für die
 (de)installationsscripte neo.conf hinzugefügt
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

git-svn-id: https://svn.neo-layout.org@919 b9310e46-f624-0410-8ea1-cfbb3a30dc96
---
 linux/bin/asdf | 151 ++++++++++++++++++++++++++++++++++++++-------------------
 1 file changed, 100 insertions(+), 51 deletions(-)

(limited to 'linux/bin/asdf')

diff --git a/linux/bin/asdf b/linux/bin/asdf
index 1eb479a..5c50717 100755
--- a/linux/bin/asdf
+++ b/linux/bin/asdf
@@ -1,71 +1,120 @@
 #!/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
 
+if [ -f "${NEO_CONFIG}" ]; then
+	. "${NEO_CONFIG}" || die "Failed to source ${NEO_CONFIG}"
+elif [ -f "${HOME}"/.neorc ]; then
+	. "${HOME}"/.neorc || die "Failed to source ${HOME}/neo.conf"
+elif [ -f /etc/neo.conf ]; then
+	. /etc/neo.conf || die "Failed to source /etc/neo.conf"
+else
+	echo "No configuration file found. Using default values, this might fail!"
+fi
 
-################################################################################
-####################### persönliche Einstellungen ##############################
-################################################################################
-# hier einstellen, welche Variante von Neo geladen werden soll:
-# xkbmap, xmoadmap, xprog, alternative, evdev
-NEO_X_VARIANTE="xkbmap"
-
-# hier angeben, wo sich die Neo-Dateien befinden:
-PFAD="$HOME/neo"
-
-# Ort, wo sich die Konsolen-Belegungen befinden:
-CONSOLE_KEYMAP="$PFAD/neo.map"
-################################################################################
-################################################################################
-################################################################################
+# Default paths
+PATH_XMODMAP=${PATH_XMODMAP:-/usr/bin/xmodmap}
+PATH_SETXKBMAP=${PATH_SETXKBMAP:-/usr/bin/setxkbmap}
+PATH_LOADKEYS=${PATH_LOADKEYS:-/usr/bin/loadkeys}
+PATH_SUDO=${PATH_SUDO:-/usr/bin/sudo}
+PATH_SETLEDS=${PATH_SETLEDS:-/usr/bin/setleds}
+PATH_NUMLOCKX=${PATH_NUMLOCKX:-/usr/bin/numlockx}
+PATH_XSET=${PATH_XSET:-/usr/bin/xset}
 
+# Default values
+NEO_X_VARIANTE=${NEO_X_VARIANTE:-xkbmap}
+NEO_XKBMAP=${NEO_XKBMAP:-de}
+NEO_XKBVARIANT=${NEO_XKBVARIANT:-neo}
+NEO_XMODMAP="${NEO_XMODMAP:-/usr/share/neo-layout/xmodmap/neo_de.xmodmap}"
+NEO_CONSOLE_KEYMAP="${NEO_CONSOLE_KEYMAP:-/usr/share/keymaps/i386/neo/neo.map}"
 
-XMODMAP="$PFAD/neo_de.xmodmap"
-XMODMAP_XPROG="$PFAD/neo_de_x-prog.xmodmap"
-XMODMAP_ALTERNATIVE="$PFAD/neo_de_alternative.xmodmap"
-XMODMAP_EVDEV="$PFAD/neo_de_evdev.xmodmap"
+die() {
+	echo "$@" >&2
+	exit 1
+}
 
+set_xmodmap() {
+	if [ -e "${PATH_XMODMAP}" ]; then
+		if [ -f "$@" ]; then
+			"${PATH_XMODMAP}" "$@" || die "Failed to set xmodmap $@."
+		else
+			die "Cannot use $@ for xmodmap."
+		fi
+	else
+		die "xmodmap not found, cannot set xmodmap."
+	fi
+}
 
-NEO_X_VARIANTE=${1-$NEO_X_VARIANTE}
+set_xkbmap() {
+	if [ -e "${PATH_SETXKBMAP}" ]; then
+		"${PATH_SETXKBMAP}" "$@" || die "Failed to select xkbmap $@."
+	else
+		die "setxkbmap not found, cannot set xkbmap."
+	fi
+}
 
+set_keymap() {
+	if [ -e "${PATH_LOADKEYS}" ]; then
+		if [ -f "$@" ]; then
+			if [ "${EUID}" = 0 ]; then
+				"${PATH_LOADKEYS}" "$@" || die "Failed to set keymap $@."
+			elif [ -e "${PATH_SUDO}" ]; then
+				"${PATH_SUDO}" "${PATH_LOADKEYS}" "$@" || die "Failed to set keymap using sudo."
+			else
+				die "You need root priviliges to change the keymap."
+			fi
+		else
+			die "keymap file $@ does not exist."
+		fi
+	else
+		die "loadkeys not found, cannot set keymap."
+	fi
+}
 
 if [ -n "$SSH_CONNECTION" ]; then
-	echo -n "Dude, du bist in einer SSH-Session. Wie soll ich das "
-        echo    "Tastaturlayout hier ändern?"
-	exit 1
+	die "Cannot set keybord layout in a ssh session."
 fi
-if [ -z "$DISPLAY" ]; then
-	echo -n "Um das Tastaturlayout auf der Textkonsole zu ändern, muss man"
-        echo    " root-Rechte besitzen!"
-	sudo loadkeys $CONSOLE_KEYMAP
-	setleds +num
+
+if [ -z ${DISPLAY} ]; then
+	set_keymap "${NEO_CONSOLE_KEYMAP}"
+
+	if [ -e "${PATH_SETLEDS}" ]; then
+		"${PATH_SETLEDS}" -num || die "Failed to set NUM status."
+	else
+		die "setleds does not exist, cannot set NUM status."
+	fi
 else
-	numlockx off
-	xset -r 51; xset -r 94			# Modifier
-	xset -r 21; xset -r 35; xset -r 49	# tote Tasten (dead keys)
-	
-	case $NEO_X_VARIANTE in
+	if [ -e "${PATH_NUMLOCKX}" ]; then
+		"${PATH_NUMLOCKX}" off || die "Failed to turn off Numlock."
+	else
+		die "numlockx not found, cannot turn off Numlock."
+	fi
+
+	if [ -e "${PATH_XSET}" ]; then
+		for modifier in 51 94; do
+			"${PATH_XSET}" -r ${modifier} || die "Failed to unset repeat for modifier ${modifier}."
+		done
+		for deadkey in 21 35 49; do
+			"${PATH_XSET}" -r ${deadkey} || die "Failed to unset repeat for deadkey ${deakey}."
+		done
+	else
+		die "xset not found, cannot set modifiers and dead keys."
+	fi
+
+	case "${NEO_X_VARIANTE}" in
 		xkbmap)
-			setxkbmap de neo
+			set_xkbmap "${NEO_XKBMAP}" "${NEO_XKBVARIANT}"
 			;;
 		xmodmap)
-			setxkbmap ie
-			xmodmap $XMODMAP
-			;;
-		xprog)
-			setxkbmap ie
-			xmodmap $XMODMAP_XPROG
-			;;
-		alternative)
-			setxkbmap ie
-			xmodmap $XMODMAP_ALTERNATIVE
-			;;
-		evdev)
-			setxkbmap ie
-			xmodmap $XMODMAP_EVDEV
+			set_xkbmap ie
+			set_xmodmap "${NEO_XMODMAP}"
 			;;
 		*)
-			echo -n "Die Variante »${NEO_X_VARIANTE}« ist keine "
-                        echo    "bekannte X-Variante des NEO-Layouts."
-			exit 1
+			die "Unknown Neo X variant ${NEO_X_VARIANTE}."
 			;;
 	esac
 fi
+
-- 
cgit v1.2.3