fvwm-menu-desktop(1) Fvwm Modules fvwm-menu-desktop(1)
NAME
fvwm-menu-desktop - Reads XDG menu files and creates Fvwm menus
SYNOPSIS
fvwm-menu-desktop [
--help|
-h ] [
--version ] [
--install-prefix DIR ] [
--desktop NAME ] [
--menu-type NAME ] [
--theme NAME ] [
--with-titles|
-w ] [
--without-titles ] [
--enable-mini-icons ] [
--size|
-s NUM ] [
--mini-icon-dir DIR ] [
--app-icon NAME ] [
--dir-icon NAME ] [
--title|
-t NAME ] [
--insert-in-menu NAME ] [
--get-menus all|
desktop ] [
--set-menus menu_paths ] [
--all-menus ]
[
--include-items NAME ] [
--regen-cmd CMD ] [
--term-cmd CMD ] [
--dynamic ] [
--menu-error|
-e ] [
--verbose|
-v ]
DESCRIPTION
This is a python script which parses XDG menus definitions to build
corresponding fvwm menus. This script depends on python-xdg to run.
OPTIONS
Main Options
--help Show the help and exit.
--version Show the version and exit.
--get-menus all|
desktop Prints a space separated list of full menu paths found on the
system.
all will print all menus found on the system except
empty ones.
desktop will print the menu(s) that would be
generated by the script.
No menu generation is done.
--desktop NAME Optional parameter to set the
NAME of the desktop XDG .menu
file(s) to use. This option will override any default menus
set via
FvwmForm-XDGMenu-Config and cause the script to find
menus in which
NAME is a part of the file name. Possible
names are:
gnome,
kde,
xfce,
lxde,
debian, etc.
This option can be used in conjunction with
--menu-type to
control which .menu file(s) are used.
--menu-type NAME Optional parameter to set the
NAME of the XDG menu type to
use. This option will override any default menus set via
FvwmForm-XDGMenu-Config and cause the script to find menus in
which
NAME is a part of the file name. Possible
NAME types
could be:
applications,
settings,
preferences, etc.
When used in conjunction with
--desktop, only menus whose file
name matches '*destkop*menutype*' are found. If no menus are
found, the script exits with an error.
--all-menus This option will build all menus found on the system. If used
in conjunction with
--desktop or
--menu-type this will build
all menus matching those settings.
--install-prefix DIR Optional parameter to override the standard locations for XDG
menu definitions. Tells
fvwm-menu-desktop to look in
DIR for
.menu files instead of the standard locations /etc/xdg/menus
(and $HOME/.config/menus if it exists).
--with-titles|
-w If this option is set menus are generated with titles. This is
the default. This option can be used to override the
FvwmForm-XDGMenu-Config default setting.
--without-titles If this option is set menus are generated without titles. The
default is to generate with titles.
--title|
-t NAME Option to define the menu title
NAME of the top menu used by
Fvwm's
Menu or
Popup commands. Default is "XDGMenu".
--include-items NAME This option controls if the additional menu items 'Regenerate'
and 'Configure' are included in the top level menu.
NAME can
be one of
regenerate,
config,
both, or
none. The default is
both.
--regen-cmd CMD This option sets the fvwm command
CMD that is run when the
menu item 'Regenerate' is selected. The default is "PipeRead
`fvwm-menu-desktop`".
--term-cmd CMD This option sets the terminal emulator command
CMD that is
used to to run terminal applications in.
CMD needs to end with
an execute option, such as xterm's -e option, which will run
the command that is appended to
CMD. The default is "xterm
-e".
--dynamic This option is to be used with creating dynamic menus using
DynamicPopUpAction and
DynamicPopDownAction. This adds a
'recreate' to the
DestroyMenu command on the top level menu so
those actions are not Destroyed when the menu is regenerated.
--insert-in-menu NAME Option to insert generated menu(s)
IN a menu
NAME (its top
title). This option makes it so the top level menu is not
Destroyed and the items are added to the end.
Note menus regenerated with this option will append the menu
items at the end of the existing menu. Each time the menu is
regenerated new menu items appear giving a growing menu of
duplicate items. You have to regenerate the whole menu via a
function or restart fvwm. See
EXAMPLES below for some
solutions.
--set-menus menu_paths Generates all menus listed in a space separated list of full
menu paths. This option overrides any defaults and
--desktop|
--menu-type settings.
--menu-error |
-t If this option is present and python-xdg is not found, the
script will print the error in the generated menu. Used in the
default-config.
--verbose Enables additional information printouts on STDERR.
Icons Options
By default, fvwm-menu-desktop builds menus without mini-icons.
To enable mini-icons use the following options.
If ImageMagick is installed on the system, the script will
resize and copy the icons to $FVWM_USERDIR/.icons. This can
take awhile. You should be prepared to wait the first time you
generate the icons. Once the icons have been generated the
script should run faster. If it is still to slow using icons,
see
EXAMPLES for ways to limit how often the menu is generated
to speed things up.
--enable-mini-icons This option enables mini-icons in the menus. If set, 24x24
mini-icons are used. If the specified icon isn't that size it
will be converted if
ImageMagick is installed and saved in
$HOME/.fvwm/icons or to the directory specified with
--mini-icon-dir option. Otherwise no icon appears in the menu
for that entry. With most distributions, all the menu entries
will have mini-icons appropriate to the application.
--theme NAME Defines the used icon theme. Default is
gnome but all others
found in /usr/share/icons could be used except the
hicolor theme because it's the default fallback theme if no icon is
found.
--size|
-s NUM If --enable-mini-icons is used the
size of the icons can
changed with this parameter. Default is 24.
--mini-icon-dir DIR When the right size mini-icon isn't available, fvwm-menu-
desktop creates icons with the right size in
$HOME/.fvwm/icons. If you don't want to use the default
directory, $HOME/.fvwm/icons, use this option to specify a
different folder.
--app-icon NAME Sets the default application icon if no others are found.
Default is 'gnome-applications'.
--dir-icon NAME Sets the default directory icon if no others are found.
Default is 'gnome-fs-directory'.
USAGE
fvwm-menu-desktop outputs XDG .menu files in the syntax of fvwm
menus. When
fvwm-menu-desktop is run with no options, it will load
defaults from the
FvwmForm-XDGMenu-Config file (see below) then
search your system for suitable menu file(s). To see which menus are
available on your system run:
fvwm-menu-desktop --get-menus all
If no menus are found you may not have any installed on your system.
By default menus are stored as *.menu files in /etc/xdg/menus,
$HOME/.config/menus or the location set in $XDG_MENU_PREFIX. You can
use
--install-prefix to specify another location search for menus.
Though a combination of command line options and the
FvwmForm- XDGMenu-Config settings,
fvwm-menu-desktop can generate any
combination of the menus found. To get a list of what menu(s) would
be generated use the
--get-menus desktop option. The following will
list all menus generated if
fvwm-menu-desktop was run with no
options.
fvwm-menu-desktop --get-menus desktop
fvwm-menu-desktop determines which menu(s) to generate as follows
If no config file is found, all menus will be weighted and the
script will generate the best (highest weight) menu found.
If a config file is found (and override options are not used)
the script will generate all menus selected in
FvwmForm- XDGMenu-Config.
--desktop,
--menu-type,
--set-menus and
--all-menus will
override any menus selected in
FvwmForm-XDGMenu-Config.
--desktop and
--menu-type will only include menus whose name
matches '*desktop*menutype*'. If used with
--all-menus, all
matching menus are generated. If used without
--all-menus,
only the highest weighted menu is generated.
--set-menus generates menus from the list of full path menu
file names.
--all-menus by itself will generate all menus found.
By default
fvwm-menu-desktop will generate a menu whose top level
name is "XDGMenu". To tell fvwm to read the output of
fvwm-menu- desktop to create the menu XDGMenu add the following to your fvwm
config file:
PipeRead 'fvwm-menu-desktop'
Warning: Depending on the options used this command may be slow and
fvwm will pause until this command is complete. See
EXAMPLES below
for more details and possible workarounds.
Once the menu is generated you can open the menu by using the command
"Menu XDGMenu". You can also include this in the MenuFvwmRoot menu
by:
AddToMenu MenuFvwmRoot "XDG Menu" Popup XDGMenu
fvwm-menu-desktop can be configured though both command line options
and a
FvwmForm GUI to customize the menu(s) that get generated.
GUI
FvwmForm-XDGMenu-Config is a
FvwmForm interface that can be used to
configure the defaults for
fvwm-menu-desktop. You can access this
from the "Configure" item in the top level menu that is generated or
run the following from within
FvwmConsole Module FvwmPerl -l fvwm-menu-desktop-config.fpl
This form can be used to select which menu(s) get generated by
default along with setting many (but not all) of the available
options. When you click "Save Settings" the form will write a config
file located at $FVWM_USERDIR/.FvwmForm-XDGMenu-Config that
fvwm- menu-desktop will parse for defaults when run.
See the help inside of
FvwmForm-XDGMenu-Config for more information.
EXAMPLES
There are many ways to setup when fvwm runs
fvwm-menu-desktop to
generate the menu. One method is to just generate the menu when fvwm
loads and then use the GUI config tool to change any options. To do
this you only need to add the following to the fvwm config file:
AddToMenu MenuFvwmRoot "XDG Menu" Popup XDGMenu
PipeRead 'fvwm-menu-desktop'
The menu is created once when fvwm loads. Since menu creation can
sometimes be slow, this could cause fvwm to take longer to load than
one wants.
The menu is only generated when fvwm starts. If software is installed
or removed you will have to select the 'Regenerate' option to rebuild
the menu.
One way to speed things up is to save the menu in a file and only
generate the menu when 'Regenerate' is selected. To do this use
--regen-cmd to call a custom function and write the menu to a file
using a command like
fvwm-menu-desktop --regen-cmd XDGRegen > $FVWM_USERDIR/.XDGMenu
Then add the following to the fvwm config file to define the function
XDGRegen. The second to last line will generate the menu if the menu
file doesn't exist when fvwm starts.
DestroyFunc XDGRegen
AddToFunc XDGRegen
+ I PipeRead 'fvwm-menu-desktop --regen-cmd XDGRegen > \
$[FVWM_USERDIR]/.XDGMenu; echo "Nop"'
+ I Read $[FVWM_USERDIR]/.XDGMenu
Test (!f $[FVWM_USERDIR]/.XDGMenu) XDGRegen
Read $[FVWM_USERDIR]/.XDGMenu
Besides creating a top level menu,
fvwm-menu-desktop can insert the
menu into an existing menu using the
--insert-in-menu option. For
example one could create the menu MenuFvwmRoot and include the XDG
items at the end.
DestroyMenu MenuFvwmRoot
AddToMenu MenuFvwmRoot "Fvwm" Title
+ "Item1" Action1
...
+ "ItemN" ActionN
+ "" Nop
PipeRead 'fvwm-menu-desktop --insert-in-menu MenuFvwmRoot'
In this case the menu items are inserted at the end of the
MenuFvwmRoot menu. If no items are in the menu, this menu becomes
MenuFvwmRoot. The problem here is, that you have to restart fvwm or
rebuild the whole menu to Regenerate it because menu items cannot be
removed. To do this you could use a function like
DestroyFunc XDGRegen
AddToFunc XDGRegen
+ I DestroyMenu MenuFvwmRoot
+ I AddToMenu MenuFvwmRoot "Fvwm" Title
+ I AddToMenu MenuFvwmRoot "Item1" Action1
...
+ I AddToMenu MenuFvwmRoot "ItemN" ActionN
+ I AddToMenu MenuFvwmRoot "" Nop
+ I PipeRead 'fvwm-menu-desktop --insert-in-menu MenuFvwmRoot \
--regen-cmd XDGRegen'
Fvwm can also create menus dynamically by using
DynamicPopUpAction and/or
DynamicPopDownAction. These commands when used with a Menu
will run a Function when the menu is opened. For example one could
create the menu XDGMenu when it is opened using
AddToMenu XDGMenu "XDGMenu" Title
+ DynamicPopUpAction PipeRead 'fvwm-menu-desktop'
This will create the menu when it is opened. One issue here is it
will only create the menu the first time it is opened, and you still
have to Regenerate the menu to see any changes. To create the menu
each time it is open used the
--dynamic option
AddToMenu XDGMenu "XDGMenu" Title
+ DynamicPopUpAction PipeRead 'fvwm-menu-desktop \
--dynamic --include-items config'
+ DynamicPopDownAction DestroyMenu recreate XDGMenu
This will now Destroy the menu when it closed so it can be rebuilt
the next time it is opened. The recreate flag doesn't completely
destroy the menu keeping the DynamicPopUpAction and
DynamicPopDownAction actions. The
--dynamic flag includes the
recreate option in the generated menus.
To insert a menu into MenuFvwmRoot and still be dynamic you need to
use a function that generates the whole menu. For example
DestroyFunc GenRootMenu
AddToFunc GenRootMenu
+ I DestroyMenu recreate MenuFvwmRoot
+ I AddToMenu MenuFvwmRoot "Fvwm" Title
+ I AddToMenu MenuFvwmRoot "Item1" Action1
...
+ I AddToMenu MenuFvwmRoot "ItemN" ActionN
+ I AddToMenu MenuFvwmRoot "" Nop
+ PipeRead `fvwm-menu-desktop --insert-in-menu MenuFvwmRoot \
--include-items config`
AddToMenu MenuFvwmRoot "Fvwm" Title
+ DynamicPopUpAction GenRootMenu
+ DynamicPopDownAction DestroyMenu recreate MenuFvwmRoot
BUGS
The whole process of creating menus from files is slow. Otherwise
report bugs to the fvwm-workers mailing list <fvwm-workers@fvwm.org>.
AUTHORS
This script is based on fvwm-xdg-menu.py written by Piotr Zielinski
(http://www.cl.cam.ac.uk/~pz215/) who assigned Licence: GPL 2 Date:
03.12.2005.
The script was reworked to replace the existing fvwm-menu-desktop
perl script by the fvwm-workers.
COPYING
The script is distributed by the same terms as fvwm itself. See GNU
General Public License for details.
3rd Berkeley Distribution 19 October 2022 (2.7.0) fvwm-menu-desktop(1)