Fix compiler warnings.
[fvwm.git] / doc / fvwm / menus.xml
blobb0578c648cbd3e8d636f9785afa890c752a10cd0
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!-- $Id: menus.xml,v 1.5 2007/11/23 10:12:54 domivogt Exp $ -->
3 <!DOCTYPE part PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
4   "../docbook-xml/docbookx.dtd"
6 <!ENTITY % myents SYSTEM "../fvwm.ent" >
7 %myents;
8 ]>
11 <section id='menus'>
12 <title>Menus</title>
14 <para>Before a menu can be opened, it has to be populated with menu
15 items using the
16 <fvwmref cmd="AddToMenu"/>
17 command and bound to a key or mouse button with the
18 <fvwmref cmd="Key"/>,
19 <fvwmref cmd="PointerKey"/> or
20 <fvwmref cmd="Mouse"/>
21 command (there are many other ways to invoke a menu too).  This is
22 usually done in the configuration file.</para>
24 <para>Fvwm menus are extremely configurable in look and feel.  Even the
25 slightest nuances can be changed to the user's liking, including
26 the menu item fonts, the background, delays before popping up sub
27 menus, generating menus dynamically and many other features.
28 Please refer to the
29 <fvwmref cmd="MenuStyle"/>
30 command to learn more.</para>
32 <section id="menu_types">
33 <title>Types of Menus</title>
35 <para>In fvwm there are four slightly different types of menus:</para>
37 <para><fvwmref cmd="Popup"/> menus
38 can appear everywhere on the screen on their own or attached to a
39 part of a window.  The
40 <fvwmref cmd="Popup"/>
41 command opens popup menus.  If the popup menu was invoked with a
42 mouse button held down, it is closed when the button is released.
43 The item under the pointer is then activated and the associated
44 action is executed.</para>
46 <para><fvwmref cmd="Menu"/>
47 is a very similar command, but the menus it opens are slightly less
48 transient.  When invoked by clicking a mouse button, it stays open
49 and can be navigated with no button held.  But if it is invoked by
50 a button press followed by mouse motion, it behaves exactly like a
51 popup menu.</para>
53 <para><emphasis remap='I'>Tear off menus</emphasis> or <emphasis remap='I'>Pin up menus</emphasis>
54 are menus from either of the above two commands that have been
55 "torn off" their original context and pinned on the desktop like a
56 normal window.  They are created from other menus by certain key
57 presses or mouse sequences or with the
58 <fvwmref cmd="TearMenuOff"/>
59 command from inside a menu.</para>
61 <para><emphasis remap='I'>Sub menus</emphasis>
62 are menus inside menus.  When a menu item that has the
63 <fvwmref cmd="Popup"/>
64 command as its action is selected, the named menu is opened as an
65 inferior menu to the parent.  Any type of menu can have sub menus.</para>
66 </section>
69 <section id="menu_anatomy">
70 <title>Menu Anatomy</title>
72 <para>Menus consist of any number of titles which are inactive menu
73 items that usually appear at the top of the menu, normal items
74 triggering various actions when selected, separator lines between
75 the items, tear off bars (a horizontal broken line) that tear off
76 the menu when selected, and sub menu items indicated with a
77 triangle pointing left or right, depending on the direction in
78 which the sub menu appears.  All the above menu items are
79 optional.</para>
81 <para>Additionally, if the menu is too long to fit on the screen, the
82 excess menu items are put in a continuation menu and a sub menu
83 with the string "More..." is placed at the bottom of the menu. The
84 "More..." string honors the locale settings.</para>
86 <para>Finally, there may be a picture running up either side of the menu
87 (a "side bar").</para>
89 </section>
94 <section id="menu_navigation">
95 <title>Menu Navigation</title>
97 <para>Menus can be navigated either with the keyboard or with the
98 mouse.  Many people prefer to use the mouse, but it can be rather
99 tedious.  Once you get the hang of it, keyboard navigation can be
100 much faster.  While fvwm displays a menu, it can do nothing else.
101 For example, new windows do not appear before the menu is closed.
102 However, this is not exactly true for tear off menus.  See the
103 <fvwmref sect="menus" opt="tearoff_menus" name="Tear Off Menus"/>
104 section for details.</para>
106 </section>
110 <section id="mouse_navigation">
111 <title>Mouse Navigation</title>
113 <para>Moving the pointer over a menu selects the item below it.
114 Normally this is indicated by a 3d border around the item, but not
115 all parts of a menu can be selected.  Pressing any mouse button
116 while a menu is open by default activates the item below it.  Items of a
117 popup menu are also activated by releasing a held mouse button.
118 In case of an item that hides a sub menu, the sub menu is
119 displayed if the pointer hovers over the item long enough or moves
120 close to the triangle indicating the sub menu.  This behaviour can
121 be tuned with menu styles.</para>
123 <para>Scrolling a mouse wheel over a menu either wraps the pointer along the
124 menu (default), scrolls the menu under the pointer or act as if the
125 menu was clicked depending on the
126 <fvwmref cmd="MenuStyle" opt="MouseWheel"/> menu style.</para>
128 <para>Clicking on a selected item activates it - what happens exactly
129 depends on the type of the item.</para>
131 <para>Clicking on a title, a separator, the side bar, or outside the
132 menu closes the menu (exception:  tear off menus can not be closed
133 this way).  Pressing mouse button 2 over a menu title or
134 activating a tear off bar creates a tear off menu from the current
135 menu.  Clicking on a normal menu item invokes the command that is
136 bound to it, and clicking on a sub menu item either closes all
137 open menus and replaces them with the sub menu or posts the menu
138 (default).</para>
140 <para>Posting menus is meant to ease mouse navigation.  Once a sub menu
141 is posted, only items from that sub menu can be selected.  This
142 can be very useful to navigate the menu if the pointer tends to
143 stray off the menu.  To unpost the menu and revert back to normal
144 operation, either click on the same sub menu item or press any
145 key.</para>
147 </section>
152 <section id="keyboard_navigation">
153 <title>Keyboard Navigation</title>
155 <para>Just like with mouse navigation, the item below the pointer is
156 selected.  This is achieved by warping the pointer to the menu
157 items when necessary.  While a menu is open, all key presses are
158 intercepted by the menu.  No other application can get keyboard
159 input (although this is not the case for tear off menus).</para>
161 <para>Items can be selected directly by pressing a hotkey that can be
162 configured individually for each menu item.  The hotkey is
163 indicated by underlining it in the menu item label.  With the
164 <fvwmref cmd="MenuStyle" opt="AutomaticHotkeys"/>
165 menu style fvwm automatically assigns hotkeys to all menu items.</para>
167 <para>The most basic keys to navigate through menus are the cursor keys
168 (move up or down one item, enter or leave a sub menu),
169 <keysym>Space</keysym>
170 (activate item) and
171 <keysym>Escape</keysym>
172 (close menu).  Numerous other keys can be used to navigate through
173 menus by default:</para>
175 <para><emphasis remap='I'>Enter</emphasis>,
176 <emphasis remap='I'>Return</emphasis>,
177 <emphasis remap='I'>Space</emphasis>
178 activate the current item.</para>
180 <para><emphasis remap='I'>Escape</emphasis>,
181 <emphasis remap='I'>Delete</emphasis>,
182 <emphasis remap='I'>Ctrl-G</emphasis>
183 exit the current sequence of menus or destroy a tear off menu.</para>
185 <para><emphasis remap='I'>J</emphasis>,
186 <emphasis remap='I'>N</emphasis>,
187 <emphasis remap='I'>Cursor-Down</emphasis>,
188 <emphasis remap='I'>Tab</emphasis>,
189 <emphasis remap='I'>Meta-Tab</emphasis>,
190 <emphasis remap='I'>Ctrl-F</emphasis>,
191 move to the next item.</para>
193 <para><emphasis remap='I'>K</emphasis>,
194 <emphasis remap='I'>P</emphasis>,
195 <emphasis remap='I'>Cursor-Up</emphasis>,
196 <emphasis remap='I'>Shift-Tab</emphasis>,
197 <emphasis remap='I'>Shift-Meta-Tab</emphasis>,
198 <emphasis remap='I'>Ctrl-B</emphasis>,
199 move to the prior item.</para>
201 <para><emphasis remap='I'>L</emphasis>,
202 <emphasis remap='I'>Cursor-Right</emphasis>,
203 <emphasis remap='I'>F</emphasis>
204 enter a sub menu.</para>
206 <para><emphasis remap='I'>H</emphasis>,
207 <emphasis remap='I'>Cursor-Left</emphasis>,
208 <emphasis remap='I'>B</emphasis>
209 return to the prior menu.</para>
211 <para><emphasis remap='I'>Ctrl-Cursor-Up</emphasis>,
212 <emphasis remap='I'>Ctrl-K</emphasis>
213 <emphasis remap='I'>Ctrl-P</emphasis>,
214 <emphasis remap='I'>Shift-Ctrl-Meta-Tab</emphasis>,
215 <emphasis remap='I'>Page-Up</emphasis>
216 move up five items.</para>
218 <para><emphasis remap='I'>Ctrl-Cursor-Down</emphasis>,
219 <emphasis remap='I'>Ctrl-J</emphasis>
220 <emphasis remap='I'>Ctrl-N</emphasis>,
221 <emphasis remap='I'>Ctrl-Meta-Tab</emphasis>
222 <emphasis remap='I'>Page-Down</emphasis>
223 move down five items.</para>
225 <para>
226 <emphasis remap='I'>Shift-P</emphasis>,
227 <emphasis remap='I'>Home</emphasis>,
228 <emphasis remap='I'>Shift-Cursor-Up</emphasis>,
229 <emphasis remap='I'>Ctrl-A</emphasis>
230 move to the first item.</para>
232 <para>
233 <emphasis remap='I'>Shift-N</emphasis>,
234 <emphasis remap='I'>End</emphasis>,
235 <emphasis remap='I'>Shift-Cursor-Down</emphasis>,
236 <emphasis remap='I'>Ctrl-E</emphasis>
237 move to the last item.</para>
239 <para>
240 <emphasis remap='I'>Meta-P</emphasis>,
241 <emphasis remap='I'>Meta-Cursor-Up</emphasis>,
242 <emphasis remap='I'>Ctrl-Cursor-Left</emphasis>,
243 <emphasis remap='I'>Shift-Ctrl-Tab</emphasis>,
244 move up just below the next separator.</para>
246 <para>
247 <emphasis remap='I'>Meta-N</emphasis>,
248 <emphasis remap='I'>Meta-Cursor-Down</emphasis>,
249 <emphasis remap='I'>Ctrl-Cursor-Right</emphasis>,
250 <emphasis remap='I'>Ctrl-Tab</emphasis>,
251 move down just below the next separator.</para>
253 <para><emphasis remap='I'>Insert</emphasis>
254 opens the "More..." sub menu if any.</para>
256 <para><emphasis remap='I'>Backspace</emphasis>
257 tears off the menu.</para>
258 </section>
260 <section id="menu_bindings">
261 <title>Menu Bindings</title>
263 <para>The keys and mouse buttons used to navigate the menu can be configured
264 using the
265 <fvwmref cmd="Key"/>
267 <fvwmref cmd="Mouse"/>
268 commands with the special context 'M', possible combined with 'T' for
269 the menu title, 'I' for other menu items, 'S' for any border or
270 sidepic, '[' for left border including a left sidepic, ']' for right
271 border including a right sidepic, '-' for top border, '_' for bottom
272 border.  The menu context uses its own set of actions that can be bound
273 to keys and mouse buttons.  These are
274 <emphasis remap='I'>MenuClose</emphasis>,
275 <emphasis remap='I'>MenuCloseAndExec</emphasis>,
276 <emphasis remap='I'>MenuEnterContinuation</emphasis>,
277 <emphasis remap='I'>MenuEnterSubmenu</emphasis>,
278 <emphasis remap='I'>MenuLeaveSubmenu</emphasis>,
279 <emphasis remap='I'>MenuMoveCursor</emphasis>,
280 <emphasis remap='I'>MenuCursorLeft</emphasis>,
281 <emphasis remap='I'>MenuCursorRight</emphasis>,
282 <emphasis remap='I'>MenuSelectItem</emphasis>,
283 <emphasis remap='I'>MenuScroll</emphasis> and
284 <emphasis remap='I'>MenuTearOff</emphasis>.</para>
286 <para>It is not possible to override the key Escape with no modifiers for
287 closing the menu. Neither is it possible to undefine mouse button 1,
288 the arrow keys or the enter key for minimal navigation.</para>
290 <para><emphasis remap='B'>MenuClose</emphasis>
291 exits from the current sequence of menus or destroys a tear off menu.</para>
293 <para><emphasis remap='B'>MenuCloseAndExec</emphasis>
294 exits from the current sequence of menus or destroys a tear off menu and
295 executes the rest of the line as a command.</para>
297 <para><emphasis remap='B'>MenuEnterContinuation</emphasis>
298 opens the "More..." sub menu if any.</para>
300 <para><emphasis remap='B'>MenuEnterSubmenu</emphasis>
301 enters a sub menu.</para>
303 <para><emphasis remap='B'>MenuLeaveSubmenu</emphasis>
304 returns to the prior menu.</para>
306 <para><emphasis remap='B'>MenuMoveCursor</emphasis>
307 <replaceable>n</replaceable>
308 <optional><replaceable>m</replaceable></optional>
309 moves the selection to another item.  If the first argument is zero
310 the second argument specifies an absolute item in the menu to move
311 the pointer to. Negative items are counted from the end of the menu.
312 If the first argument is non-zero, the second argument must be omitted,
313 and the first argument specifies a relative change in the selected item.
314 The positions may be suffixed with a 's' to indicate that the items should
315 refer only to the first items after separators.</para>
317 <para><emphasis remap='B'>MenuCursorLeft</emphasis>
318 enters a sub menu with the
319 <fvwmref cmd="MenuStyle" opt="SubmenusLeft"/>
320 menu style, and returns to the prior menu with the
321 <fvwmref cmd="MenuStyle" opt="SubmenusRight"/> menu style.</para>
323 <para><emphasis remap='B'>MenuCursorRight</emphasis>
324 enters a sub menu with the
325 <fvwmref cmd="MenuStyle" opt="SubmenusRight"/>
326 menu style, and returns to the prior menu with the
327 <fvwmref cmd="MenuStyle" opt="SubmenusLeft"/> menu style.</para>
329 <para><emphasis remap='B'>MenuSelectItem</emphasis>
330 triggers the action for the menu item.</para>
332 <para><emphasis remap='B'>MenuScroll </emphasis><replaceable>n</replaceable>
333 performs menu scrolling according to the
334 <fvwmref cmd="MenuStyle" opt="MouseWheel"/> menu style with
335 <replaceable>n</replaceable> items.  The distance can be
336 suffixed with an 's' to indicate the items should refer only to the
337 first items after separators.</para>
339 <para><emphasis remap='B'>MenuTearOff</emphasis>
340 turns a normal menu into a "torn off" menu. See
341 <fvwmref sect="menus" opt="tearoff_menus" name="Tear Off Menus"/>
342 for details.</para>
344 </section>
348 <section id="tearoff_menus">
349 <title>Tear Off Menus</title>
351 <para>A tear off menu is any menu that has been "torn off" the window it
352 was attached to and pinned to the root window.  There are three
353 ways to tear off a menu:  click on the menu title with mouse
354 button 2, press
355 <keysym>Backspace</keysym>
356 in the menu or activate its tear off bar (a horizontal bar with a
357 broken line).  Tear off bars must be added to the menu as any
358 other item by assigning them the command
359 <fvwmref cmd="TearMenuOff"/>.</para>
361 <para>The builtin tear off actions can be overridden by undefining the
362 builtin menu actions bound to tear off. To remove the builtin mouse
363 button 2 binding, use:</para>
365 <programlisting>
366 <fvwmref cmd="Mouse"/> 2 MT A -
367 </programlisting>
369 <para>and to remove the builtin backspace binding, use:</para>
371 <programlisting>
372 <fvwmref cmd="Key"/> Backspace M A -
373 </programlisting>
375 <para>See the section
376 <fvwmref sect="menus" opt="menu_bindings" name="Menu Bindings"/>
377 for details on how to assign other bindings for tear off.</para>
379 <para>Note that prior to fvwm 2.5.20 the tear off mouse bindings were
380 redefined in different way, which no longer work.</para>
383 <para>The window containing the menu is placed as any other window would
384 be.  If you find it confusing to have your tear off menus appear
385 at random positions on the screen, put this line in your
386 configuration file:</para>
388 <programlisting>
389 <fvwmref cmd="Style"/> fvwm_menu <fvwmref cmd="Style" opt="UsePPosition"/>
390 </programlisting>
393 <para>To remove borders and buttons from a tear-off menu but keep the
394 menu title, you can use</para>
396 <programlisting>
397 <fvwmref cmd="Style"/> fvwm_menu !<fvwmref cmd="Style" opt="Button"/> 0, !<fvwmref cmd="Style" opt="Button"/> 1
398 <fvwmref cmd="Style"/> fvwm_menu !<fvwmref cmd="Style" opt="Button"/> 2, !<fvwmref cmd="Style" opt="Button"/> 3
399 <fvwmref cmd="Style"/> fvwm_menu !<fvwmref cmd="Style" opt="Button"/> 4, !<fvwmref cmd="Style" opt="Button"/> 5
400 <fvwmref cmd="Style"/> fvwm_menu !<fvwmref cmd="Style" opt="Button"/> 6, !<fvwmref cmd="Style" opt="Button"/> 7
401 <fvwmref cmd="Style"/> fvwm_menu !<fvwmref cmd="Style" opt="Button"/> 8, !<fvwmref cmd="Style" opt="Button"/> 9
402 <fvwmref cmd="Style"/> fvwm_menu <fvwmref cmd="Style" opt="Title"/>, <fvwmref cmd="Style" opt="HandleWidth"/> 0
403 </programlisting>
406 <para>A tear off menu is a cross breeding between a window and a menu.
407 The menu is swallowed by a window and its title is stripped off
408 and displayed in the window title.  The main advantage is that the
409 menu becomes permanent - activating an item does not close the
410 menu.  Therefore, it can be used multiple times without reopening
411 it.  To destroy such a menu, close its window or press the
412 <keysym>Escape</keysym>
413 key.</para>
415 <para>Tear off menus behave somewhat differently than normal menus and
416 windows.  They do not take the keyboard focus, but while the
417 pointer is over one of them, all key presses are sent to the
418 menu.  Other fvwm key bindings are disabled as long as the pointer
419 is inside the tear off menu or one of its sub menus.  When the
420 pointer leaves this area, all sub menus are closed immediately.
421 Note that the window containing a tear off menu is never hilighted
422 as if it had the focus.</para>
424 <para>A tear off menu is an independent copy of the menu it originated
425 from.  As such, it is not affected by adding items to that menu or
426 changing its menu style.</para>
428 <para>To create a tear off menu without opening the normal menu first,
429 the option
430 <fvwmref cmd="Menu" opt="TearOffImmediately"/>
431 can be added to the
432 <fvwmref cmd="Menu"/> or <fvwmref cmd="Popup"/>
433 command.</para>
434 </section>
436 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="AddToMenu.xml" />
437 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="ChangeMenuStyle.xml" />
438 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="CopyMenuStyle.xml" />
439 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="DestroyMenu.xml" />
440 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="DestroyMenuStyle.xml" />
441 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Menu.xml" />
442 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="MenuStyle.xml" />
443 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Popup.xml" />
444 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="TearMenuOff.xml" />
445 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="Title.xml" />
448 </section>