#!/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