menu(3X) Library calls menu(3X)

# [NAME](#NAME)

**menu** - present menus in *curses* windows

# [SYNOPSIS](#SYNOPSIS)

```
#include <menu.h>
```

# [DESCRIPTION](#DESCRIPTION)

The **menu** library provides terminal-independent facilities for composing menu systems on character-cell terminals. The library includes: item routines, which create and modify menu items; and menu routines, which group items into menus, display menus on the screen, and handle interaction with the user.

The **menu** library uses the **curses** libraries, and a curses initialization routine such as **initscr** must be called before using any of these functions. To use the **menu** library, link with the options **-lmenu -lcurses**.

## [Current Default Values for Item Attributes](#Current_Default_Values_for_Item_Attributes)

The **menu** library maintains a default value for item attributes. You can get or set this default by calling the appropriate **get\_** or **set\_** routine with a *NULL* item pointer. Changing this default with a **set\_** function affects future item creations, but does not change the rendering of items already created.

## [Routine Name Index](#Routine_Name_Index)

The following table lists each **menu** routine and the name of the manual page on which it is described.

**curses** Routine Name Manual Page Name current\_item [**mitem\_current**(3X)](/man/os/ncurses/mitem_current.3X) free\_item [**mitem\_new**(3X)](/man/os/ncurses/mitem_new.3X) free\_menu [**menu\_new**(3X)](/man/os/ncurses/menu_new.3X) item\_count [**menu\_items**(3X)](/man/os/ncurses/menu_items.3X) item\_description [**mitem\_name**(3X)](/man/os/ncurses/mitem_name.3X) item\_index [**mitem\_current**(3X)](/man/os/ncurses/mitem_current.3X) item\_init [**menu\_hook**(3X)](/man/os/ncurses/menu_hook.3X) item\_name [**mitem\_name**(3X)](/man/os/ncurses/mitem_name.3X) item\_opts [**mitem\_opts**(3X)](/man/os/ncurses/mitem_opts.3X) item\_opts\_off [**mitem\_opts**(3X)](/man/os/ncurses/mitem_opts.3X) item\_opts\_on [**mitem\_opts**(3X)](/man/os/ncurses/mitem_opts.3X) item\_term [**menu\_hook**(3X)](/man/os/ncurses/menu_hook.3X) item\_userptr [**mitem\_userptr**(3X)](/man/os/ncurses/mitem_userptr.3X) item\_value [**mitem\_value**(3X)](/man/os/ncurses/mitem_value.3X) item\_visible [**mitem\_visible**(3X)](/man/os/ncurses/mitem_visible.3X) menu\_back [**menu\_attributes**(3X)](/man/os/ncurses/menu_attributes.3X) menu\_driver [**menu\_driver**(3X)](/man/os/ncurses/menu_driver.3X) menu\_fore [**menu\_attributes**(3X)](/man/os/ncurses/menu_attributes.3X) menu\_format [**menu\_format**(3X)](/man/os/ncurses/menu_format.3X) menu\_grey [**menu\_attributes**(3X)](/man/os/ncurses/menu_attributes.3X) menu\_init [**menu\_hook**(3X)](/man/os/ncurses/menu_hook.3X) menu\_items [**menu\_items**(3X)](/man/os/ncurses/menu_items.3X) menu\_mark [**menu\_mark**(3X)](/man/os/ncurses/menu_mark.3X) menu\_opts [**menu\_opts**(3X)](/man/os/ncurses/menu_opts.3X) menu\_opts\_off [**menu\_opts**(3X)](/man/os/ncurses/menu_opts.3X) menu\_opts\_on [**menu\_opts**(3X)](/man/os/ncurses/menu_opts.3X) menu\_pad [**menu\_attributes**(3X)](/man/os/ncurses/menu_attributes.3X) menu\_pattern [**menu\_pattern**(3X)](/man/os/ncurses/menu_pattern.3X) menu\_request\_by\_name [**menu\_requestname**(3X)](/man/os/ncurses/menu_requestname.3X) menu\_request\_name [**menu\_requestname**(3X)](/man/os/ncurses/menu_requestname.3X) menu\_spacing [**menu\_spacing**(3X)](/man/os/ncurses/menu_spacing.3X) menu\_sub [**menu\_win**(3X)](/man/os/ncurses/menu_win.3X) menu\_term [**menu\_hook**(3X)](/man/os/ncurses/menu_hook.3X) menu\_userptr [**menu\_userptr**(3X)](/man/os/ncurses/menu_userptr.3X) menu\_win [**menu\_win**(3X)](/man/os/ncurses/menu_win.3X) new\_item [**mitem\_new**(3X)](/man/os/ncurses/mitem_new.3X) new\_menu [**menu\_new**(3X)](/man/os/ncurses/menu_new.3X) pos\_menu\_cursor [**menu\_cursor**(3X)](/man/os/ncurses/menu_cursor.3X) post\_menu [**menu\_post**(3X)](/man/os/ncurses/menu_post.3X) scale\_menu [**menu\_win**(3X)](/man/os/ncurses/menu_win.3X) set\_current\_item [**mitem\_current**(3X)](/man/os/ncurses/mitem_current.3X) set\_item\_init [**menu\_hook**(3X)](/man/os/ncurses/menu_hook.3X) set\_item\_opts [**mitem\_opts**(3X)](/man/os/ncurses/mitem_opts.3X) set\_item\_term [**menu\_hook**(3X)](/man/os/ncurses/menu_hook.3X) set\_item\_userptr [**mitem\_userptr**(3X)](/man/os/ncurses/mitem_userptr.3X) set\_item\_value [**mitem\_value**(3X)](/man/os/ncurses/mitem_value.3X) set\_menu\_back [**menu\_attributes**(3X)](/man/os/ncurses/menu_attributes.3X) set\_menu\_fore [**menu\_attributes**(3X)](/man/os/ncurses/menu_attributes.3X) set\_menu\_format [**menu\_format**(3X)](/man/os/ncurses/menu_format.3X) set\_menu\_grey [**menu\_attributes**(3X)](/man/os/ncurses/menu_attributes.3X) set\_menu\_init [**menu\_hook**(3X)](/man/os/ncurses/menu_hook.3X) set\_menu\_items [**menu\_items**(3X)](/man/os/ncurses/menu_items.3X) set\_menu\_mark [**menu\_mark**(3X)](/man/os/ncurses/menu_mark.3X) set\_menu\_opts [**mitem\_opts**(3X)](/man/os/ncurses/mitem_opts.3X) set\_menu\_pad [**menu\_attributes**(3X)](/man/os/ncurses/menu_attributes.3X) set\_menu\_pattern [**menu\_pattern**(3X)](/man/os/ncurses/menu_pattern.3X) set\_menu\_spacing [**menu\_spacing**(3X)](/man/os/ncurses/menu_spacing.3X) set\_menu\_sub [**menu\_win**(3X)](/man/os/ncurses/menu_win.3X) set\_menu\_term [**menu\_hook**(3X)](/man/os/ncurses/menu_hook.3X) set\_menu\_userptr [**menu\_userptr**(3X)](/man/os/ncurses/menu_userptr.3X) set\_menu\_win [**menu\_win**(3X)](/man/os/ncurses/menu_win.3X) set\_top\_row [**mitem\_current**(3X)](/man/os/ncurses/mitem_current.3X) top\_row [**mitem\_current**(3X)](/man/os/ncurses/mitem_current.3X) unpost\_menu [**menu\_post**(3X)](/man/os/ncurses/menu_post.3X)

