SVN: xinitrc-ng/trunk/Xclients

baggins baggins at pld-linux.org
Wed Jul 27 14:40:17 CEST 2011


Author: baggins
Date: Wed Jul 27 14:40:17 2011
New Revision: 12282

Modified:
   xinitrc-ng/trunk/Xclients
Log:
- fix typo in wmstyledir setting
- rewritten whole logic, if we fail to run USERWM directly
  then try to find it by xsession file name and description name,
  if this fails repeat for DEFAULTWM
- eliminated sed and tr usage


Modified: xinitrc-ng/trunk/Xclients
==============================================================================
--- xinitrc-ng/trunk/Xclients	(original)
+++ xinitrc-ng/trunk/Xclients	Wed Jul 27 14:40:17 2011
@@ -5,7 +5,7 @@
 
 # Default values - may be redefined in $syswmfile
 userwmfile=".desktop"
-wmstyledir="/etc/sysconfig/wmstyles"
+wmstyledir="/etc/sysconfig/wmstyle"
 xsessdir="/usr/share/xsessions"
 DEFAULTWM=""
 
@@ -13,15 +13,56 @@
 unset USERWM WM_CHOICE
 
 loadsess()
-{	if [ -x "$HOME/bin/$WM_CHOICE.sh" ]; then
-		exec "$HOME/bin/$WM_CHOICE.sh"
-	elif [ -x "$wmstyledir/$WM_CHOICE.sh" ]; then
-		exec "$wmstyledir/$WM_CHOICE.sh"	
-	elif test `/usr/bin/which $WM_CHOICE 2>/dev/null`; then
-		eval "exec $WM_CHOICE"
+{
+	set -x
+	typeset runwm=$1
+
+	[ -z "$runwm" ] && return
+
+	if [ -x "$HOME/bin/$runwm.sh" ]; then
+		exec "$HOME/bin/$runwm.sh"
+	elif [ -x "$wmstyledir/$runwm.sh" ]; then
+		exec "$wmstyledir/$runwm.sh"
+	elif test `/usr/bin/which $runwm 2>/dev/null`; then
+		eval "exec $runwm"
 	fi
 }
 
+findxsession()
+{
+	set -x
+	typeset -l __XSESSION=$1
+	typeset progname=""
+
+	if [ ! -d "$xsessdir" ]; then
+		echo "$xsessdir not found - check Your settings." >&2
+		return
+	fi	
+	for f in $xsessdir/*.desktop; do
+		typeset -l sessfile sessname altnames
+		sessfile=$(basename $f .desktop)
+		sessname=$(grep "^Name=" $f)
+		sessname=${sessname##name=}
+		if [ "$sessname" = "$__XSESSION" -o "$sessfile" = "$__XSESSION" ]; then
+			progname=$(grep "^Exec=" $f)
+			progname=${progname##Exec=}
+			break
+		fi
+		altnames=$(grep "^X-AltNames=" $f)
+		altnames=${altnames##x-altnames=}
+		oldIFS=$IFS ; IFS=";"; set -- $altnames ; IFS=$oldIFS
+		altnames="$*" 
+		for n in $altnames; do
+			if [ "$n" = "$__XSESSION" ]; then
+				progname=$(grep "^Exec=" $f)
+				progname=${progname##Exec=}
+	    			break
+			fi
+		done
+	done
+	echo $progname
+}
+
 [ -f $syswmfile ] && . $syswmfile    
 
 # HOME_ETC support
@@ -36,40 +77,25 @@
 	userwmfilefp="$HOME/.wm_style"
 fi	
 
-[ -f $userwmfilefp ] && USERWM=`cat $userwmfilefp |grep -v ^# |head -n 1`
+[ -f $userwmfilefp ] && USERWM=`grep -v "^#" $userwmfilefp | head -n 1`
 
 # Evaluate cmdline first
 [ -n "$*" ] && USERWM="$*"
 
 if [ -n "$USERWM" ]; then
         # Tray to run literal user choice first
-	WM_CHOICE=$USERWM
-	loadsess
+	loadsess $USERWM
 	# if it fails - take another actions
-	WM_CHOICE=""
-	if [ ! -d "$xsessdir" ]; then
-		echo "$xsessdir not found - check Your settings."
-		exit 1
-	fi	
-	for f in $xsessdir/*.desktop; do
-		if [ "`cat $f |grep ^Name= |sed -e 's/Name=//' |tr A-Z a-z`" = "`echo $USERWM |tr A-Z a-z`" ]; then
-			WM_CHOICE=`cat $f |grep ^Exec= |sed -e 's/Exec=//'`
-			break
-		fi
-		for g in `cat $f |grep ^X-AltNames= |sed -e 's/X-AltNames=//' -e 's/;/ /g'`; do
-			if [ "`echo $g |tr A-Z a-z`" = "`echo $USERWM |tr A-Z a-z`" ]; then
-	    			WM_CHOICE=`cat $f |grep ^Exec= |sed -e 's/Exec=//'`
-	    			break 2
-			fi
-		done
-	done	    	 
+	WM_CHOICE=$(findxsession $USERWM)
 	if [ -z "$WM_CHOICE" ]; then
-		echo "Sorry - nothing known about $USERWM"
-		echo "Resuming with system defaults..."
+		echo "Sorry - nothing known about $USERWM" >&2
+		echo "Resuming with system defaults..." >&2
 		WM_CHOICE=$DEFAULTWM
 	fi	
-else
-        WM_CHOICE=$DEFAULTWM
 fi
 
-[ -n "$WM_CHOICE" ] && loadsess || exec xterm
+loadsess $DEFAULTWM
+WM_CHOICE=$(findxsession $DEFAULTWM)
+
+loadsess $WM_CHOICE
+exec xterm


More information about the pld-cvs-commit mailing list