diff --git a/README.md b/README.md index 4666b14..0b7c15b 100644 --- a/README.md +++ b/README.md @@ -206,4 +206,44 @@ updated. The upside is that the menu will not be generated every time you access the menu. This might be a better choice for (really) older hardware. +Compiz Boxmenu +============== +There are two ways to have an xdg menu in compiz-boxmenu. The first one, +auto-updates the menu, every time the menu is called. The second one, +updates the menu only when the user wants to. + +Also, keep in mind that Compiz Boxmenu supports multiple formats. Thus + +Dynamic Menus +------------- +Edit your `~/.config/compiz/boxmenu/menu.xml` file with your favorite text +editor and add a block of code like this inside the root `` element: + +~~~ + + xdgmenumaker -nif compizboxmenu + applications + Applications + +~~~ + +Alternatively, you can also run `compiz-boxmenu-editor` and click the +dropdown for new menu files or menu items. Select launcher to create a +new launcher. Set the name of the launcher to whatever you want. This will +be the display name for the pipe menu. Then enter in +`xdgmenumaker -nif compizboxmenu` for the command entry. Click the combobox +next to the command text box and switch that to "Pipe". + + +Static Menus +------------ +Edit your `~/.config/compiz/boxmenu/menu.xml` file with your favorite text +editor and paste the output of `xdgmenumaker -if compizboxmenu` into +`~/.config/compiz/boxmenu/menu.xml`. + +Alternatively, you can also run `compiz-boxmenu-editor` and click the +button that says `Generate menu entries from a pipemenu script`. In the dialog +box that pops up, type in `xdgmenumaker -if compizboxmenu` or +`xdgmenumaker -nif compizboxmenu` to append the statically generated +menu to any menu file you want. diff --git a/src/xdgmenumaker b/src/xdgmenumaker index 9ac99b6..ad9df36 100755 --- a/src/xdgmenumaker +++ b/src/xdgmenumaker @@ -26,7 +26,7 @@ pekwmdynamic = False # for them, where they should be if this was installed properly prefix = 'not_set' if prefix == 'not_set': - desktop_dir = '../desktop-directories/' + desktop_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'desktop-directories/') else: desktop_dir = prefix + '/share/desktop-directories/' @@ -188,6 +188,8 @@ def main(argv): pekwmmenu() elif desktop == "jwm": jwmmenu() + elif desktop == "compizboxmenu": + compizboxmenu() else: usage() sys.exit(2) @@ -235,7 +237,7 @@ def icon_full_path(icon): return icon -def get_entry_info(desktopfile): +def get_entry_info(desktopfile, ico_paths=True): de = dentry.DesktopEntry(filename=desktopfile) # skip processing the rest of the desktop entry if the item is to not be @@ -257,7 +259,8 @@ def get_entry_info(desktopfile): if seticon: # strip the directory and extension from the icon name icon = de.getIcon() - icon = icon_full_path(icon) + if ico_paths: + icon = icon_full_path(icon) else: icon = None @@ -349,11 +352,11 @@ def desktopfilelist(): return filelist -def menu(): +def menu(ico_paths=True): applist = [] for desktopfile in desktopfilelist(): try: - entry = get_entry_info(desktopfile) + entry = get_entry_info(desktopfile, ico_paths=ico_paths) if entry is not None: applist.append(entry) except exc.ParsingError: @@ -593,5 +596,47 @@ def jwmmenu(): print('') print('') +def compizboxmenu(): + if submenu: + spacing = '\t' + if seticon: + app_icon = icon_full_path(applications_icon) + if app_icon is None: + print('') + else: + print('') + else: + print('') + else: + spacing = '' + for menu_category in menu(ico_paths=False): + category = menu_category.category + cat_icon = category_icon(category) + if seticon and cat_icon is not None: + print(spacing + '') + else: + print(spacing + '') + for app in menu_category.applist: + name = app.name.replace('&', '&') + icon = app.icon + command = app.command + path = app.path + if path is not None: + command = 'sh -c \'cd "' + path.replace("'", "'\\''") + '" ; ' + command.replace("'", "'\\''") + '\'' + if seticon and icon is not None: + print(('{}{}' + '{}' + '{}').format(spacing, + name, icon, command.replace('&', '&'))) + else: + print(('{}{}' + '{}').format(spacing, + name, command.replace('&', '&'))) + print(spacing + '') + if submenu: + print('') + if __name__ == "__main__": main(sys.argv[1:])