Compiz Boxmenu Code
Brought to you by:
shadowkyogre
Compiz Boxmenu === Requirements === * A recent version of GLib 2.x and GTK+ 2.x * libwnck (2.20 is probably best, but not strictly required) * dbus (you must have a running session bus) and dbus-glib (for dbus version) It does not strictly require compiz (but it does need a recent version of the vpswitch plugin for 'Initiate on Desktop' to work) === Install === $ make $ sudo make install Prefix support is currently broken, so it only works correctly if you install to /usr (will be fixed when it gets a proper buildsystem or perhaps sooner) === Usage === For the lazy, you can run the provided "autoconfig-compiz.py" script (as your user, *not* as root!), but here's what it sets: + General Options > Commands > Commands > Command line 0 to "compiz-boxmenu" + General Options > Commands > Key bindings > Run command 0 to "<Control>space" + Viewport Switcher > Desktop-based Viewport Switching > Plugin for initiate action to "core" + Viewport Switcher > Desktop-based Viewport Switching > Action name for initiate to "run_command0_key" === Menu Format === The default menu lives at /etc/xdg/compiz/boxmenu/menu.xml. You can override that menu by copying it to ~/.config/compiz/boxmenu/menu.xml (it's XDG basedir-compliant, so if you're setting those variables, adjust accordingly) Menus: <menu title="Title"> Menus can contain <item> and more <menu> tags (so they're infinitely nestable!). The title attribute is optional and is ignored for the toplevel menu. You can also set the icon for a menu by setting the icon="/path/or/name/of/icon" attribute Items: <item type="Type"> There are a few supported item types: * launcher: supports the following child elements: - <name>: the label to show in the menu - <icon>: the icon name to use in the menu. This name is looked up by gtk+, so you can toss custom icons in ~/.icons/$YOUR_THEME/$ICON_SIZE/apps/ or ~/.local/share/icons. By setting the mode1="file" attribute, you can specify icons located in nonstandard locations (like ~/.face for your login icon) - <command>: the launcher command line, now can be used as a pipemenu by setting the mode2="pipe" attribute (this was done to make up for the removal of pipeitems) * separator: a simple GtkSeparatorMenuItem. You can add some more flare by setting the icon="/path/or/name/of/icon" attribute and setting the name="yourcustomname" attribute. You can also set a dynamic name for the separator by setting the mode="exec" attribute. * windowlist: libwnck-based window list menu. It also supports the following child elements: - <icon>: just like launcher's <icon> * viewportlist: libwnck-based viewport list menu. It also supports the following child elements: - <icon>: just like launcher's <icon> - <vpicon>: just like icon, except for the viewports - <wrap>: specifies whether the viewport list should have wrapped navigation * reload: reload button (it actually quits the daemon) - <icon>: just like launcher's <icon> * documents: access to recent documents list - <icon>: just like launcher's <icon> - <command>: just like launcher's <command>, except it is used to open files in the document list === Implementation === It compiles into two binaries, compiz-boxmenu and compiz-boxmenu-daemon. compiz-boxmenu is a simple dbus client that connects to org.compiz_fusion.boxmenu and calls the show method. The actual menu is compiz-boxmenu-daemon, but you shouldn't ever need to manually launch it; the dbus service file will cause it to be automatically spawned when the name is requested. There are also four other binaries that allow you to call up the viewport list, windowlist, desktop list, and documents list on their own. These are compiz-boxmenu-vplist, compiz-boxmenu-wlist, compiz-boxmenu-dplist, and compiz-boxmenu-dlist. You can also edit the menu by running compiz-boxmenu-editor == Credits == crdlb for the original Openbox developers for the pipeitem -> pipemenu idea Windowmaker developers for the filebrowser idea