Played with menu generation scripts to
1. Speed them up - seems to be about a 300% speedup 2. Make them safe when arguments and fields in desktop files have spaces SVN revision: 3516
This commit is contained in:
parent
08fe63445a
commit
0b7805db77
|
@ -30,86 +30,124 @@ if [ $# -lt 3 ]; then
|
|||
echo " "$0" base_name output_dir output_file.menu [gnome_app_base_dir]"
|
||||
exit
|
||||
fi
|
||||
# setup variables
|
||||
BASE=$1
|
||||
ODIR=$2
|
||||
OUT=$3
|
||||
|
||||
# setup variables
|
||||
BASE="$1"
|
||||
ODIR="$2"
|
||||
OUT="$3"
|
||||
|
||||
CONVERT_CMD="`which convert`"
|
||||
|
||||
# NEW
|
||||
find_app_base_dir() {
|
||||
ADIR=`gnome-config --prefix`"/share/gnome/apps"
|
||||
ADIR="`gnome-config --prefix`/share/gnome/apps"
|
||||
if [ ! -d "$ADIR" ]; then
|
||||
ADIR=/usr/share/gnome/apps
|
||||
ADIR="/usr/share/gnome/apps"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -d "$ADIR" ]; then
|
||||
ADIR=/usr/share/apps
|
||||
ADIR="/usr/share/apps"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -d "$ADIR" ]; then
|
||||
ADIR=/usr/local/share/apps
|
||||
ADIR="/usr/local/share/apps"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -d "$ADIR" ]; then
|
||||
ADIR=/usr/gnome/share/apps
|
||||
ADIR="/usr/gnome/share/apps"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -d "$ADIR" ]; then
|
||||
ADIR=/usr/local/gnome/share/apps
|
||||
ADIR="/usr/local/gnome/share/apps"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -d "$ADIR" ]; then
|
||||
ADIR=/opt/gnome/share/apps
|
||||
ADIR="/opt/gnome/share/apps"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -d "$ADIR" ]; then
|
||||
ADIR=/opt/gnome/share/gnome/apps
|
||||
ADIR="/opt/gnome/share/gnome/apps"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -d "$ADIR" ]; then
|
||||
ADIR=/usr/X11R6/share/gnome/apps
|
||||
ADIR="/usr/X11R6/share/gnome/apps"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -d "$ADIR" ]; then
|
||||
ADIR=/opt/local/share/apps
|
||||
ADIR="/opt/local/share/apps"
|
||||
else
|
||||
return
|
||||
fi
|
||||
}
|
||||
|
||||
find_icon_base_dir() {
|
||||
IDIR=`gnome-config --prefix`"/share/pixmaps"
|
||||
if [ ! -f $IDIR"/gnome-help.png" ]; then
|
||||
IDIR=/usr/share/pixmaps
|
||||
IDIR="`gnome-config --prefix`/share/pixmaps"
|
||||
if [ ! -f "${IDIR}/gnome-help.png" ]; then
|
||||
IDIR="/usr/share/pixmaps"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -f $IDIR"/gnome-help.png" ]; then
|
||||
IDIR=/usr/share/gnome/pixmaps
|
||||
if [ ! -f "${IDIR}/gnome-help.png" ]; then
|
||||
IDIR="/usr/share/gnome/pixmaps"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -f $IDIR"/gnome-help.png" ]; then
|
||||
IDIR=/usr/local/share/pixmaps
|
||||
if [ ! -f "${IDIR}/gnome-help.png" ]; then
|
||||
IDIR="/usr/local/share/pixmaps"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -f $IDIR"/gnome-help.png" ]; then
|
||||
IDIR=/usr/gnome/share/pixmaps
|
||||
if [ ! -f "${IDIR}/gnome-help.png" ]; then
|
||||
IDIR="/usr/gnome/share/pixmaps"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -f $IDIR"/gnome-help.png" ]; then
|
||||
IDIR=/usr/local/gnome/share/pixmaps
|
||||
if [ ! -f "${IDIR}/gnome-help.png" ]; then
|
||||
IDIR="/usr/local/gnome/share/pixmaps"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -f $IDIR"/gnome-help.png" ]; then
|
||||
IDIR=/opt/gnome/share/pixmaps
|
||||
if [ ! -f "${IDIR}/gnome-help.png" ]; then
|
||||
IDIR="/opt/gnome/share/pixmaps"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -f $IDIR"/gnome-help.png" ]; then
|
||||
IDIR=/opt/gnome/share/gnome/pixmaps
|
||||
if [ ! -f "${IDIR}/gnome-help.png" ]; then
|
||||
IDIR="/opt/gnome/share/gnome/pixmaps"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -f $IDIR"/gnome-help.png" ]; then
|
||||
IDIR=/usr/X11R6/share/gnome/pixmaps
|
||||
if [ ! -f "${IDIR}/gnome-help.png" ]; then
|
||||
IDIR="/usr/X11R6/share/gnome/pixmaps"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -f $IDIR"/gnome-help.png" ]; then
|
||||
IDIR=/opt/local/share/pixmaps
|
||||
if [ ! -f "${IDIR}/gnome-help.png" ]; then
|
||||
IDIR="/opt/local/share/pixmaps"
|
||||
else
|
||||
return
|
||||
fi
|
||||
}
|
||||
|
||||
if [ $# -eq 4 ]; then
|
||||
DIR=$4
|
||||
DIR="$4"
|
||||
else
|
||||
find_app_base_dir
|
||||
DIR=$ADIR
|
||||
DIR="$ADIR"
|
||||
fi
|
||||
|
||||
# In most cases I believe the icons can be found in the directory that is
|
||||
# ../../pixmaps from $ADIR.
|
||||
find_icon_base_dir
|
||||
GICONDIR=$IDIR
|
||||
GICONDIR="$IDIR"
|
||||
|
||||
# if the apps dir doesn't exist in the end then exit
|
||||
if [ ! -d "$DIR" ]; then
|
||||
|
@ -117,100 +155,87 @@ if [ ! -d "$DIR" ]; then
|
|||
fi
|
||||
# if the destination dir doesnt exist - create it
|
||||
if [ ! -d "$ODIR" ]; then
|
||||
mkdir $ODIR
|
||||
mkdir "$ODIR"
|
||||
fi
|
||||
|
||||
# function to check its a GNOME desktop file
|
||||
is_desktop() {
|
||||
VAL=`grep "\[Desktop Entry\]" $1`
|
||||
VAL="`grep "\[Desktop Entry\]" $1`"
|
||||
if [ -n "$VAL" ]; then
|
||||
VAL=`grep "^Name\[$LANG\]=" $1 | head -1`
|
||||
if [ ! -n "$VAL" ]; then
|
||||
VAL=`grep '^Name=' $1 | head -1`
|
||||
fi
|
||||
if [ -n "$VAL" ]; then
|
||||
NAME=`echo $VAL | awk -F= '{printf("%s", $2);}'`
|
||||
echo $NAME | tr -d '\n'
|
||||
IS_DESKTOP_RESULT="`awk -F= 'BEGIN { n="" } END { printf("%s", n) } $1 ~ "^Name\\\['$LANG'\\\]" {n=$2;exit} $1 ~ "^Name$" {n=$2}' $1`"
|
||||
if [ -n "$IS_DESKTOP_RESULT" ]; then
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
IS_DESKTOP_RESULT=""
|
||||
return 1
|
||||
}
|
||||
|
||||
# function to get the sortorder list -if there is one
|
||||
get_sortorder() {
|
||||
if [ -f $1"/.order" ]; then
|
||||
VAL=`cat $1"/.order" | awk '{printf("%s ", $1);}' | sed "s/,/ /g"`
|
||||
if [ -f "${1}/.order" ]; then
|
||||
VAL="`awk '{printf("%s ", $1);}' $1"/.order" | sed 's/,/ /g'`"
|
||||
else
|
||||
VAL=""
|
||||
fi
|
||||
FILES=`/bin/ls $1 | awk '{printf("%s ", $1);}'`
|
||||
VAL2=$VAL
|
||||
for I in $FILES; do
|
||||
GET_SORT_ORDER_RESULT="$VAL"
|
||||
for I in `/bin/ls "$1"`; do
|
||||
IS_IN="n"
|
||||
for J in $VAL; do
|
||||
if [ "$J" = "$I" ]; then
|
||||
IS_IN="y"
|
||||
continue 2
|
||||
fi
|
||||
done
|
||||
if [ "$IS_IN" = "n" ]; then
|
||||
VAL2=$VAL2$I" "
|
||||
fi
|
||||
GET_SORT_ORDER_RESULT="${GET_SORT_ORDER_RESULT}${I} "
|
||||
done
|
||||
echo $VAL2
|
||||
return 0
|
||||
}
|
||||
|
||||
get_icon() {
|
||||
VAL=`grep '^Icon=' $1 | head -1`
|
||||
if [ -n "$VAL" ]; then
|
||||
VAL2=`echo $VAL | awk -F= '{printf("%s", $2);}'`
|
||||
# If we have "convert" and the icon havsn't already been scaled down, scale
|
||||
# it down now!
|
||||
|
||||
EICONDIR="$ODIR/gnome_icons"
|
||||
if [ ! -d $EICONDIR ];then
|
||||
mkdir $EICONDIR
|
||||
fi
|
||||
|
||||
# The "Icon" entery can contain an absolute path, if it does forget the
|
||||
# $GICONDIR
|
||||
VAL3=`echo $VAL2 | grep /`
|
||||
if [ "$VAL3" != "$VAL2" ];then
|
||||
if [ -n "$VAL2" ]; then
|
||||
GICON=$GICONDIR/$VAL2
|
||||
EICON=$EICONDIR/$VAL2
|
||||
fi
|
||||
else
|
||||
if [ -n "$VAL3" ]; then
|
||||
GICON=$VAL3
|
||||
EICON=$EICONDIR/"`basename "$VAL3"`"
|
||||
fi
|
||||
fi
|
||||
CONVERT=`which convert`
|
||||
if [ -n "$CONVERT" ]; then
|
||||
if [ -n "$GICON" ]; then
|
||||
if [ -f "$GICON" ]; then
|
||||
if [ ! -f "$EICON" ]; then
|
||||
$CONVERT $GICON -geometry 16x16 $EICON
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
echo "$EICON" | tr -d '\n'
|
||||
return 0
|
||||
VAL2="`awk -F= '$1 ~ "^Icon$" {printf("%s", $2); exit;}' $1`"
|
||||
if [ -z "$VAL2" ]; then
|
||||
GET_ICON_RETURN=""
|
||||
return 1
|
||||
fi
|
||||
return 1
|
||||
|
||||
# If we have "convert" and the icon havsn't already been scaled down, scale
|
||||
# it down now!
|
||||
|
||||
GET_ICON_RETURNDIR="${ODIR}/gnome_icons"
|
||||
if [ ! -d "$GET_ICON_RETURNDIR" ];then
|
||||
mkdir "$GET_ICON_RETURNDIR"
|
||||
fi
|
||||
|
||||
# The "Icon" entery can contain an absolute path, if it does forget the
|
||||
# $GICONDIR
|
||||
VAL3="`echo $VAL2 | grep /`"
|
||||
if [ "$VAL3" != "$VAL2" ];then
|
||||
if [ -n "$VAL2" ]; then
|
||||
GICON="$GICONDIR/$VAL2"
|
||||
GET_ICON_RETURN="$GET_ICON_RETURNDIR/$VAL2"
|
||||
fi
|
||||
else
|
||||
if [ -n "$VAL3" ]; then
|
||||
GICON="$VAL3"
|
||||
GET_ICON_RETURN="$GET_ICON_RETURNDIR/`basename "$VAL3"`"
|
||||
fi
|
||||
fi
|
||||
if [ -n "$CONVERT_CMD" -a -n "$GICON" -a -f "$GICON" -a ! \
|
||||
-f "$GET_ICON_RETURN" ]; then
|
||||
"$CONVERT_CMD" "$GICON" -geometry 16x16 "$GET_ICON_RETURN"
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
get_exec() {
|
||||
VAL=`grep '^Exec=' $1 | head -1`
|
||||
if [ -n "$VAL" ]; then
|
||||
VAL2=`echo $VAL | awk -F= '{printf("%s", $2);}'`
|
||||
echo $VAL2 | tr -d '\n'
|
||||
return 0
|
||||
GET_EXEC_RETURN="`awk -F= '$1 ~ "^Exec$" {printf("%s", $2);}' $1`"
|
||||
if [ -z "$GET_EXEC_RETURN" ]; then
|
||||
GET_EXEC_RETURN=""
|
||||
return 1
|
||||
fi
|
||||
return 1
|
||||
return 0
|
||||
}
|
||||
|
||||
E_TITLE="GNOME Menu"
|
||||
|
@ -219,41 +244,48 @@ ORDER=""
|
|||
# if a .directory file exists - read it
|
||||
F=$DIR"/.directory"
|
||||
if [ -f $F ]; then
|
||||
NAME=`is_desktop $F`
|
||||
is_desktop $F
|
||||
NAME="$IS_DESKTOP_RESULT"
|
||||
if [ -n "$NAME" ]; then
|
||||
E_TITLE=$NAME
|
||||
E_TITLE="$NAME"
|
||||
fi
|
||||
fi
|
||||
ORDER=`get_sortorder $DIR`
|
||||
get_sortorder "$DIR"
|
||||
ORDER="$GET_SORT_ORDER_RESULT"
|
||||
|
||||
# print the menu title
|
||||
echo \"$E_TITLE\" > $OUT
|
||||
|
||||
# for every subdir in the dir list or order - print it
|
||||
for F in $ORDER; do
|
||||
FF=$DIR"/"$F
|
||||
FF="${DIR}/${F}"
|
||||
if [ -d "$FF" ]; then
|
||||
FFF=$FF"/.directory"
|
||||
if [ -f $FFF ]; then
|
||||
NAME=`is_desktop $FFF`
|
||||
FFF="${FF}/.directory"
|
||||
if [ -f "$FFF" ]; then
|
||||
is_desktop "$FFF"
|
||||
NAME="$IS_DESKTOP_RESULT"
|
||||
else
|
||||
NAME=`echo $F | sed "s/_/ /g"`
|
||||
NAME="`echo $F | sed 's/_/ /g'`"
|
||||
fi
|
||||
FFF=$ODIR"/"$BASE
|
||||
FFF="${ODIR}/${BASE}"
|
||||
if [ ! -d "$FFF" ]; then
|
||||
mkdir $FFF
|
||||
mkdir "$FFF"
|
||||
fi
|
||||
MFILE=$FFF"/"$F.menu
|
||||
$0 $BASE"/"$F $ODIR $MFILE $DIR"/"$F
|
||||
ICO=`get_icon $FF"/.directory"`
|
||||
echo \"$NAME\" \"$ICO\" menu \"$MFILE\" >> $OUT
|
||||
MFILE="${FFF}/${F}.menu"
|
||||
"$0" "${BASE}/${F}" "$ODIR" "$MFILE" "${DIR}/${F}"
|
||||
get_icon "${FF}/.directory"
|
||||
ICO="$GET_ICON_RETURN"
|
||||
echo "\"$NAME\" \"$ICO\" menu \"$MFILE\"" >> $OUT
|
||||
else
|
||||
if [ -r "$FF" ]; then
|
||||
NAME=`is_desktop $FF`
|
||||
is_desktop $FF
|
||||
NAME="$IS_DESKTOP_RESULT"
|
||||
if [ -n "$NAME" ]; then
|
||||
EXE=`get_exec $FF`
|
||||
ICO=`get_icon $FF`
|
||||
echo \"$NAME\" \"$ICO\" exec \"$EXE\" >> $OUT
|
||||
get_exec "$FF"
|
||||
EXE="$GET_EXEC_RETURN"
|
||||
get_icon "$FF"
|
||||
ICO="$GET_ICON_RETURN"
|
||||
echo "\"$NAME\" \"$ICO\" exec \"$EXE\"" >> $OUT
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
|
|
@ -31,90 +31,128 @@ if [ $# -lt 3 ]; then
|
|||
exit
|
||||
fi
|
||||
# setup variables
|
||||
BASE=$1
|
||||
ODIR=$2
|
||||
OUT=$3
|
||||
BASE="$1"
|
||||
ODIR="$2"
|
||||
OUT="$3"
|
||||
|
||||
# hunt around and see where all the kde graphics have gone
|
||||
IDIR=/usr/share/icons
|
||||
if [ ! -r $IDIR"/mini/kcontrol.xpm" ]; then
|
||||
IDIR=/usr/local/share/icons
|
||||
fi
|
||||
if [ ! -r $IDIR"/mini/kcontrol.xpm" ]; then
|
||||
IDIR=/opt/kde/icons
|
||||
fi
|
||||
if [ ! -r $IDIR"/mini/kcontrol.xpm" ]; then
|
||||
IDIR=/opt/kde/share/icons
|
||||
fi
|
||||
if [ ! -r $IDIR"/mini/kcontrol.xpm" ]; then
|
||||
IDIR=/usr/local/kde/icons
|
||||
fi
|
||||
if [ ! -r $IDIR"/mini/kcontrol.xpm" ]; then
|
||||
IDIR=/usr/local/kde/share/icons
|
||||
fi
|
||||
if [ ! -r $IDIR"/mini/kcontrol.xpm" ]; then
|
||||
IDIR=/usr/kde/icons
|
||||
fi
|
||||
if [ ! -r $IDIR"/mini/kcontrol.xpm" ]; then
|
||||
IDIR=/usr/kde/share/icons
|
||||
fi
|
||||
if [ ! -r $IDIR"/mini/kcontrol.xpm" ]; then
|
||||
IDIR=/usr/share/kde/icons
|
||||
fi
|
||||
set_IDIR() {
|
||||
# hunt around and see where all the kde graphics have gone
|
||||
IDIR=/usr/share/icons
|
||||
if [ ! -r "${IDIR}/mini/kcontrol.xpm" ]; then
|
||||
IDIR="/usr/local/share/icons"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -r "${IDIR}/mini/kcontrol.xpm" ]; then
|
||||
IDIR="/opt/kde/icons"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -r "${IDIR}/mini/kcontrol.xpm" ]; then
|
||||
IDIR="/opt/kde/share/icons"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -r "${IDIR}/mini/kcontrol.xpm" ]; then
|
||||
IDIR="/usr/local/kde/icons"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -r "${IDIR}/mini/kcontrol.xpm" ]; then
|
||||
IDIR="/usr/local/kde/share/icons"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -r "${IDIR}/mini/kcontrol.xpm" ]; then
|
||||
IDIR="/usr/kde/icons"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -r "${IDIR}/mini/kcontrol.xpm" ]; then
|
||||
IDIR="/usr/kde/share/icons"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -r "${IDIR}/mini/kcontrol.xpm" ]; then
|
||||
IDIR="/usr/share/kde/icons"
|
||||
else
|
||||
return
|
||||
fi
|
||||
}
|
||||
|
||||
set_DIR (){
|
||||
DIR=/usr/share/applnk
|
||||
if [ ! -r "${DIR}//KControl.kdelnk" ]; then
|
||||
DIR="/usr/local/share/applnk"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -r "${DIR}//KControl.kdelnk" ]; then
|
||||
DIR="/opt/kde/applnk"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -r "${DIR}//KControl.kdelnk" ]; then
|
||||
DIR="/opt/kde/share/applnk"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -r "${DIR}//KControl.kdelnk" ]; then
|
||||
DIR="/usr/local/kde/applnk"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -r "${DIR}//KControl.kdelnk" ]; then
|
||||
DIR="/usr/local/kde/share/applnk"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -r "${DIR}//KControl.kdelnk" ]; then
|
||||
DIR="/usr/kde/applnk"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -r "${DIR}//KControl.kdelnk" ]; then
|
||||
DIR="/usr/kde/share/applnk"
|
||||
else
|
||||
return
|
||||
fi
|
||||
if [ ! -r "${DIR}//KControl.kdelnk" ]; then
|
||||
DIR="/usr/share/kde/applnk"
|
||||
else
|
||||
return
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
set_IDIR
|
||||
# mini icons are in the icons dir
|
||||
MIDIR=$IDIR"/mini"
|
||||
|
||||
# hunt around and see where all the kde applnk stuff is
|
||||
if [ $# -eq 4 ]; then
|
||||
DIR=$4
|
||||
DIR="$4"
|
||||
else
|
||||
DIR=/usr/share/applnk
|
||||
if [ ! -r $DIR"/KControl.kdelnk" ]; then
|
||||
DIR=/usr/local/share/applnk
|
||||
fi
|
||||
if [ ! -r $DIR"/KControl.kdelnk" ]; then
|
||||
DIR=/opt/kde/applnk
|
||||
fi
|
||||
if [ ! -r $DIR"/KControl.kdelnk" ]; then
|
||||
DIR=/opt/kde/share/applnk
|
||||
fi
|
||||
if [ ! -r $DIR"/KControl.kdelnk" ]; then
|
||||
DIR=/usr/local/kde/applnk
|
||||
fi
|
||||
if [ ! -r $DIR"/KControl.kdelnk" ]; then
|
||||
DIR=/usr/local/kde/share/applnk
|
||||
fi
|
||||
if [ ! -r $DIR"/KControl.kdelnk" ]; then
|
||||
DIR=/usr/kde/applnk
|
||||
fi
|
||||
if [ ! -r $DIR"/KControl.kdelnk" ]; then
|
||||
DIR=/usr/kde/share/applnk
|
||||
fi
|
||||
if [ ! -r $DIR"/KControl.kdelnk" ]; then
|
||||
DIR=/usr/share/kde/applnk
|
||||
fi
|
||||
set_DIR
|
||||
fi
|
||||
|
||||
|
||||
# if the applnk dir doesn't exist in the end then exit
|
||||
if [ ! -d "$DIR" ]; then
|
||||
exit
|
||||
fi
|
||||
# if the destination dir doesn't exist - create it
|
||||
if [ ! -d "$ODIR" ]; then
|
||||
mkdir $ODIR
|
||||
mkdir "$ODIR"
|
||||
fi
|
||||
|
||||
# function to check its a KDE kdelnk file
|
||||
is_kdelnk() {
|
||||
VAL=`grep "\[KDE Desktop Entry\]" $1`
|
||||
VAL="`grep "\[KDE Desktop Entry\]" $1`"
|
||||
IS_KDELNK_RETURN=""
|
||||
if [ -n "$VAL" ]; then
|
||||
VAL=`grep "^Name\[$LANG\]=" $1 | head -1`
|
||||
if [ ! -n "$VAL" ]; then
|
||||
VAL=`grep '^Name=' $1 | head -1`
|
||||
fi
|
||||
if [ -n "$VAL" ]; then
|
||||
NAME=`echo $VAL | awk -F= '{printf("%s", $2);}'`
|
||||
echo $NAME | tr -d '\n'
|
||||
IS_KDELNK_RETURN="`awk -F= 'BEGIN { n="" } END { printf("%s", n) } $1 ~ "^Name\\\['$LANG'\\\]" {n=$2;exit} $1 ~ "^Name$" {n=$2}' $1`"
|
||||
if [ -n "$IS_KDELNK_RETURN" ]; then
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
@ -123,55 +161,42 @@ is_kdelnk() {
|
|||
|
||||
# function to get the sortorder list -if there is one
|
||||
get_sortorder() {
|
||||
VAL=`grep '^SortOrder=' $1 | head -1`
|
||||
if [ -n "$VAL" ]; then
|
||||
VAL2=`echo $VAL | awk -F= '{printf("%s", $2);}' | sed "s/,/ /g"`
|
||||
echo $VAL2 | tr -d '\n'
|
||||
return 0
|
||||
GET_SORTORDER_RETURN="`awk -F= '$1 ~ "^SortOrder$" {printf("%s", $2);}' $1 | sed 's/,/ /g'`"
|
||||
if [ -z "$GET_SORTORDER_RETURN" ]; then
|
||||
return 1
|
||||
fi
|
||||
return 1
|
||||
return 0
|
||||
}
|
||||
|
||||
get_icon() {
|
||||
VAL=`grep '^Icon=' $1 | head -1`
|
||||
if [ -n "$VAL" ]; then
|
||||
VAL2=`echo $VAL | awk -F= '{printf("%s", $2);}'`
|
||||
echo $VAL2 | tr -d '\n'
|
||||
return 0
|
||||
GET_ICON_RETURN="`awk -F= '$1 ~ "^Icon$" {printf("%s", $2); exit;}' $1`"
|
||||
if [ -z "$GET_ICON_RETURN" ]; then
|
||||
return 1
|
||||
fi
|
||||
return 1
|
||||
return 0
|
||||
}
|
||||
|
||||
get_miniicon() {
|
||||
VAL=`grep '^MiniIcon=' $1 | head -1`
|
||||
if [ -n "$VAL" ]; then
|
||||
VAL2=`echo $VAL | awk -F= '{printf("%s", $2);}'`
|
||||
echo $VAL2 | tr -d '\n'
|
||||
return 0
|
||||
else
|
||||
get_icon $1
|
||||
return 0
|
||||
GET_MINIICON_RETURN="`awk -F= '$1 ~ "^MiniIcon$" {printf("%s", $2); exit;}' $1`"
|
||||
if [ -z "$GET_MINIICON_RETURN" ]; then
|
||||
if ! get_icon $1; then
|
||||
return 1
|
||||
fi
|
||||
GET_MINIICON_RETURN=$GET_ICON_RETURN
|
||||
fi
|
||||
return 1
|
||||
return 0
|
||||
}
|
||||
|
||||
get_exec() {
|
||||
VAL=`grep '^Exec=' $1 | head -1`
|
||||
if [ -n "$VAL" ]; then
|
||||
VAL2=`echo $VAL | awk -F= '{printf("%s", $2);}'`
|
||||
VAL2=`echo $VAL2 | sed "s:\%c:$2:g"`
|
||||
VAL2=`echo $VAL2 | sed "s:\%m:$3:g"`
|
||||
VAL2=`echo $VAL2 | sed "s:\%i:$4:g"`
|
||||
VAL2=`echo $VAL2 | sed "s:\":\':g"`
|
||||
VAL2=`echo $VAL2 | sed "s:\%u:NONE:g"`
|
||||
VAL2=`echo $VAL2 | sed "s:\%k:NONE:g"`
|
||||
VAL2=`echo $VAL2 | sed "s:\%f:blank:g"`
|
||||
VAL2=`echo $VAL2 | sed "s:\%n:NONE:g"`
|
||||
VAL2=`echo $VAL2 | sed "s:\%d:$HOME:g"`
|
||||
echo $VAL2 | tr -d '\n'
|
||||
return 0
|
||||
GET_EXEC_RETURN=`awk -F= '$1 ~ "^Exec$" {printf("%s", $2); exit;}' $1 | \
|
||||
sed -e "s:\%c:$2:g" -e "s:\%m:$3:g" \
|
||||
-e "s:\%i:$4:g" -e "s:\":\':g" \
|
||||
-e "s:\%(u|k|n):NONE:g" -e "s:\%f:blank:g" \
|
||||
-e "s:\%d:$HOME:g"`
|
||||
if [ -z "$GET_EXEC_RETURN" ]; then
|
||||
return 1
|
||||
fi
|
||||
return 1
|
||||
return 0
|
||||
}
|
||||
|
||||
E_TITLE="$DIR Menu"
|
||||
|
@ -179,13 +204,15 @@ E_TITLE="$DIR Menu"
|
|||
# order of the directory
|
||||
DIRORDER=""
|
||||
# if a .directory file exists - read it
|
||||
F=$DIR"/.directory"
|
||||
F="${DIR}/.directory"
|
||||
if [ -f $F ]; then
|
||||
NAME=`is_kdelnk $F`
|
||||
is_kdelnk "$F"
|
||||
NAME="$IS_KDELNK_RETURN"
|
||||
if [ -n "$NAME" ]; then
|
||||
E_TITLE=$NAME
|
||||
E_TITLE="$NAME"
|
||||
fi
|
||||
DIRORDER=`get_sortorder $F`
|
||||
get_sortorder "$F"
|
||||
DIRORDER="$GET_SORTORDER_RETURN"
|
||||
fi
|
||||
|
||||
# this is to build a complete orderered list
|
||||
|
@ -193,70 +220,77 @@ fi
|
|||
# because DIRORDER is often not complete
|
||||
build_complete_order() {
|
||||
DIRLIST=`/bin/ls -F $DIR | grep "/$" | sed "s:/::g"`
|
||||
BUILD_COMPLETE_ORDER_RETURN=""
|
||||
if [ -z "$DIRORDER" ]; then
|
||||
echo $DIRLIST
|
||||
BUILD_COMPLETE_ORDER_RETURN="$DIRLIST"
|
||||
else
|
||||
echo $DIRORDER
|
||||
BUILD_COMPLETE_ORDER_RETURN="$DIRORDER"
|
||||
for subdir in $DIRLIST; do
|
||||
# if not in DIRLIST
|
||||
pos1=`echo $DIRORDER | grep "^$subdir "`
|
||||
pos2=`echo $DIRORDER | grep " $subdir "`
|
||||
pos3=`echo $DIRORDER | grep " $subdir$"`
|
||||
pos="`echo $DIRORDER | egrep "(^$subdir | $subdir | $subdir$)"`"
|
||||
# case ^$subdir$ not possible because more than one sub-directory
|
||||
if [ -z "$pos2" -a -z "$pos1" -a -z "$pos3" ]; then
|
||||
echo $subdir
|
||||
if [ -z "$pos" ]; then
|
||||
BUILD_COMPLETE_ORDER="${BUILD_COMPLETE_ORDER_RETURN} ${subdir}"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
ORDER=`build_complete_order`
|
||||
build_complete_order
|
||||
ORDER="$BUILD_COMPLETE_ORDER_RETURN"
|
||||
|
||||
# print the menu title
|
||||
echo \"$E_TITLE\" > $OUT
|
||||
echo "\"$E_TITLE\"" > $OUT
|
||||
|
||||
# for every subdir in the dir list or order - print it
|
||||
for F in $ORDER; do
|
||||
FF=$DIR"/"$F
|
||||
FF="${DIR}/${F}"
|
||||
if [ -d "$FF" ]; then
|
||||
NAME=`echo $F | sed "s/_/ /g"`
|
||||
FFF=$FF"/.directory"
|
||||
NAME="`echo "$F" | sed "s/_/ /g"`"
|
||||
FFF="${FF}/.directory"
|
||||
if [ -f "$FFF" ]; then
|
||||
ICON=`get_icon "$FFF"`
|
||||
get_icon "$FFF"
|
||||
ICON="$GET_ICON_RETURN"
|
||||
else
|
||||
ICON=""
|
||||
fi
|
||||
if [ -n "$ICON" ]; then
|
||||
ICON=\"$MIDIR"/"$ICON\"
|
||||
ICON="\"${MIDIR}/${ICON}\""
|
||||
else
|
||||
ICON=NULL
|
||||
ICON="NULL"
|
||||
fi
|
||||
FFF=$ODIR"/"$BASE
|
||||
FFF="${ODIR}/${BASE}"
|
||||
if [ ! -d "$FFF" ]; then
|
||||
mkdir $FFF
|
||||
mkdir "$FFF"
|
||||
fi
|
||||
MFILE=$FFF"/"$F.menu
|
||||
$0 $BASE"/"$F $ODIR $MFILE $DIR"/"$F
|
||||
echo \"$NAME\" $ICON menu \"$MFILE\" >> $OUT
|
||||
MFILE="${FFF}/${F}.menu"
|
||||
"$0" "${BASE}/${F}" "$ODIR" "$MFILE" "${DIR}/${F}"
|
||||
echo "\"$NAME\" $ICON menu \"$MFILE\"" >> $OUT
|
||||
fi
|
||||
done
|
||||
|
||||
# for all normal files...
|
||||
FILES=`/bin/ls -F $DIR | grep -v "/$"`
|
||||
FILES="`/bin/ls -F $DIR | grep -v "/$"`"
|
||||
for F in $FILES; do
|
||||
FF=$DIR"/"$F
|
||||
FF="${DIR}/${F}"
|
||||
if [ -f "$FF" ]; then
|
||||
NAME=`is_kdelnk $FF`
|
||||
is_kdelnk "$FF"
|
||||
NAME="$IS_KDELNK_RETURN"
|
||||
if [ -n "$NAME" ]; then
|
||||
ICON=`get_miniicon "$FF"`
|
||||
BICON=`get_icon $FF`
|
||||
get_miniicon "$FF"
|
||||
ICON="$GET_MINIICON_RETURN"
|
||||
get_icon "$FF"
|
||||
BICON="$GET_ICON_RETURN"
|
||||
if [ -n "$ICON" ]; then
|
||||
ICON=\"$MIDIR"/"$ICON\"
|
||||
ICON="\"${MIDIR}/${ICON}\""
|
||||
else
|
||||
ICON=NULL
|
||||
ICON="NULL"
|
||||
fi
|
||||
EXE=`get_exec $FF $NAME $ICON $BICON`
|
||||
echo \"$NAME\" $ICON exec \"$EXE\" >> $OUT
|
||||
get_exec "$FF" "$NAME" "$ICON $BICON"
|
||||
EXE="$GET_EXEC_RETURN"
|
||||
echo "\"$NAME\" $ICON exec \"$EXE\"" >> $OUT
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
|
|
@ -30,8 +30,13 @@ export PATH
|
|||
OUT_DIR=$ECONFDIR
|
||||
OUT=$OUT_DIR"/file.menu"
|
||||
|
||||
WINDOWID=`eesh -ewait window_list | awk '$3 ~ "^Message$" { printf("%s ", $1)}'`
|
||||
for i in $WINDOWID; do
|
||||
eesh -e "win_op "$i" close"
|
||||
done
|
||||
|
||||
eesh -e "dialog_ok Menus are being generated... Please Wait."
|
||||
WINDOWID=`eesh -ewait window_list | grep Message | awk '{printf("%s", $1);}'`
|
||||
WINDOWID=`eesh -ewait window_list | awk '$3 ~ "^Message$" { printf("%s ", $1)}'`
|
||||
|
||||
e_gen_kde_menu menus_kde $OUT_DIR $OUT_DIR"/kde.menu"
|
||||
e_gen_gnome_menu menus_gnome $OUT_DIR $OUT_DIR"/gnome.menu"
|
||||
|
@ -62,14 +67,12 @@ touch $OUT
|
|||
|
||||
# generate menu looking for Epplets - you might not have any yet.... but expect to
|
||||
OUT=$OUT_DIR"/epplets.menu"
|
||||
EPPLETS=`/bin/ls $EBIN"/"*.epplet 2> /dev/null | awk '{printf("%s ", $1);}'`
|
||||
EPPLETS="`/bin/ls $EBIN"/"*.epplet 2> /dev/null`"
|
||||
if [ -n "$EPPLETS" ]; then
|
||||
echo \"Enlightenment Epplets\" > $OUT
|
||||
for I in $EPPLETS; do
|
||||
NAME=`echo $I | sed 's/.epplet//g'`
|
||||
NAME=`basename $NAME`
|
||||
echo \"$NAME\" \"$EROOT"/epplet_icons/"$NAME".icon"\" exec \"$I\" >> $OUT
|
||||
done
|
||||
echo "$EPPLETS" | \
|
||||
sed -e 's:\(^.*/\([^/]*\).epplet$\):\"\2\" \"'$EROOT'/epplet_icons/\2.icon\" exec \"\1\":' \
|
||||
>> $OUT
|
||||
fi
|
||||
touch $OUT
|
||||
|
||||
|
@ -106,6 +109,9 @@ if [ ! -f "$OUT" ]; then
|
|||
echo \"Myth 2\" NULL exec \"myth2\" >> $OUT
|
||||
fi
|
||||
touch $OUT
|
||||
eesh -e "win_op "$WINDOWID" close"
|
||||
|
||||
for i in $WINDOWID; do
|
||||
eesh -e "win_op "$i" close"
|
||||
done
|
||||
eesh -e "reload_menus"
|
||||
eesh -e "dialog_ok Menu generation complete."
|
||||
|
|
Loading…
Reference in New Issue