fluxbox/util/fluxbox-generate_menu
2002-10-19 14:34:08 +00:00

518 lines
15 KiB
Bash
Executable file
Raw Blame History

#!/bin/sh
# generate_menu for Fluxbox
# Copyright (c) 2001-2002 Henrik Kinnunen (fluxgen@linuxmail.org)
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
PATH=/bin:/usr/bin/:/usr/local/bin:/usr/X11R6/bin
# Functions
display_usage() {
cat <<EOF
fluxbox-genrate_menu
Usage: fluxbox-generate_menu [-kg] [-o /path]
[-p /path] [-m menu-title]
Options:
-t Favourite terminal.
-k Insert a kde menu
-g Add a gnome menu
-o Outputfile; default is ~/.fluxbox/menu
-m Menu-title; default is "Fluxbox"
-h Display this help
-a Display the authors of this script
only for packagers:
-p Package-datadir; default is /usr/local/share
EOF
}
display_help() {
cat <<EOF
This program generates a menu-file for fluxbox.
Use fluxbox-generate_menu -h for brief usage instructions
EOF
}
display_authors() {
cat <<EOF
fluxbox-generate_menu was brought to you by:
Henrik Kinnunnen: Project leader.
Han Boetes: Packaging, debugging and scripts.
Jeramy B. Smith: Packaging assistance, gnome and kde menu system.
Xyrnix: Mysterious guest developer who made find_it module.
filipe: Italian locales and find_term module.
EOF
echo -e `whoami`": Innocent bystander.\n"
}
find_it() {
which $1 > /dev/null 2> /dev/null && shift && $*
}
append() {
echo " $*" >> ${FILENAME}
}
append_menu() {
echo "$*" >> ${FILENAME}
}
append_submenu() {
echo >> ${FILENAME}
append_menu "[submenu] ($1)"
}
append_menu_end() {
append_menu "[end]"
echo >> ${FILENAME}
}
menu_entry() {
append "[exec] ("`grep -v GenericName $* | grep Name= | cut -d = -f 2`") \
{"`grep -v TryExec $* | grep Exec= | cut -d = -f 2`"}"
}
menu_entry_dircheck() {
if [ -d "$*" ]; then
menu_entry_dir "$*"
fi
}
menu_entry_dir() {
for b in `ls "$*"/*.desktop 2>/dev/null `; do
menu_entry "${b}"
done
}
# Get options.
while getopts ":khagt:p:o:m:" COMMAND_LINE_ARGUMENT ; do
case "${COMMAND_LINE_ARGUMENT}" in
k) KDEMENU=yes ;;
g) GNOMEMENU=yes ;;
t) MY_TERM=${OPTARG};;
o) FILENAME=${OPTARG} ;;
p) PKGDATADIR=${OPTARG} ;;
m) MENUTITLE=${OPTARG} ;;
h) display_usage ; exit 0 ;;
a) display_authors ; exit 0 ;;
*) display_help ; exit 1 ;;
esac
done
# Set Defaults
# menufile name and make a backup
if [ -z ${FILENAME} ]; then
FILENAME=${HOME}/.fluxbox/menu
fi
if [ ! -z ${FILENAME} ]; then
if [ -w ${FILENAME} ]; then
cp -f ${FILENAME} ${FILENAME}.bak
fi
fi
#packagedatadir
if [ -z "${PKGDATADIR}" ]; then
PKGDATADIR=/usr/share
fi
# menutitle
if [ -z "${MENUTITLE}" ]; then
MENUTITLE="Fluxbox"
fi
# find the default terminal
find_it $MY_TERM
if [ $? -ne 0 ];then
[ -n "$MY_TERM" ] && echo "Warning: you choose an invalid term." > /dev/stderr
#The precise order is up for debate.
for term in Eterm aterm rxvt wterm xterm konsole gnome-terminal; do
if find_it $term; then
DEFAULT_TERM=$term
break
fi
done
else
DEFAULT_TERM=$MY_TERM
fi
# a unix system without any terms. that's odd
if [ -z "$DEFAULT_TERM" ];then
cat <<EOF
Error: I can't find any terminal-emulators in your path.
Please specify your favourite terminal with the -t option.
EOF
exit 1
fi
# menu defaults (if translation forget to set one of them)
BROWSERMENU="Browsers"
EDITORMENU="Editors"
NETMENU="Net"
GRAPHICMENU="Graphics"
MUSICMENU="Music"
DEFAULT_TERMINALMENU="Terminals"
MISCMENU="Misc"
XUTILSMENU="X-utils"
FBSETTINGSMENU="FB-Settings"
KDEMENUTEXT="KDE-menus"
GNOMEMENUTEXT="Gnome-menus"
RESTARTITEM="Restart"
EXITITEM="Exit"
CONFIGUREMENU="Configure"
RELOADITEM="Reload config"
STYLEMENU="Styles"
STYLEMENUTITLE="Choose a style..."
WORKSPACEMENU="Workspace List"
# Check translation
case ${LC_ALL} in
ru_RU) #Russian locales
BROWSERMENU="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
EDITORMENU="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
NETMENU="<22><><EFBFBD><EFBFBD>"
GRAPHICMENU="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
MUSICMENU="<22><><EFBFBD><EFBFBD>"
DEFAULT_TERMINALMENU="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
MISCMENU="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
XUTILSMENU="X-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
FBSETTINGSMENU="FB-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
KDEMENUTEXT="KDE-<2D><><EFBFBD><EFBFBD>"
GNOMEMENUTEXT="Gnome-<2D><><EFBFBD><EFBFBD>"
RESTARTITEM="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
EXITITEM="<22><><EFBFBD><EFBFBD><EFBFBD>"
CONFIGUREMENU="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
RELOADITEM="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
STYLEMENU="<22><><EFBFBD><EFBFBD><EFBFBD>"
STYLEMENUTITLE="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>"
WORKSPACEMENU="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
;;
sv_SE) #Swedish locales
BROWSERMENU="Browsers"
EDITORMENU="Editorer"
NETMENU="Net"
GRAPHICMENU="Grafik"
MUSICMENU="Musik"
DEFAULT_TERMINALMENU="Terminaler"
MISCMENU="Blandat"
XUTILSMENU="X-program"
FBSETTINGSMENU="FB-inst<73>llningar"
KDEMENUTEXT="KDE-menyer"
GNOMEMENUTEXT="Gnome-menyer"
RESTARTITEM="Starta om"
EXITITEM="Exit"
CONFIGUREMENU="Konfiguration"
RELOADITEM="Ladda om konfig"
STYLEMENU="Stiler"
STYLEMENUTITLE="V<>lj en stil"
WORKSPACEMENU="Arbetsytor"
;;
nl_NL) #Nederlandse locales
BROWSERMENU="Browsers"
EDITORMENU="Editors"
NETMENU="Net"
GRAPHICMENU="Grafisch"
MUSICMENU="Muziek"
DEFAULT_TERMINALMENU="Terminals"
MISCMENU="Onregelmatig"
XUTILSMENU="X-utils"
FBSETTINGSMENU="FB-Instellingen"
KDEMENUTEXT="KDE-menu"
GNOMEMENUTEXT="Gnome-menu"
RESTARTITEM="Restart"
EXITITEM="Einde"
CONFIGUREMENU="Instellingen"
RELOADITEM="Vernieuwen"
STYLEMENU="Stylen"
STYLEMENUTITLE="Kies een styl..."
WORKSPACEMENU="Werkveld Lijst"
;;
fi_FI) #Finnish locales
BROWSERMENU="Selaimet"
EDITORMENU="Editorit"
NETMENU="Verkko"
GRAPHICMENU="Grafiikka"
MUSICMENU="Musikki"
DEFAULT_TERMINALMENU="Terminaalit"
MISCMENU="Sekalaista"
XUTILSMENU="X-Ohjelmat"
FBSETTINGSMENU="FB:n Asetukset"
KDEMENUTEXT="KDE:n valikot"
GNOMEMENUTEXT="Gnomen valikot"
RESTARTITEM="K<>ynnist<73> uudelleen"
EXITITEM="Lopeta"
CONFIGUREMENU="Konfigurointi"
RELOADITEM="P<>ivit<69>"
STYLEMENU="Tyylit"
STYLEMENUTITLE="Valitse tyyli"
WORKSPACEMENU="Ty<54>aluet"
;;
ja_JP) #Japanese locales
BROWSERMENU="<22>֥饦<D6A5><E9A5A6>"
EDITORMENU="<22><><EFBFBD>ǥ<EFBFBD><C7A5><EFBFBD>"
NETMENU="<22>ͥåȥ<C8A5><EFA1BC>"
GRAPHICMENU="<22><><EFBFBD><EFBFBD>"
MUSICMENU="<22><><EFBFBD><EFBFBD>"
DEFAULT_TERMINALMENU="<22><><EFBFBD><EFBFBD><EFBFBD>ߥʥ<DFA5>"
MISCMENU="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
XUTILSMENU="X<><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>ƥ<EFBFBD>"
FBSETTINGSMENU="Fluxbox<6F><78><EFBFBD><EFBFBD>"
KDEMENUTEXT="KDE<44><45><EFBFBD>˥塼"
GNOMEMENUTEXT="Gnome<6D><65><EFBFBD>˥塼"
RESTARTITEM="<22>Ƶ<EFBFBD>ư"
EXITITEM="<22><>λ"
CONFIGUREMENU="<22><><EFBFBD><EFBFBD>"
RELOADITEM="<22><><EFBFBD>ɤ߹<C9A4><DFB9><EFBFBD>"
STYLEMENU="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"
STYLEMENUTITLE="<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..."
WORKSPACEMENU="<22><EFBFBD><EFA1BC><EFBFBD><EFBFBD><EFBFBD>ڡ<EFBFBD><DAA1><EFBFBD>"
;;
fr_FR) # french locales
BROWSERMENU="Navigateurs"
EDITORMENU="Editeurs"
NETMENU="Net"
GRAPHICMENU="Graphisme"
MUSICMENU="Musique"
DEFAULT_TERMINALMENU="Terminaux"
MISCMENU="Misc"
XUTILSMENU="X-utils"
FBSETTINGSMENU="FB-Settings"
KDEMENUTEXT="menus-KDE"
GNOMEMENUTEXT="menus-Gnome"
RESTARTITEM="Red<65>marrer"
EXITITEM="Sortir"
CONFIGUREMENU="Configurer"
RELOADITEM="Recharger config"
STYLEMENU="Styles"
STYLEMENUTITLE="Choisir un style..."
WORKSPACEMENU="Liste des bureaux"
;;
it_IT|it_IT@euro) # italian locales
BROWSERMENU="Browsers"
EDITORMENU="Editori"
NETMENU="Internet"
GRAPHICMENU="Grafica"
MUSICMENU="Musica"
DEFAULT_TERMINALMENU="Terminali"
MISCMENU="Varie"
XUTILSMENU="X-utils"
FBSETTINGSMENU="Preferenze"
KDEMENUTEXT="menu KDE"
GNOMEMENUTEXT="menu Gnome"
RESTARTITEM="Riavvia"
EXITITEM="Esci"
CONFIGUREMENU="Configurazione"
RELOADITEM="Rileggi la configurazione"
STYLEMENU="Scegli uno stile..."
STYLEMENUTITLE="Scegli uno stile..."
WORKSPACEMENU="Aree di lavoro"
;;
*)
;;
esac
# Start of menu
echo "[begin] (${MENUTITLE})" > ${FILENAME}
append "[exec] (${DEFAULT_TERM}) {${DEFAULT_TERM}}"
find_it nedit append "[exec] (nedit) {nedit}"
append_submenu ${BROWSERMENU}
find_it netscape append "[exec] (netscape) {netscape}"
find_it opera append "[exec] (opera) {env QT_XFT=true opera}"
find_it galeon append "[exec] (galeon) {galeon}"
find_it mozilla append "[exec] (mozilla) {mozilla}"
find_it konqueror append "[exec] (konqueror) {konqueror}"
find_it links append "[exec] (links) {${DEFAULT_TERM} -title links -e links fluxbox.sf.net}"
find_it w3m append "[exec] (w3m) {${DEFAULT_TERM} -title w3m -e w3m}"
find_it lynx append "[exec] (lynx) {${DEFAULT_TERM} -title lynx -e lynx}"
find_it dillo append "[exec] (dillo) {dillo}"
append_menu_end
append_submenu ${EDITORMENU}
find_it nedit append "[exec] (nedit) {nedit}"
find_it vim append "[exec] (vim) {vim -g}"
find_it xemacs append "[exec] (xemacs) {xemacs}"
find_it emacs append "[exec] (emacs) {emacs}"
find_it gedit append "[exec] (gedit) {gedit}"
find_it xedit append "[exec] (xedit) {xedit}"
find_it kword append "[exec] (kword) {kword}"
find_it kwrite append "[exec] (kwrite) {kwrite}"
find_it kate append "[exec] (kate) {kate}"
append_menu_end
append_submenu ${NETMENU}
find_it realplay append "[exec] (realplayer) {realplay}"
find_it licq append "[exec] (licq) {env QT_XFT=true licq}"
find_it gaim append "[exec] (gaim) {gaim}"
find_it sylpheed append "[exec] (sylpheed) {sylpheed}"
find_it kmail append "[exec] (kmail) {kmail}"
find_it gnomemeeting append "[exec] (gnomemeeting) {gnomemeeting}"
find_it evolution append "[exec] (evolution) {evolution}"
find_it mutt append "[exec] (mutt) {${DEFAULT_TERM} -title mutt -e mutt}"
find_it gftp append "[exec] (gftp) {gftp}"
find_it pan append "[exec] (pan) {pan}"
find_it xchat append "[exec] (xchat) {xchat}"
find_it irssi append "[exec] (irssi) {${DEFAULT_TERM} -title irssi -e irssi}"
find_it BitchX append "[exec] (BitchX) {${DEFAULT_TERM} -title BitchX -e BitchX -N}"
find_it bitchx append "[exec] (BitchX) {${DEFAULT_TERM} -title BitchX -e bitchx -N}"
find_it ircii append "[exec] (ircii) {${DEFAULT_TERM} -title ircii -e ircii -s}"
append_menu_end
append_submenu ${GRAPHICMENU}
find_it gimp append "[exec] (gimp) {gimp}"
find_it gimp-1.3 append "[exec] (gimp 1.3) {gimp-1.3}"
find_it xv append "[exec] (xv) {xv}"
find_it gqview append "[exec] (gqview) {gqview}"
find_it xpaint append "[exec] (xpaint) {xpaint}"
find_it kpaint append "[exec] (kpaint) {kpaint}"
find_it kiconedit append "[exec] (kiconedit) {kiconedit}"
find_it xscreensaver-demo append "[exec] (xscreensaver-demo) {xscreensaver-demo}"
append_menu_end
append_submenu ${MUSICMENU}
find_it xmms append "[exec] (xmms) {xmms}"
find_it gqmpeg append "[exec] (gqmpeg) {gqmpeg}"
find_it xmixer append "[exec] (xmixer) {xmixer}"
find_it gmix append "[exec] (gmix) {gmix}"
find_it kmix append "[exec] (kmix) {kmix}"
find_it grecord append "[exec] (grecord) {grecord}"
find_it kmidi append "[exec] (kmidi) {kmidi}"
find_it xplaycd append "[exec] (xplaycd) {xplaycd}"
find_it soundtracker append "[exec] (soundtracker) {soundtracker}"
find_it cplay append "[exec] (cplay) {${DEFAULT_TERM} -title cplay -e /usr/local/bin/cplay}"
find_it grip append "[exec] (grip) {grip}"
append_menu_end
append_submenu ${DEFAULT_TERMINALMENU}
find_it xterm append "[exec] (xterm) {xterm}"
find_it gnome-terminal append "[exec] (gnome-terminal) {gnome-terminal}"
find_it Eterm append "[exec] (Eterm) {Eterm}"
find_it konsole append "[exec] (konsole) {konsole}"
find_it aterm append "[exec] (aterm) {aterm}"
find_it rxvt append "[exec] (rxvt) {rxvt}"
append_menu_end
append_submenu ${MISCMENU}
find_it acroread append "[exec] (acroread) {acroread}"
find_it xpdf append "[exec] (xpdf) {xpdf}"
find_it xine append "[exec] (xine) {xine}"
find_it aviplay append "[exec] (aviplay) {aviplay}"
find_it gtv append "[exec] (gtv) {gtv}"
find_it xmovie append "[exec] (xmovie) {xmovie}"
find_it xcdroast append "[exec] (xcdroast) {xcdroast}"
find_it gcalc append "[exec] (gcalc) {gcalc}"
find_it kcalc append "[exec] (kcalc) {kcalc}"
find_it kpackage append "[exec] (kpackage) {kpackage}"
find_it xgdb append "[exec] (xgdb) {xgdb}"
find_it ddd append "[exec] (ddd) {ddd}"
find_it ${DEFAULT_TERM} append "[exec] (tail access_log) {${DEFAULT_TERM} -title access_log -e tail -f /var/log/access_log}"
append_menu_end
append_submenu ${XUTILSMENU}
find_it xpenguins append "[exec] (xpenguins) {xpenguins}"
find_it xcalc append "[exec] (xcalc) {xcalc}"
find_it xfontsel append "[exec] (xfontsel) {xfontsel}"
find_it xman append "[exec] (xman) {xman}"
find_it xload append "[exec] (xload) {xload}"
find_it xfig append "[exec] (xfig) {xfig}"
find_it xbiff append "[exec] (xbiff) {xbiff}"
find_it editres append "[exec] (editres) {editres}"
find_it viewres append "[exec] (viewres) {viewres}"
find_it xsnow append "[exec] (xsnow) {xsnow}"
find_it xclock append "[exec] (xclock) {xclock}"
append_menu_end
# gnome menu
if [ -d ${PKGDATADIR}/gnome/apps -a "${GNOMEMENU}" ]; then
append_submenu ${GNOMEMENUTEXT}
for a in `ls ${PKGDATADIR}/gnome/apps`; do
if [ -d ${PKGDATADIR}/gnome/apps/"${a}" ] ; then
append_submenu "${a}"
menu_entry_dir "${PKGDATADIR}/gnome/apps/"${a}""
menu_entry_dircheck "/etc/X11/applnk/"${a}""
append_menu_end
fi
done
append_menu_end
fi
# kde submenu
if [ -d ${PKGDATADIR}/applnk/ -a "${KDEMENU}" ]; then
append_submenu ${KDEMENUTEXT}
for a in `ls ${PKGDATADIR}/applnk/`; do
if [ -d ${PKGDATADIR}/applnk/"${a}" ]; then
append_submenu "${a}"
for x in `ls ${PKGDATADIR}/applnk/"${a}"`; do
if [ -d ${PKGDATADIR}/applnk/"${a}"/"${x}" ]; then
append_submenu "${x}"
menu_entry_dir ${PKGDATADIR}/applnk/"${a}"/"${x}"
append_menu_end
fi
done
menu_entry_dir ${PKGDATADIR}/applnk/"${a}"
append_menu_end
fi
done
menu_entry_dir ${PKGDATADIR}/applnk/
append_menu_end
fi
append_submenu ${FBSETTINGSMENU}
append "[workspaces] (${WORKSPACEMENU})"
append_menu "[submenu] (${STYLEMENU}) {${STYLEMENUTITLE}}"
append "[stylesdir] (~/.fluxbox/styles)"
append "[stylesdir] (${PKGDATADIR}/fluxbox/styles)"
append_menu_end
append "[config] (${CONFIGUREMENU})"
append "[reconfig] (${RELOADITEM})"
find_it fluxconf append "[exec] (Fluxconf) {fluxconf}"
# if gxmessage exitst use it; else use xmessage
find_it gxmessage append "[exec] (Windowname) {xprop|grep WM_CLASS|cut -d \\\" -f 2|gxmessage -file - -center}"
[ $? -ne 0 ] && \
find_it xmessage append "[exec] (Windowname) {xprop|grep WM_CLASS|cut -d \\\" -f 2|xmessage -file - -center}"
append_menu_end
append "[restart] (${RESTARTITEM})"
append "[exit] (${EXITITEM})"
append_menu_end