#!/bin/bash
# Generate alloywm menus on-the-fly, like a hierarchical menu

IFS=" "

# Set the alloywm menu program
menu_program=x-panel

if [ ! -f "~/.paletterc" ]
then
  touch ~/.paletterc
fi

# Functions
kill_alloywm() {
  set -- `pidof alloywm`
  kill $1
}

alloywm-menu() {
  $0 &
}

menuitem() {
  echo $1,$2=$3
}

# Menus
rootmenu="Info=xterm -e alloywm-info"
termmenu="rxvt=rxvt -rv,XTerm=xterm,aterm=aterm -tr -sh 50 -rv"
chatclients="TiK=tik,BitchX=xterm -e bitchx,TinyIRC=xterm -e mu2irc"
browsersmenu="Netscape=netscape,Lynx=xterm -e lynx"
editorsmenu="gVim=gvim,VI=xterm -e vi,TkNotepad=tknotepad"
xutilsmenu="XCalc=xcalc,XLoad=xload"
netappsmenu="Browsers ->=alloywm-menu browsersmenu,Chat Clients->=alloywm-menu chatclients"
graphicsappsmenu="The GIMP=gimp"
xappsmenu="Editors ->=alloywm-menu editorsmenu,Graphics ->=alloywm-menu graphicsappsmenu"
winmanmenu="Window Maker=set -- \`pidof alloywm\`; wmaker \&; kill \$1,Blackbox=set -- \`pidof alloywm\`; kill \$1; blackbox \&"

# Construct the menu
rootmenu=`menuitem "$rootmenu" "Terminals ->" "alloywm-menu termmenu"`
rootmenu=`menuitem "$rootmenu" "Net Apps ->" "alloywm-menu netappsmenu"`
rootmenu=`menuitem "$rootmenu" "X Apps ->" "alloywm-menu xappsmenu"`
rootmenu=`menuitem "$rootmenu" "X Utils ->" "alloywm-menu xutilsmenu"`
rootmenu=`menuitem "$rootmenu" "Window Managers ->" "alloywm-menu winmanmenu"`

# Begin
rm ~/.paletterc
touch ~/.paletterc

case $1 in
"") # Use the default root menu
  set -- `pidof $menu_program`
  kill $1
  IFS=","
  for i in $rootmenu
  do
    echo $i >> ~/.paletterc
  done
  echo "Exit=set -- \`pidof alloywm\`; kill \$1 \`pidof icedock\`" >> ~/.paletterc
  $menu_program
;;
"chatclients") # Chat clients
  set -- `pidof $menu_program`
  kill $1
  IFS=","
  for i in $chatclients
  do
    echo $i >> ~/.paletterc
  done
  echo "<- Previous=alloywm-menu netappsmenu" >> ~/.paletterc
  $menu_program
;;
"browsersmenu") # Browsers
  set -- `pidof $menu_program`
  kill $1
  IFS=","
  for i in $browsersmenu
  do
    echo $i >> ~/.paletterc
  done
  echo "<- Previous=alloywm-menu netappsmenu " >> ~/.paletterc
  $menu_program
;;
"termmenu") # X Window terminals
  set -- `pidof $menu_program`
  kill $1
  IFS=","
  for i in $termmenu
  do
    echo $i >> ~/.paletterc
  done
  echo "<- Previous=alloywm-menu" >> ~/.paletterc
  $menu_program
;;
"editorsmenu") # Editors menu
  set -- `pidof $menu_program`
  kill $1
  IFS=","
  for i in $editorsmenu
  do
    echo $i >> ~/.paletterc
  done
  echo "<- Previous=alloywm-menu xappsmenu" >> ~/.paletterc
  $menu_program
;;
"xutilsmenu") # X Utilities menu
  set -- `pidof $menu_program`
  kill $1
  IFS=","
  for i in $xutilsmenu
  do
    echo $i >> ~/.paletterc
  done
  echo "<- Previous=alloywm-menu" >> ~/.paletterc
  $menu_program
;;
"netappsmenu") # Networking apps
  set -- `pidof $menu_program`
  kill $1
  IFS=","
  for i in $netappsmenu
  do
    echo $i >> ~/.paletterc
  done
  echo "<- Previous=alloywm-menu" >> ~/.paletterc
  $menu_program
;;
"xappsmenu") # X11R6 apps
  set -- `pidof $menu_program`
  kill $1
  IFS=","
  for i in $xappsmenu
  do
    echo $i >> ~/.paletterc
  done
  echo "<- Previous=alloywm-menu" >> ~/.paletterc
  $menu_program
;;
"graphicsappsmenu") # Graphics apps
  set -- `pidof $menu_program`
  kill $1
  IFS=","
  for i in $graphicsappsmenu
  do
    echo $i >> ~/.paletterc
  done
  echo "<- Previous=alloywm-menu xappsmenu" >> ~/.paletterc
  $menu_program
;;
"winmanmenu") # Window managers menu
  set -- `pidof $menu_program`
  kill $1
  IFS=","
  for i in $winmanmenu
  do
    echo $i >> ~/.paletterc
  done
  echo "<- Previous=alloywm-menu" >> ~/.paletterc
  $menu_program
;;
"backgroundsmenu") # Backgrounds menu
  set -- `pidof $menu_program`
  kill $1
  IFS=","
  for i in $backgroundsmenu
  do
    echo $i >> ~/.paletterc
  done
  echo "<- Previous=alloywm-menu" >> ~/.paletterc
  $menu_program
;;
esac
IFS=" "

