<big>K</big>ickshaw accepts the following XML elements and attribute names, attribute values, and contents associated with these elements:

<tt><b>Element:</b>			<b>Attribute Names:</b>
menu           		id, label, icon, execute
separator      		label
item           		label, icon
↳action        		name
 ↳prompt       		n/a
 ↳command      		n/a
 ↳startupnotify		n/a
  ↳enabled     		n/a
  ↳icon        		n/a
  ↳name        		n/a
  ↳wmclass     		n/a

					<b>Attribute Values:</b>
action         		Execute, Exit, Reconfigure,
               		Restart, SessionLogout

					<b>Contents:</b>
enabled        		yes, no</tt>

Menu IDs consisting of empty strings are valid, but like any other menu ID can only appear once in a menu.

— — —

The following menus are equivalent and both accepted by Openbox and Kickshaw.

<tt><b>(1)</b> &lt;openbox_menu&gt;

      &lt;menu id="menu1" label="Menu1"&gt;
        &lt;item label="item"/&gt;
      &lt;/menu&gt;

      &lt;menu id="root-menu"&gt;
        &lt;menu id="menu1"/&gt;
      &lt;/menu&gt;

    &lt;/openbox_menu&gt;</tt>

<tt><b>(2)</b> &lt;openbox_menu&gt;

      &lt;menu id="root-menu"&gt;
        &lt;menu id="menu1" label="Menu1"&gt;
          &lt;item label="item"/&gt;
        &lt;/menu&gt;
      &lt;/menu&gt;

    &lt;/openbox_menu&gt;</tt>

A menu is always shown inside Kickshaw as it would appear in Openbox, so the latter of the two examples is closer to a WYSIWYG approach. The downside is that for large menus, this can make a menu file look somewhat confusing. For that reason, by default Kickshaw always saves the menu in the former format (this can be changed within the options). When saving a file, the program uses tabulators for indentations by default, but for reading the file, whether such indentations were done with spaces or tabulators is irrelevant, as is any whitespace.

— — —

A menu can contain contradictory menu attributes, as in the following example:

<tt>&lt;openbox_menu&gt;

  &lt;menu id="menu1" label="outside" icon="out.jpg" execute="out" /&gt;

  &lt;menu id="root-menu"&gt;
    &lt;menu id="menu1" label="inside" icon="in.jpg" execute="in" /&gt;
  &lt;/menu&gt;

&lt;/openbox_menu&gt;</tt>

In this case, Kickshaw follows the example of Openbox and shows the icon attribute value from inside the root menu, while it shows the label and execute attribute values from outside the root menu.
