|
NAMEfvwm-menu-desktop - Reads XDG menu files and creates Fvwm menusSYNOPSISfvwm-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 ]DESCRIPTIONThis is a python script which parses XDG menus definitions to build corresponding fvwm menus. This script depends on python-xdg to run.OPTIONS
USAGEfvwm-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. GUIFvwmForm-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 FvwmConsoleModule 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. EXAMPLESThere 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 BUGSThe whole process of creating menus from files is slow. Otherwise report bugs to the fvwm-workers mailing list <fvwm-workers@fvwm.org>.AUTHORSThis 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. COPYINGThe script is distributed by the same terms as fvwm itself. See GNU General Public License for details.
Visit the GSP FreeBSD Man Page Interface. |