#!/bin/sh
#========
echo ooo
echo XDG-2-IceWM menu converter v0.04 for SliTaz
date +%G%b%d%a.%P%H:%M:%S
uname -srm
# makes freedesktop apps visible to IceWM
#
# (1) builds folder of symlinks to xdg icons on /tmp
# for persistence copy to /usr/share
# & symlink from /tmp in .xinitrc
# (2) generates IceWM submenu & copies to .icewm
# reference via line in .icewm/menu:
# menufile xdg folder xiwmenu_xdg
# init the control directory
FIX=/tmp/xdgicewm
rm -rf ${FIX}
mkdir ${FIX} >/dev/null
# init the output menu file
mkdir ${FIX}/menu
ICE=${FIX}/menu/xiwmenu_xdg
rm -rf ${ICE}
touch ${ICE}
{
echo "#"
echo "# IceWM menuing generated by ${0##*/} (gpl)"
echo "# 2012 Screaming CuckooBroad Associates"
echo "#"
} >>${ICE}
# symlinks for categories
echo ; echo "symlinking icons (cats) ..."
for ICO in \
applications-development \
applications-games \
applications-graphics \
applications-internet \
applications-multimedia \
applications-office \
applications-system \
applications-accessories
do
echo -n ${ICO}" "
ln -sf /usr/share/icons/SliTaz/categories/22/${ICO}.png ${FIX}/${ICO}.png
done
echo
# symlinks to physical xdg icons
echo ; echo "symlinking icons (apps) ..."
cd /usr/share/applications
for ICO in $(cat * | grep "Icon=" | sed "s_Icon=__g" | sed "s_.png__g")
do
echo -n ${ICO}" "
for DIR in \
/usr/share/icons/SliTaz/mimetypes/32 \
/usr/share/icons/SliTaz/devices/22 \
/usr/share/icons/SliTaz/apps/22 \
/usr/share/icons/SliTaz/categories/22 \
/usr/share/icons/SliTaz/devices/22 \
/usr/share/icons/SliTaz/actions/22 \
/usr/share/icons/SliTaz/places/32 \
/usr/share/icons/hicolor/32x32/apps \
/usr/share/pixmaps
do
if [ -f ${DIR}/${ICO}.png ]
then
ln -sf ${DIR}/${ICO}.png ${FIX}/${ICO}.png
fi
done
done
echo
# alias unresolved iconnames (mountbox & Xdefaults)
ln -sf /usr/share/icons/SliTaz/devices/22/multimedia-player-ipod-green.png ${FIX}/media-flash.png
ln -sf /usr/share/icewm/icons/app_16x16.xpm ${FIX}/preferences-system-session.png
# alias xpm icons (mhwaveedit)
ln -sf /usr/share/pixmaps/mhwaveedit.xpm ${FIX}/mhwaveedit.png
# menugen: loop thru freedesktop categories (order as per renaming below)
echo ; echo generating category menus ...
for CAT in Development Documentation Game Graphics Network AudioVideo Office Settings System Utility
do
# init each cat directory
echo -n ${CAT}" "
rm -rf ${FIX}/${CAT}
mkdir ${FIX}/${CAT} >/dev/null
cd /usr/share/applications
# find & copy relevant files
for DTOP in $(ls -1 *.desktop)
do
if cat ${DTOP} | grep -q ${CAT}\;
then
cp ${DTOP} ${FIX}/${CAT}/
fi
done
# *.desktops missing semicolon after cat
case "${CAT}" in
"Graphics" ) cp viewnior.desktop ${FIX}/${CAT}/ ;;
"System" ) cp hardinfo.desktop ${FIX}/${CAT}/ ;;
* ) ;;
esac
# taz friendly menu renames
cd ${FIX}/${CAT}
REN=${CAT}
[ "${CAT}" == "Game" ] && REN=Games
[ "${CAT}" == "Network" ] && REN=Internet
[ "${CAT}" == "AudioVideo" ] && REN=Multimedia
[ "${CAT}" == "Settings" ] && REN=Preferences
# from /usr/share/desktop-directories
case "${CAT}" in
"Development" ) ICO=applications-development ;;
"Documentation" ) ICO=text-x-generic ;;
"Game" ) ICO=applications-games ;;
"Graphics" ) ICO=applications-graphics ;;
"Network" ) ICO=applications-internet ;;
"AudioVideo" ) ICO=applications-multimedia ;;
"Office" ) ICO=applications-office ;;
"Settings" ) ICO=preferences-desktop ;;
"System" ) ICO=applications-system ;;
"Utility" ) ICO=applications-accessories ;;
* ) ICO=preferences-desktop ;;
esac
# init the submenu header
echo menu "${REN}" ${FIX}/${ICO}.png { >>${ICE}
# clean up apps which wound up in 2 submenus
[ "${CAT}" == "Utility" ] && rm -rf lxtask.desktop pcmanfm.desktop
# format menu entries from *.desktop files
for DTP in $(ls -1 *.desktop)
do
# prefilter: conflicting tags
# remove double icon (lxrandr)
{
cat ${DTP} \
| grep -iv "Icon=video-display" \
| grep -iv "X-GNOME-WMName=" \
| grep -iv "GenericName=" \
| grep -iv "TryExec="
} >/tmp/grepwork1
# search for these
{
cat /tmp/grepwork1 | grep -i "Name="
cat /tmp/grepwork1 | grep -i "Icon="
cat /tmp/grepwork1 | grep -i "Exec="
} >/tmp/grepwork2
# format the menuline: prog "Name" Icon Exec [parms]
# remove freedesktop field codes %f %F %u %U:
# http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html
# remove spurious .png in icon specs
# remove 2 linefeeds
{
cat /tmp/grepwork2 \
| sed "s_.png__g" \
| sed "s_%f__g" \
| sed "s_%F__g" \
| sed "s_%u__g" \
| sed "s_%U__g" \
| sed "s_Name=_prog \"_g" \
| sed "s_Icon=_\" ${FIX}/_g" \
| sed "s_Exec=_.png _g" \
| sed "{N;s_\n__g;N;s_\n__g;}"
} >>${ICE}
rm -rf /tmp/grepwork*
done
echo } >>${ICE}
done
echo
cp -p ${ICE} ~/.icewm/
exit 0