<big>K</big>ickshaw accepts the following XML elements, 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 may consist of empty strings. However, like any other menu ID, each can appear only once within a menu.

— — —

The following menus are equivalent and are accepted by both 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>

In Kickshaw, a menu is always displayed as it would appear in Openbox. The second of the two examples therefore provides a closer WYSIWYG experience. The downside is that large menus may look somewhat confusing in this format. For that reason, Kickshaw saves menus in the first format by default (this can be changed in the options).

When saving a file, the program uses tabs for indentation by default. When reading a file, however, it makes no difference whether indentation was done with spaces or tabs, nor does other whitespace matter.

— — —

A menu may contain contradictory 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 Openbox’s behaviour: it shows the icon attribute value from the root menu, but uses the label and execute attribute values defined outside the root menu.
