#!/bin/bash # # Search .desktop files and extract information about program entries # Use the information to write the menu file for JWM if [ "$1" != "now" ];then # Check for X if [[ -z $DISPLAY ]];then echo "This will search for new programs and add them to the JWM menu file." echo "A copy of your existing ~/.jwm/menu file will be saved as ~/.jwm/menu-old" echo "Do you want to continue? y/N" read ans case $ans in Y|y) ;; [Yy][Ee][Ss]) ;; *) echo Aborting exit esac else Xdialog --wrap --title "Refresh JWM menu?"\ --yesno "This will search for new programs and add them to the JWM menu file. A copy of your existing ~/.jwm/menu file will be saved as ~/.jwm/menu-old Do you want to continue?" 0 0 case $? in 0) echo "Yes chosen." ;; 1) echo "No chosen, exiting." exit ;; 255) echo "Box closed, exiting" exit ;; esac fi fi ### add symlinks for icon catagories ln -s /usr/share/icons/Vista-Inspirate/scalable/apps/kdf.png /usr/share/icons/Vista-Inspirate/scalable/apps/other.png ln -s /usr/share/icons/vasm.png /usr/share/icons/Vista-Inspirate/scalable/apps/system.png ln -s /usr/share/icons/Vista-Inspirate/scalable/apps/advancedsettings.png /usr/share/icons/Vista-Inspirate/scalable/apps/utilities.png ln -s /usr/share/icons/Vista-Inspirate/scalable/apps/ooo_draw.png /usr/share/icons/Vista-Inspirate/scalable/apps/graphics.png ln -s /usr/share/icons/Vista-Inspirate/scalable/apps/ooo_writer.png /usr/share/icons/Vista-Inspirate/scalable/apps/office.png # Make a backup of the original configuration file cp ~/.jwm/menu ~/.jwm/menu-old # Start looking for new applications menufile="$HOME/.jwm/menu" ls /usr/share/applications/*.desktop|while read file;do echo == exec="$(cat "$file" | grep -i ^[Ee][Xx][Ee][Cc]= | sed s/[Ee][Xx][Ee][Cc]=//)" echo "Executable: $exec" if [ "$(echo $exec|cut -d " " -f1)" = "vsuper" ] || [ "$(echo $exec|cut -d " " -f1)" = "/sbin/vsuper" ];then exe="$(echo $exec|cut -d " " -f2)" else exe="$(echo $exec|cut -d " " -f1)" fi echo "$file:"; name="$(cat "$file" | grep -i ^[Nn][Aa][Mm][Ee]= | sed s/[Nn][Aa][Mm][Ee]=// | sed 's/[ \t]*$//')" if [ -z "$name" ];then echo "No name found, Using $exe for name" name="$exe" echo "Name: $name" else echo "Name: $name" fi if [ -x $EXE ];then ##if its not executable no sense adding it. echo "$exec is Executable" ### This section finds/adds the category # The categories are: multimedia office graphics utilities network system games. Anything else goes in "other" category=$(cat "$file" | grep -i categories | grep [=\;][Mm][Uu][Ll][Tt][Ii][Mm][Ee][Dd][Di][Aa] -o | tr [:upper:] [:lower:] | sed 's/;//' | sed 's/=//') if [ -z "$category" ];then category=$(cat "$file" | grep -i categories | grep [=\;][Aa][Uu][Dd][Ii][Oo] -o | tr [:upper:] [:lower:] | sed 's/;//' | sed 's/=//') fi if [ -z "$category" ];then category=$(cat "$file" | grep -i categories | grep [=\;][Vv][Ii][Dd][Ee][Oo] -o | tr [:upper:] [:lower:] | sed 's/;//' | sed 's/=//') fi if [ "$category" = "audio" ] || [ "$category" = "video" ];then category=multimedia fi if [ -z "$category" ];then category=$(cat "$file" | grep -i categories | grep [=\;][Oo][Ff][Ff][Ii][Cc][Ee] -o | tr [:upper:] [:lower:] | sed 's/;//' | sed 's/=//') fi if [ -z "$category" ];then category=$(cat "$file" | grep -i categories | grep [=\;][Gg][Rr][Aa][Pp][Hh][Ii][Cc][Ss] -o | tr [:upper:] [:lower:] | sed 's/;//' | sed 's/=//') fi if [ -z "$category" ];then category=$(cat "$file" | grep -i categories | grep [=\;][Uu][Tt][Ii][Ll][Ii][Tt][Ii][Ee][Ss] -o | tr [:upper:] [:lower:] | sed 's/;//' | sed 's/=//') fi if [ -z "$category" ];then category=$(cat "$file" | grep -i categories | grep [=\;][Uu][Tt][Ii][Ll][Ii][Tt][Yy] -o | tr [:upper:] [:lower:] | sed 's/;//' | sed 's/=//') fi if [ "$category" = "utility" ];then category=utilities fi if [ -z "$category" ];then category=$(cat "$file" | grep -i categories | grep [=\;][Nn][Ee][Tt][Ww][Oo][Rr][Kk] -o | tr [:upper:] [:lower:] | sed 's/;//' | sed 's/=//') fi if [ -z "$category" ];then category=$(cat "$file" | grep -i categories | grep [=\;][Ii][Nn][Tt][Ee][Rr][Nn][Ee][Tt] -o | tr [:upper:] [:lower:] | sed 's/;//' | sed 's/=//') fi if [ "$category" = "internet" ];then category=network fi if [ -z "$category" ];then category=$(cat "$file" | grep -i categories | grep [=\;][Ss][Yy][Ss][Tt][Ee][Mm] -o | tr [:upper:] [:lower:] | sed 's/;//' | sed 's/=//') fi if [ -z "$category" ];then category=$(cat "$file" | grep -i categories | grep [=\;][Gg][Aa][Mm][Ee][Ss] -o | tr [:upper:] [:lower:] | sed 's/;//' | sed 's/=//') fi if [ -z "$category" ];then category=$(cat "$file" | grep -i categories | grep [=\;][Gg][Aa][Mm][Ee] -o | tr [:upper:] [:lower:] | sed 's/;//' | sed 's/=//') fi if [ "$category" = "game" ];then category=games fi if [ -z "$category" ];then category=$(cat "$file" | grep -i categories) fi if [ "$category" != "multimedia" ] && [ "$category" != "office" ] && [ "$category" != "graphics" ] && [ "$category" != "utilities" ] && [ "$category" != "network" ] && [ "$category" != "system" ] && [ "$category" != "games" ];then category=other fi ### this capitalizes the category $Category = Capitalized $category = not capitalized #Since menu is captialized, make it so first=$(echo ${category:0:1} | tr 'a-z' 'A-Z') rest=$(echo ${category:1} | tr 'A-Z' 'a-z') echo $first$rest Category="$first$rest" echo Category: $category $Category ### find/set an icon for the app # Unless full icon path is specified, search for for a matching jpg, xpm or png file. #If nothing found, use a default one. icon=$(cat "$file" | grep -i ^[Ii][Cc][Oo][Nn]= | sed 's/[Ii][Cc][Oo][Nn]=//') useicon=$icon if [ -z `echo $icon | grep \/` ];then useicon= themepath="/usr/share/icons/Vista-Inspirate/scalable" for icondir in "/usr/share/pixmaps" "$themepath/mimetypes" "$themepath/devices/" "$themepath/filesystems" "$themepath/apps";do cd $icondir if [ -z $(echo $icon | grep png) ] && [ -z $(echo $icon | grep jpg) ] && [ -z $(echo $icon | grep xpm) ];then for icontype in jpg xpm png;do iconfound=$(find -name "$icon.$icontype" | sed 's/.\//\//') if [ -n "$iconfound" ];then useicon=$icondir$iconfound fi done else iconfound=$(find -name "$icon" | sed 's/.\//\//') if [ -n "$iconfound" ];then useicon=$icondir$iconfound fi fi done fi if [ -z "$useicon" ];then echo "No icon files found, using default" useicon="/usr/share/icons/Vista-Inspirate/scalable/apps/tux.png" fi echo "Icon: $useicon" ### add the app if its not in the menu # Search for application name and category in menu file, # if not there, insert appropriate category section and/or a program entry searchname=$(echo $name | sed 's/[ \t]*$//'| sed 's/ /\\\ /g') checkname=$(cat $menufile | grep "$exe") if [ -z "$checkname" ];then echo "Adding $exec" findcat=\
" $menufile fi addprog=\ \ \ \ \ \ \