fluxbox/util/fluxbox-generate_menu
2003-04-09 08:59:03 +00:00

884 lines
26 KiB
Bash
Executable file
Raw Blame History

#!/bin/sh
#
# generate_menu for Fluxbox
#
# Copyright (c) 2002 Han Boetes <han@mijncomputer.nl>
#
# 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.
#
# $Id: fluxbox-generate_menu,v 1.28 2003/04/09 08:59:03 fluxgen Exp $
#
# Portability notes:
# To guarantee this script works on all platforms that support fluxbox
# please keep the following restrictions in mind:
#
# don't use [ -e file ] use [ -r file ]
# don't use $(), use ``
# don't use ~, use ${HOME}
# don't use id -u, use whoami
# getopts won't work on all platforms, but the config-file can
# compensate for that.
#
WHOAMI=`whoami`
[ "$WHOAMI" = "root" ] && PATH=/bin:/usr/bin/:/usr/local/bin:/usr/X11R6/bin
# Functions
display_usage() {
cat <<EOF
Usage: fluxbox-generate_menu [-kgrB] [-t terminal] [-w url] [-b browser]
[-m menu-title] [-p /path] [-n /path] [-q /path] [-o /path] [-u /path]
EOF
}
display_help() {
display_usage
cat <<EOF
Options:
-k Insert a kde menu
-g Add a gnome menu
-B enable backgroundmenu
-r Don't remove empty menu-entries; for templates.
-m Menu-title; default is "Fluxbox"
-o Outputfile; default is ~/.fluxbox/menu
-t Favourite terminal
-b Favourite browser
-w Homepage for console-browsers. Default is fluxbox.org.
-u user sub-menu; default is ~/.fluxbox/usermenu
-h Display this help
-a Display the authors of this script
Only for packagers:
-p Package-datadir; default is /usr/share
-n Gnome-datadir; default is Package-datadir
-q KDE-datadir; default is Package-datadir
Files:
~/.fluxbux/usermenu your own submenu which will be included in the menu
~/.fluxbox/menuconfig rc file for fluxbox-generate_menu
EOF
}
display_authors() {
cat <<EOF
fluxbox-generate_menu was brought to you by:
Henrik Kinnunen: Project leader.
Han Boetes: Packaging, debugging and scripts.
Jeramy B. Smith: Packaging assistance, gnome and kde menu system.
Filippo Pappalardo: Italian locales and -t option.
Simon Bowden: Cleanups and compatibility for sun.
$WHOAMI: Innocent bystander.
EOF
}
# ugly code for solaris compat.
find_it() {
file=`which $1 2> /dev/null`
if [ -x "$file" ]; then
if [ $# -gt 1 ]; then
shift
$*
fi
return 0
else
return 1
fi
}
append() {
echo " $*" >> ${FILENAME}
}
append_menu() {
echo "$*" >> ${FILENAME}
}
append_submenu() {
[ "${REMOVE}" ] && echo >> ${FILENAME} # only an empty line in templates
append_menu "[submenu] ($1)"
}
append_menu_end() {
append_menu "[end]"
[ "${REMOVE}" ] && echo >> ${FILENAME} # only an empty line in templates
}
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
}
normal_find() {
while [ "$1" ]; do
find_it $1 append "[exec] ($1) {$1}"
shift
done
}
clean_up() {
# -e "/^$/d" -e "/^$/d"
cat ${FILENAME} | sed -e "/^\[submenu]/{
N
/^\[submenu].*\n\[end]/d
}" > ${FILENAME}.tmp
mv -f ${FILENAME}.tmp ${FILENAME}
}
# menu defaults (if translation forget to set one of them)
BACKGROUNDMENU='Backgrounds'
BACKGROUNDMENUTITLE='Set the Background'
BROWSERMENU='Browsers'
CONFIGUREMENU='Configure'
EDITORMENU='Editors'
EXITITEM='Exit'
FBSETTINGSMENU='fluxbox menu'
FILEUTILSMENU='File utils'
GAMESMENU='Games'
GNOMEMENUTEXT='Gnome-menus'
GRAPHICMENU='Graphics'
KDEMENUTEXT='KDE-menus'
MISCMENU='Misc'
MULTIMEDIAMENU='Multimedia'
MUSICMENU='Music'
NETMENU='Net'
OFFICEMENU='Office'
RELOADITEM='Reload config'
RESTARTITEM='Restart'
STYLEMENUTITLE='Choose a style...'
SYSTEMSTYLES='System Styles'
TERMINALMENU='Terminals'
USERSTYLES='User Styles'
WORKSPACEMENU='Workspace List'
XUTILSMENU='X-utils'
# Check translation
case ${LC_ALL} in
ru_RU*) #Russian locales
#BACKGROUNDMENU='Backgrounds'
#BACKGROUNDMENUTITLE='Set the Background'
#FILEUTILSMENU='File utils'
#OFFICEMENU='Office'
#SYSTEMSTYLES='<27><><EFBFBD><EFBFBD><EFBFBD>'
#USERSTYLES='<27><><EFBFBD><EFBFBD><EFBFBD>'
BROWSERMENU='<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
CONFIGUREMENU='<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
EDITORMENU='<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
EXITITEM='<27><><EFBFBD><EFBFBD><EFBFBD>'
FBSETTINGSMENU='FB-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
GNOMEMENUTEXT='Gnome-<2D><><EFBFBD><EFBFBD>'
GRAPHICMENU='<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
KDEMENUTEXT='KDE-<2D><><EFBFBD><EFBFBD>'
MISCMENU='<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
MUSICMENU='<27><><EFBFBD><EFBFBD>'
NETMENU='<27><><EFBFBD><EFBFBD>'
RELOADITEM='<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
RESTARTITEM='<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
STYLEMENUTITLE='<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>'
TERMINALMENU='<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
WORKSPACEMENU='<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
XUTILSMENU='X-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
;;
de_DE*) # german locales
BACKGROUNDMENU='Hintergrundbilder'
BACKGROUNDMENUTITLE='Hintergrundbild setzen'
BROWSERMENU='Internet-Browser'
CONFIGUREMENU='Einstellungen'
EDITORMENU='Editoren'
EXITITEM='Beenden'
FBSETTINGSMENU='Fluxbox-Einstellungen'
FILEUTILSMENU='Datei-Utilities'
GNOMEMENUTEXT='Gnome-Menues'
GRAPHICMENU='Grafik'
KDEMENUTEXT='Kde-Menues'
MISCMENU='Sonstiges'
MUSICMENU='Musik'
NETMENU='Netzwerk'
OFFICEMENU='Bueroprogramme'
RELOADITEM='Konfiguration neu laden'
RESTARTITEM='Neustarten'
STYLEMENUTITLE='Einen Stil auswaehlen...'
SYSTEMSTYLES='Systemweite Stile'
TERMINALMENU='Terminals'
USERSTYLES='Eigene Stile'
WORKSPACEMENU='Arbeitsflaechenliste'
XUTILSMENU='X-Anwendungen'
;;
sv_SE*) #Swedish locales
#BACKGROUNDMENU='Backgrounds'
#BACKGROUNDMENUTITLE='Set the Background'
#FILEUTILSMENU='File utils'
#OFFICEMENU='Office'
#SYSTEMSTYLES='Stiler'
#USERSTYLES='Stiler'
BROWSERMENU='Browsers'
CONFIGUREMENU='Konfiguration'
EDITORMENU='Editorer'
EXITITEM='Exit'
FBSETTINGSMENU='FB-inst<73>llningar'
GNOMEMENUTEXT='Gnome-menyer'
GRAPHICMENU='Grafik'
KDEMENUTEXT='KDE-menyer'
MISCMENU='Blandat'
MUSICMENU='Musik'
NETMENU='Net'
RELOADITEM='Ladda om konfig'
RESTARTITEM='Starta om'
STYLEMENUTITLE='V<>lj en stil'
TERMINALMENU='Terminaler'
WORKSPACEMENU='Arbetsytor'
XUTILSMENU='X-program'
;;
nl_NL*) #Nederlandse locales
BACKGROUNDMENU='Achtergrond'
BACKGROUNDMENUTITLE='Kies een achtergrond'
BROWSERMENU='Browsers'
CONFIGUREMENU='Instellingen'
EDITORMENU='Editors'
EXITITEM='Afsluiten'
FBSETTINGSMENU='FB-Instellingen'
FILEUTILSMENU='Verkenners'
GNOMEMENUTEXT='Gnome-menu'
GRAPHICMENU='Grafisch'
KDEMENUTEXT='KDE-menu'
MISCMENU='Onregelmatig'
MUSICMENU='Muziek'
NETMENU='Net'
OFFICEMENU='Office'
RELOADITEM='Vernieuw instellingen'
RESTARTITEM='Restart'
STYLEMENUTITLE='Kies een styl'
SYSTEMSTYLES='Systeem Stylen'
TERMINALMENU='Terminals'
USERSTYLES='Gebruikers Stylen'
WORKSPACEMENU='Werkveld Lijst'
XUTILSMENU='X-utils'
;;
fi_FI*) #Finnish locales
#BACKGROUNDMENU='Backgrounds'
#BACKGROUNDMENUTITLE='Set the Background'
#FILEUTILSMENU='File utils'
#OFFICEMENU='Office'
#SYSTEMSTYLES='Tyylit'
#USERSTYLES='Tyylit'
BROWSERMENU='Selaimet'
CONFIGUREMENU='Konfigurointi'
EDITORMENU='Editorit'
EXITITEM='Lopeta'
FBSETTINGSMENU='FB:n Asetukset'
GNOMEMENUTEXT='Gnomen valikot'
GRAPHICMENU='Grafiikka'
KDEMENUTEXT='KDE:n valikot'
MISCMENU='Sekalaista'
MUSICMENU='Musikki'
NETMENU='Verkko'
RELOADITEM='P<>ivit<69>'
RESTARTITEM='K<>ynnist<73> uudelleen'
STYLEMENUTITLE='Valitse tyyli'
TERMINALMENU='Terminaalit'
WORKSPACEMENU='Ty<54>aluet'
XUTILSMENU='X-Ohjelmat'
;;
ja_JP*) #Japanese locales
#BACKGROUNDMENU='Backgrounds'
#BACKGROUNDMENUTITLE='Set the Background'
#FILEUTILSMENU='File utils'
#OFFICEMENU='Office'
#SYSTEMSTYLES='<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
#USERSTYLES='<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
BROWSERMENU='<27>֥饦<D6A5><E9A5A6>'
CONFIGUREMENU='<27><><EFBFBD><EFBFBD>'
EDITORMENU='<27><><EFBFBD>ǥ<EFBFBD><C7A5><EFBFBD>'
EXITITEM='<27><>λ'
FBSETTINGSMENU='Fluxbox<6F><78><EFBFBD><EFBFBD>'
GNOMEMENUTEXT='Gnome<6D><65><EFBFBD>˥塼'
GRAPHICMENU='<27><><EFBFBD><EFBFBD>'
KDEMENUTEXT='KDE<44><45><EFBFBD>˥塼'
MISCMENU='<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
MUSICMENU='<27><><EFBFBD><EFBFBD>'
NETMENU='<27>ͥåȥ<C8A5><EFA1BC>'
RELOADITEM='<27><><EFBFBD>ɤ߹<C9A4><DFB9><EFBFBD>'
RESTARTITEM='<27>Ƶ<EFBFBD>ư'
STYLEMENUTITLE='<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...'
TERMINALMENU='<27><><EFBFBD><EFBFBD><EFBFBD>ߥʥ<DFA5>'
WORKSPACEMENU='<27><EFBFBD><EFA1BC><EFBFBD><EFBFBD><EFBFBD>ڡ<EFBFBD><DAA1><EFBFBD>'
XUTILSMENU='X<><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>ƥ<EFBFBD>'
;;
fr_FR*) # french locales
#BACKGROUNDMENU='Backgrounds'
#BACKGROUNDMENUTITLE='Set the Background'
#FILEUTILSMENU='File utils'
#OFFICEMENU='Office'
#SYSTEMSTYLES='Styles de la Systeme'
#USERSTYLES='Styles de la '
BROWSERMENU='Navigateurs'
CONFIGUREMENU='Configurer'
EDITORMENU='Editeurs'
EXITITEM='Sortir'
FBSETTINGSMENU='FB-Settings'
GNOMEMENUTEXT='menus-Gnome'
GRAPHICMENU='Graphisme'
KDEMENUTEXT='menus-KDE'
MISCMENU='Misc'
MUSICMENU='Musique'
NETMENU='Net'
RELOADITEM='Recharger config'
RESTARTITEM='Red<65>marrer'
STYLEMENUTITLE='Choisir un style...'
TERMINALMENU='Terminaux'
WORKSPACEMENU='Liste des bureaux'
XUTILSMENU='X-utils'
;;
it_IT*) # italian locales
#BACKGROUNDMENU='Backgrounds'
#BACKGROUNDMENUTITLE='Set the Background'
#FILEUTILSMENU='File utils'
#OFFICEMENU='Office'
#SYSTEMSTYLES='Stile'
#USERSTYLES='Stile'
BROWSERMENU='Browsers'
CONFIGUREMENU='Configurazione'
EDITORMENU='Editori'
EXITITEM='Esci'
FBSETTINGSMENU='Preferenze'
GAMESMENU='Giochi'
GNOMEMENUTEXT='Gnome'
GRAPHICMENU='Grafica'
KDEMENUTEXT='KDE'
MISCMENU='Varie'
MUSICMENU='Musica'
NETMENU='Internet'
RELOADITEM='Rileggi la configurazione'
RESTARTITEM='Riavvia'
STYLEMENUTITLE='Scegli uno stile'
TERMINALMENU='Terminali'
WORKSPACEMENU='Aree di lavoro'
XUTILSMENU='X-utils'
;;
ro_RO*) # Romanian locales
#FILEUTILSMENU='File utils'
#OFFICEMENU='Office'
#RESTARTITEM='Restart'
BACKGROUNDMENU='Fundaluri'
BACKGROUNDMENUTITLE='Alege fundalul'
BROWSERMENU='Navigatoare'
CONFIGUREMENU='Configurare'
EDITORMENU='Editoare'
EXITITEM='Iesire'
FBSETTINGSMENU='Meniul Fluxbox'
GAMESMENU='Jocuri'
GNOMEMENUTEXT='Meniu Gnome'
GRAPHICMENU='Grafica'
KDEMENUTEXT='Meniu KDE'
MISCMENU='Diverse'
MULTIMEDIAMENU='Multimedia'
MUSICMENU='Muzica'
NETMENU='Net'
RELOADITEM='Reincarca configuratia'
STYLEMENUTITLE='Alege un stil...'
SYSTEMSTYLES='Stiluri sistem'
TERMINALMENU='Terminale'
USERSTYLES='Stiluri utilizator'
WORKSPACEMENU='Lista workspace-uri'
XUTILSMENU='Utilitare X'
;;
es_ES*) # spanish locales
#FILEUTILSMENU='File utils'
BACKGROUNDMENU='Fondos'
BACKGROUNDMENUTITLE='Seleccionar Fondo'
BROWSERMENU='Navegadores'
CONFIGUREMENU='Configurar'
EDITORMENU='Editores'
EXITITEM='Salir'
FBSETTINGSMENU='Men<65> fluxbox'
GAMESMENU='Juegos'
GNOMEMENUTEXT='Men<65>s Gnome'
GRAPHICMENU='Gr<47>ficos'
KDEMENUTEXT='Men<65>s KDE'
MISCMENU='Varios'
MULTIMEDIAMENU='Multimedia'
MUSICMENU='M<>sica'
NETMENU='Red'
OFFICEMENU='Oficina'
RELOADITEM='Reconfigurar'
RESTARTITEM='Reiniciar'
STYLEMENUTITLE='Escoge un Estilo...'
SYSTEMSTYLES='Estilos del Sistema'
TERMINALMENU='Terminales'
USERSTYLES='Estilos del Usuario'
WORKSPACEMENU='Lista de Escritorios'
XUTILSMENU='Utilidades X'
;;
pl_PL*) # Polish locales
#FILEUTILSMENU='File utils'
BACKGROUNDMENU='Tapety'
BACKGROUNDMENUTITLE='Ustaw tapet?'
BROWSERMENU='Przegl?darki'
CONFIGUREMENU='Konfiguracja'
EDITORMENU='Edytory'
EXITITEM='Wyj?cie'
FBSETTINGSMENU='Menu Fluxbox'
GAMESMENU='Gry'
GNOMEMENUTEXT='Menu Gnome'
GRAPHICMENU='Grafika'
KDEMENUTEXT='Menu KDE'
MISCMENU='R<>?ne'
MULTIMEDIAMENU='Multimedia'
MUSICMENU='Muzyka'
NETMENU='Sie?'
OFFICEMENU='Aplikacje biurowe'
RELOADITEM='Od?wie? konfiguracj?'
RESTARTITEM='Restart'
STYLEMENUTITLE='Wybierz styl...'
SYSTEMSTYLES='Style systemowe'
TERMINALMENU='Terminale'
USERSTYLES='Style u?ytkownika'
WORKSPACEMENU='Lista pulpit<69>w'
XUTILSMENU='Narz?dzia X'
;;
*)
;;
esac
# Set Defaults
FILENAME="${HOME}/.fluxbox/menu"
MENUTITLE="Fluxbox"
HOMEPAGE="fluxbox.org"
USERMENU="${HOME}/.fluxbox/usermenu"
# Read the menuconfig file if it exists or else create it.
if [ -r ${HOME}/.fluxbox/menuconfig ];then
. ${HOME}/.fluxbox/menuconfig
else
if [ ! "$WHOAMI" = root ];then # this is only for users.
cat<<EOF> ${HOME}/.fluxbox/menuconfig
# This file is read by fluxbox-generate_menu. If you don't like a
# default you can change it here. Don't forget to remove the # in front
# of the line.
# Your favourite terminal
# MY_TERM=aterm
# Your favourite browser
# MY_BROWSER=mozilla
# Name of the outputfile
# FILENAME=${HOME}/.fluxbox/menu
# Data-dir
# PKGDATADIR=/usr/share
# Gnome data-dir
# in case gnome is installed in another datadir.
# GPKGDATADIR=/opt/gnome/share
# Kde data-dir
# KPKGDATADIR=/opt/kde/share
# MENUTITLE=\`fluxbox -version|cut -d " " -f-2\`
# standard url for console-browsers
# HOMEPAGE=fluxbox.org
# location with your own menu-entries
# USERMENU=~/.fluxbox/usermenu
# Boolean variables.
# Setting a variable to no won't help. Comment them out if you don't want them.
# Setting are overruled by the command-line options.
# Include all backgrounds in your backgrounds-directory
# BACKGROUNDMENUITEM=yes
# Include kde-menus
# KDEMENU=yes
# Include gnome-menus
# GNOMEMENU=yes
# Don't cleanup the menu
# REMOVE=no
EOF
fi
fi
# Get options.
while getopts ":Bkhragb:t:p:w:u:n:q:o:m:" COMMAND_LINE_ARGUMENT ; do
case "${COMMAND_LINE_ARGUMENT}" in
B) BACKGROUNDMENUITEM=yes ;;
k) KDEMENU=yes ;;
g) GNOMEMENU=yes ;;
t) MY_TERM=${OPTARG} ;;
b) MY_BROWSER=${OPTARG} ;;
o) FILENAME=${OPTARG} ;;
p) PKGDATADIR=${OPTARG} ;;
n) GPKGDATADIR=${OPTARG} ;;
q) KPKGDATADIR=${OPTARG} ;;
m) MENUTITLE=${OPTARG} ;;
w) HOMEPAGE=${OPTARG} ;;
u) USERMENU=${OPTARG} ;;
r) REMOVE=no ;;
h) display_help ; exit 0 ;;
a) display_authors ; exit 0 ;;
*) display_usage ; exit 1 ;;
esac
done
# Check defaults
# Can we actually create ${FILENAME}
touch ${FILENAME} 2> /dev/null
if [ $? -ne 0 ] ; then
echo "Fatal error: can't create $FILENAME" >&2
exit 1
fi
# backup menu
if [ -w "${FILENAME}" ]; then
if [ -f ${FILENAME}.firstbak ];then
cp ${FILENAME} ${FILENAME}.firstbak
fi
mv ${FILENAME} ${FILENAME}.bak
fi
# packagedatadir
if [ ! -d "${PKGDATADIR}" -o -z "${PKGDATADIR}" ]; then
if [ "`uname`" = "Linux" ];then
PKGDATADIR=/usr/share
else
PKGDATADIR=/usr/local/share
fi
fi
# gnome packagedatadir
if [ ! -d "${GPKGDATADIR}" -o -z "${GPKGDATADIR}" ]; then
GPKGDATADIR=${PKGDATADIR}
fi
# kde packagedatadir
if [ ! -d "${KPKGDATADIR}" -o -z "${KPKGDATADIR}" ]; then
KPKGDATADIR=${PKGDATADIR}
fi
# find the default terminal
find_it $MY_TERM
if [ $? -ne 0 ];then
[ -n "$MY_TERM" ] && echo "Warning: you chose an invalid term." >&2
#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
# find the default browser
find_it $MY_BROWSER
if [ $? -ne 0 ];then
[ -n "$MY_BROWSER" ] && echo "Warning: you chose an invalid browser." >&2
#The precise order is up for debate.
for browser in opera skipstone phoenix mozilla galeon konqueror dillo netscape links w3m lynx; do
if find_it $browser; then
DEFAULT_BROWSER=$browser
break
fi
done
else
DEFAULT_BROWSER=$MY_BROWSER
fi
# a unix system without any terms. that's odd
if [ -z "$DEFAULT_TERM" ];then
cat <<EOF>&2
Warning: I can't find any terminal-emulators in your PATH.
Please fix your PATH or specify your favourite terminal with the -t option
EOF
fi
# Start of menu
cat << EOF > ${FILENAME}
# Generated by fluxbox-genereate_menu
#
# If you read this it means you want to edit this file manualy, so here
# are some usefull tips:
#
# - You can add your own menu-entries to ~/.fluxbox/usermenu
#
# - If you miss apps please let me know and I will add them for the next
# release.
#
# - The -r option prevents removing of empty menu entries and lines which
# makes things much more readable.
#
# - To prevent any other app from overwriting your menu
# you can change the menu name in .fluxbox/init to:
# session.menuFile: /home/you/.fluxbox/my-menu
EOF
echo "[begin] (${MENUTITLE})" >> ${FILENAME}
append "[exec] (${DEFAULT_TERM}) {${DEFAULT_TERM}}"
case "$DEFAULT_BROWSER" in
links|w3m|lynx) append "[exec] (${DEFAULT_BROWSER}) {${DEFAULT_TERM} -e ${DEFAULT_BROWSER} ${HOMEPAGE}}" ;;
mozilla|phoenix|galeon|dillo|netscape) append "[exec] (${DEFAULT_BROWSER}) {${DEFAULT_BROWSER}}" ;;
konqueror) append "[exec] (konqueror) {kfmclient openProfile webbrowsing}" ;;
opera) append "[exec] (opera) {env QT_XFT=true opera}" ;;
esac
find_it fbrun append "[exec] (Run) {fbrun}"
append_submenu "${TERMINALMENU}"
normal_find xterm gnome-terminal Eterm konsole aterm rxvt
append_menu_end
append_submenu "${NETMENU}"
append_submenu "${BROWSERMENU}"
normal_find netscape galeon mozilla dillo
find_it opera append "[exec] (opera) {env QT_XFT=true opera}"
find_it konqueror append "[exec] (konqueror) {kfmclient openProfile webbrowsing}"
find_it links append "[exec] (links) {${DEFAULT_TERM} -e links ${HOMEPAGE}}"
find_it w3m append "[exec] (w3m) {${DEFAULT_TERM} -e w3m ${HOMEPAGE}}"
find_it lynx append "[exec] (lynx) {${DEFAULT_TERM} -e lynx ${HOMEPAGE}}"
append_menu_end
append_submenu IM
normal_find gaim kopete gnomemeeting
find_it licq append "[exec] (licq) {env QT_XFT=true licq}"
append_menu_end
append_submenu Mail
normal_find sylpheed kmail evolution
find_it mutt append "[exec] (mutt) {${DEFAULT_TERM} -e mutt}"
append_menu_end
append_submenu IRC
normal_find xchat ksirc
find_it irssi append "[exec] (irssi) {${DEFAULT_TERM} -e irssi}"
find_it BitchX append "[exec] (BitchX) {${DEFAULT_TERM} -e BitchX -N}" || \
find_it bitchx append "[exec] (BitchX) {${DEFAULT_TERM} -e bitchx -N}"
find_it ircii append "[exec] (ircii) {${DEFAULT_TERM} -e ircii -s}"
append_menu_end
append_submenu P2P
normal_find gtk-gnutella lopster
append_menu_end
normal_find gftp pan
append_menu_end
append_submenu "${EDITORMENU}"
normal_find nedit gvim xemacs emacs gedit xedit kword kwrite kate
append_menu_end
append_submenu "${FILEUTILSMENU}"
normal_find konqueror
find_it nautilus append "[exec] (nautilus) {nautilus --no-desktop}"
find_it mc append "[exec] (mc) {${DEFAULT_TERM} -e mc}"
append_menu_end
append_submenu "${MULTIMEDIAMENU}"
append_submenu "${GRAPHICMENU}"
normal_find gimp xv gqview xpaint kpaint kiconedit xscreensaver-demo
find_it gears append "[exec] (Mesa gears) {gears}"
find_it morph3d append "[exec] (Mesa morph) {morph3d}"
find_it reflect append "[exec] (Mesa reflect) {reflect}"
append_menu_end
append_submenu "${MUSICMENU}"
normal_find xmms noatun alsaplayer gqmpeg aumix xmixer gmix kmix grecord \
kmidi xplaycd soundtracker grip easytag audacity zinf
find_it cdcd append "[exec] (cdcd) {${DEFAULT_TERM} -e cdcd}"
find_it cplay append "[exec] (cplay) {${DEFAULT_TERM} -e cplay}"
find_it alsamixer append "[exec] (AlsaMixer) {${DEFAULT_TERM} -e alsamixer}"
append_menu_end
append_submenu "${MISCMENU}"
normal_find xine aviplay gtv gmplayer xmovie xcdroast xgdb ddd realplay
find_it dvdrip append "[exec] (dvdrip) {nohup dvdrip}"
append_menu_end
append_submenu "${XUTILSMENU}"
normal_find xfontsel xman xload xfigxbiff editres viewres xclock xmag
append_menu_end
append_menu_end
append_submenu "${OFFICEMENU}"
normal_find xclock xcalc kcalc
find_it gcalc append "[exec] (gcalc) {gcalc}" || \
find_it gnome-calculator append "[exec] (gcalc) {gnome-calculator}"
find_it ooffice append "[exec] (Open Office) {ooffice}"
find_it soffice append "[exec] (Star Office) {soffice}"
normal_find abiword kword wordperfect katoob acroread xpdf
append_menu_end
append_submenu "${GAMESMENU}"
normal_find bzflag gnibbles gnobots2 tuxpuck gataxx glines \
gnect mahjongg gnomine gnome-stones gnometris gnotravex \
gnotski iagno knights eboard xboard freecell pysol \
gtali tuxracer xpenguins xsnow xeyes xpenguins \
quake2 quake3 skoosh same-gnome enigma xbill
append_menu_end
# gnome menu
if [ -d ${GPKGDATADIR}/gnome/apps -a "${GNOMEMENU}" ]; then
append_submenu "${GNOMEMENUTEXT}"
for a in `ls ${GPKGDATADIR}/gnome/apps/` ; do
if [ -d ${GPKGDATADIR}/gnome/apps/"${a}" ] ; then
append_submenu "${a}"
menu_entry_dir "${GPKGDATADIR}/gnome/apps/${a}"
menu_entry_dircheck "/etc/X11/applnk/${a}"
append_menu_end
fi
done
append_menu_end
fi
# kde submenu
if [ -d ${KPKGDATADIR}/applnk/ -a "${KDEMENU}" ]; then
append_submenu "${KDEMENUTEXT}"
for a in `ls ${KPKGDATADIR}/applnk/` ; do
if [ -d ${KPKGDATADIR}/applnk/"${a}" ]; then
append_submenu "${a}"
for x in ${KPKGDATADIR}/applnk/"${a}"/*; do
if [ -d ${KPKGDATADIR}/applnk/"${a}"/"${x}" ]; then
append_submenu "${x}"
menu_entry_dir ${KPKGDATADIR}/applnk/"${a}"/"${x}"
append_menu_end
fi
done
menu_entry_dir ${KPKGDATADIR}/applnk/"${a}"
append_menu_end
fi
done
menu_entry_dir ${KPKGDATADIR}/applnk/
append_menu_end
fi
#User menu
if [ -r "${USERMENU}" ];then
cat ${USERMENU} >> ${FILENAME}
fi
append_submenu "${FBSETTINGSMENU}"
append "[config] (${CONFIGUREMENU})"
append_menu "[submenu] (${SYSTEMSTYLES}) {${STYLEMENUTITLE}}"
append "[stylesdir] (${PKGDATADIR}/fluxbox/styles)"
append_menu_end
append_menu "[submenu] (${USERSTYLES}) {${STYLEMENUTITLE}}"
append "[stylesdir] (~/.fluxbox/styles)"
append_menu_end
# Backgroundmenu
if [ "$BACKGROUNDMENUITEM" = "yes" ];then
append_menu "[submenu] (${BACKGROUNDMENU}) {${BACKGROUNDMENUTITLE}}"
if [ `ls -1 ${HOME}/.fluxbox/backgrounds 2>/dev/null |wc -l` -gt 30 ]; then
menucounter=1 ; counter=1
append_menu "[submenu] (${BACKGROUNDMENU} $menucounter) {${BACKGROUNDMENUTITLE}}"
for i in ${HOME}/.fluxbox/backgrounds/* ${PKGDATADIR}/fluxbox/backgrounds/* ; do
counter=`expr $counter + 1`
if [ $counter -eq 30 ];then
counter=1
menucounter=`expr $menucounter + 1`
append_menu_end
append_menu "[submenu] (${BACKGROUNDMENU} $menucounter) {${BACKGROUNDMENUTITLE}}"
fi
picturename=`basename "$i"`
append "[exec] (${picturename%.???}) {bsetbg -f \"$i\" }"
done
append_menu_end
else
for i in ${HOME}/.fluxbox/backgrounds/* ${PKGDATADIR}/fluxbox/backgrounds/* ; do
picturename=`basename "$i"`
append "[exec] (${picturename%.???}) {bsetbg -f \"$i\" }"
done
fi
append_menu_end
fi
append "[workspaces] (${WORKSPACEMENU})"
append_submenu Tools
normal_find fluxconf fluxkeys fluxmenu
# 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}" || \
find_it xmessage append \
"[exec] (Windowname) {xprop|grep WM_CLASS|cut -d \\\" -f 2|xmessage -file - -center}"
find_it import append "[exec] (screenshot) {import screenshot.png && qiv -W 50 screenshot.png}"
find_it fbrun append "[exec] (Run) {fbrun}"
find_it fluxbox-generate_menu append "[exec] (Regen menu) {fluxbox-generate_menu}"
append_menu_end
append "[reconfig] (${RELOADITEM})"
append "[restart] (${RESTARTITEM})"
append "[exit] (${EXITITEM})"
append_menu_end
append_menu_end
# this function removes empty menu items. It can not yet remove nested
# empty submenus :\
if [ ! "${REMOVE}" ];then
clean_up
fi
echo 'Menu succesfully generated.'
echo 'Use fluxbox-generate_menu -h to read all about the latest features.'