# [RETURN VALUE](#RETURN_VALUE)

Routines that return pointers return *NULL* on error. Routines that return an integer return one of the following error codes:

[**E\_OK**](#E_OK)

The routine succeeded.

[**E\_BAD\_ARGUMENT**](#E_BAD_ARGUMENT)

Routine detected an incorrect or out-of-range argument.

[**E\_BAD\_STATE**](#E_BAD_STATE)

Routine was called from an initialization or termination function.

[**E\_NO\_MATCH**](#E_NO_MATCH)

Character failed to match.

[**E\_NO\_ROOM**](#E_NO_ROOM)

Menu is too large for its window.

[**E\_NOT\_CONNECTED**](#E_NOT_CONNECTED)

No items are connected to the menu.

[**E\_NOT\_POSTED**](#E_NOT_POSTED)

The menu has not been posted.

[**E\_NOT\_SELECTABLE**](#E_NOT_SELECTABLE)

The designated item cannot be selected.

[**E\_POSTED**](#E_POSTED)

The menu is already posted.

[**E\_REQUEST\_DENIED**](#E_REQUEST_DENIED)

The menu driver could not process the request.

[**E\_SYSTEM\_ERROR**](#E_SYSTEM_ERROR)

System error occurred (see [**errno**(3)](/man/os/ncurses/errno.3)).

[**E\_UNKNOWN\_COMMAND**](#E_UNKNOWN_COMMAND)

The menu driver code saw an unknown request code.

# [NOTES](#NOTES)

The header file *menu.h* itself includes the header file *curses.h*.

# [PORTABILITY](#PORTABILITY)

These routines emulate the System V menu library. They were not supported on Version 7 or BSD versions.

A menu facility was documented in SVr4.2's *Character User Interface Programming* document.

It is not part of X/Open Curses.

Aside from *ncurses*, there are few implementations:

- systems based on SVr4 source code, e.g., Solaris.
- NetBSD curses.

# [AUTHORS](#AUTHORS)

Juergen Pfeifer. Manual pages and adaptation for *ncurses* by Eric S. Raymond.

# [SEE ALSO](#SEE_ALSO)

[**curses**(3X)](/man/os/ncurses/curses.3X) and related pages whose names begin “menu\_” for detailed descriptions of the entry points.

2025-11-11 ncurses 6.6

---

Document: menu(3x) from ncurses 6.6.20261017-r0 (Chainguard OS)
Source: https://github.com/ThomasDickey/ncurses-snapshots
