As you have seen in the above example,
menu-driver plays an
important role in updating the menu. It is very important to
understand various options it takes and what they do. As explained
above, the second parameter to
menu-driver can be either a
navigational request, a printable character or a
key. Let’s dissect the different navigational requests.
REQ_LEFT_ITEM and REQ_RIGHT_ITEM
A menu can be displayed with multiple columns for more than one item.
This can be done by using the
menu-format function. When a
multicolumnar menu is displayed these requests cause the menu driver
to move the current selection to left or right.
REQ_UP_ITEM and REQ_DOWN_ITEM
These two options you have seen in the above example. These options
when given, makes the
menu-driver to move the current selection
to an item up or down.
The four options
REQ_SCR_UPAGE are related to
scrolling. If all the items in the menu cannot be displayed in the
menu sub window, then the menu is scrollable. These requests can be
given to the
menu-driver to do the scrolling either one line
up, down or one page down or up respectively.
REQ_FIRST_ITEM, REQ_LAST_ITEM, REQ_NEXT_ITEM and REQ_PREV_ITEM
This request when given, toggles the present selection. This option is
to be used only in a multivalued menu. So to use this request the
O_ONEVALUE must be off. This option can be made off or
Every menu has an associated pattern buffer, which is used to find the
nearest match to the ASCII characters entered by the user. Whenever
ASCII characters are given to menu_driver, it puts in to the pattern
buffer. It also tries to find the nearest match to the pattern in the
items list and moves current selection to that item. The request
REQ_CLEAR_PATTERN clears the pattern buffer. The request
REQ_BACK_PATTERN deletes the previous character in the pattern
buffer. In case the pattern matches more than one item then the
matched items can be cycled through
REQ_PREV_MATCH which move the current selection to the next and
previous matches respectively.
In case of
KEY_MOUSE requests, according to the mouse position
an action is taken accordingly. The action to be taken is explained in
the man page as, If the second argument is the
special key, the associated mouse event is translated into one of the
above pre-defined requests. Currently only clicks in the user window
(e.g. inside the menu display area or the decoration window) are
handled. If you click above the display region of the menu, a
REQ_SCR_ULINE is generated, if you doubleclick a
REQ_SCR_UPAGE is generated and if you tripleclick a
REQ_FIRST_ITEM is generated. If you click below the display
region of the menu, a REQ_SCR_DLINE is generated, if you doubleclick a
REQ_SCR_DPAGE is generated and if you tripleclick a
REQ_LAST_ITEM is generated. If you click at an item inside the
display area of the menu, the menu cursor is positioned to that item.
Each of the above requests will be explained in the following lines with several examples whenever appropriate.