'\" t
.\"***************************************************************************
.\" Copyright 2018-2019,2020 Thomas E. Dickey                                *
.\" Copyright 1998-2015,2016 Free Software Foundation, Inc.                  *
.\"                                                                          *
.\" Permission is hereby granted, free of charge, to any person obtaining a  *
.\" copy of this software and associated documentation files (the            *
.\" "Software"), to deal in the Software without restriction, including      *
.\" without limitation the rights to use, copy, modify, merge, publish,      *
.\" distribute, distribute with modifications, sublicense, and/or sell       *
.\" copies of the Software, and to permit persons to whom the Software is    *
.\" furnished to do so, subject to the following conditions:                 *
.\"                                                                          *
.\" The above copyright notice and this permission notice shall be included  *
.\" in all copies or substantial portions of the Software.                   *
.\"                                                                          *
.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
.\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
.\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
.\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
.\" THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
.\"                                                                          *
.\" Except as contained in this notice, the name(s) of the above copyright   *
.\" holders shall not be used in advertising or otherwise to promote the     *
.\" sale, use or other dealings in this Software without prior written       *
.\" authorization.                                                           *
.\"***************************************************************************
.\"
.\" $Id: menu_opts.3x,v 1.17 2020/02/02 23:34:34 tom Exp $
.TH menu_opts 3X ""
.SH NAME
\fBset_menu_opts\fP,
\fBmenu_opts_on\fP,
\fBmenu_opts_off\fP,
\fBmenu_opts\fR \- set and get menu options
.SH SYNOPSIS
\fB#include <menu.h>\fR
.br
int set_menu_opts(MENU *menu, Menu_Options opts);
.br
int menu_opts_on(MENU *menu, Menu_Options opts);
.br
int menu_opts_off(MENU *menu, Menu_Options opts);
.br
Menu_Options menu_opts(const MENU *menu);
.br
.SH DESCRIPTION
The function \fBset_menu_opts\fR sets all the given menu's option bits (menu
option bits may be logically-OR'ed together).
.PP
The function \fBmenu_opts_on\fR turns on the given option bits, and leaves
others alone.
.PP
The function \fBmenu_opts_off\fR turns off the given option bits, and leaves
others alone.
.PP
The function \fBmenu_opts\fR returns the menu's current option bits.
.PP
The following options are defined (all are on by default):
.TP 5
O_ONEVALUE
Only one item can be selected for this menu.
.TP 5
O_SHOWDESC
Display the item descriptions when the menu is posted.
.TP 5
O_ROWMAJOR
Display the menu in row-major order.
.TP 5
O_IGNORECASE
Ignore the case when pattern-matching.
.TP 5
O_SHOWMATCH
Move the cursor to within the item name while pattern-matching.
.TP 5
O_NONCYCLIC
Don't wrap around next-item and previous-item,
requests to the other end of the menu.
.TP 5
O_MOUSE_MENU
If user clicks with the mouse
and it does not fall on the currently active menu,
push \fBKEY_MOUSE\fP and the \fBMEVENT\fP data
back on the queue to allow processing in another part of the calling program.
.SH RETURN VALUE
Except for \fBmenu_opts\fR, each routine returns one of the following:
.TP 5
.B E_OK
The routine succeeded.
.TP 5
.B E_SYSTEM_ERROR
System error occurred (see \fBerrno\fR(3)).
.TP 5
.B E_POSTED
The menu is already posted.
.SH SEE ALSO
\fBcurses\fR(3X), \fBmenu\fR(3X).
.SH NOTES
The header file \fB<menu.h>\fR automatically includes the header file
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V menu library.
They were not supported on
Version 7 or BSD versions.
.SH AUTHORS
Juergen Pfeifer.
Manual pages and adaptation for new curses by Eric S. Raymond.
