---
name: "menu"
section: "3x"
platform: "macos"
package: "ncurses"
version: "79"
release: "macOS 26.5"
platforms: ["linux", "macos"]
url: "https://new.carta.tech/menu/3x"
---

# menu(3x)

curses extension for programming menus

## NAME

**menu** - curses extension for programming menus

## SYNOPSIS

**#include \<menu.h\>**\

## 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

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

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) |
| free\_item | **mitem\_new**(3X) |
| free\_menu | **menu\_new**(3X) |
| item\_count | **menu\_items**(3X) |
| item\_description | **mitem\_name**(3X) |
| item\_index | **mitem\_current**(3X) |
| item\_init | **menu\_hook**(3X) |
| item\_name | **mitem\_name**(3X) |
| item\_opts | **mitem\_opts**(3X) |
| item\_opts\_off | **mitem\_opts**(3X) |
| item\_opts\_on | **mitem\_opts**(3X) |
| item\_term | **menu\_hook**(3X) |
| item\_userptr | **mitem\_userptr**(3X) |
| item\_value | **mitem\_value**(3X) |
| item\_visible | **mitem\_visible**(3X) |
| menu\_back | **menu\_attributes**(3X) |
| menu\_driver | **menu\_driver**(3X) |
| menu\_fore | **menu\_attributes**(3X) |
| menu\_format | **menu\_format**(3X) |
| menu\_grey | **menu\_attributes**(3X) |
| menu\_init | **menu\_hook**(3X) |
| menu\_items | **menu\_items**(3X) |
| menu\_mark | **menu\_mark**(3X) |
| menu\_opts | **menu\_opts**(3X) |
| menu\_opts\_off | **menu\_opts**(3X) |
| menu\_opts\_on | **menu\_opts**(3X) |
| menu\_pad | **menu\_attributes**(3X) |
| menu\_pattern | **menu\_pattern**(3X) |
| menu\_request\_by\_name | **menu\_requestname**(3X) |
| menu\_request\_name | **menu\_requestname**(3X) |
| menu\_spacing | **menu\_spacing**(3X) |
| menu\_sub | **menu\_win**(3X) |
| menu\_term | **menu\_hook**(3X) |
| menu\_userptr | **menu\_userptr**(3X) |
| menu\_win | **menu\_win**(3X) |
| new\_item | **mitem\_new**(3X) |
| new\_menu | **menu\_new**(3X) |
| pos\_menu\_cursor | **menu\_cursor**(3X) |
| post\_menu | **menu\_post**(3X) |
| scale\_menu | **menu\_win**(3X) |
| set\_current\_item | **mitem\_current**(3X) |
| set\_item\_init | **menu\_hook**(3X) |
| set\_item\_opts | **mitem\_opts**(3X) |
| set\_item\_term | **menu\_hook**(3X) |
| set\_item\_userptr | **mitem\_userptr**(3X) |
| set\_item\_value | **mitem\_value**(3X) |
| set\_menu\_back | **menu\_attributes**(3X) |
| set\_menu\_fore | **menu\_attributes**(3X) |
| set\_menu\_format | **menu\_format**(3X) |
| set\_menu\_grey | **menu\_attributes**(3X) |
| set\_menu\_init | **menu\_hook**(3X) |
| set\_menu\_items | **menu\_items**(3X) |
| set\_menu\_mark | **menu\_mark**(3X) |
| set\_menu\_opts | **mitem\_opts**(3X) |
| set\_menu\_pad | **menu\_attributes**(3X) |
| set\_menu\_pattern | **menu\_pattern**(3X) |
| set\_menu\_spacing | **menu\_spacing**(3X) |
| set\_menu\_sub | **menu\_win**(3X) |
| set\_menu\_term | **menu\_hook**(3X) |
| set\_menu\_userptr | **menu\_userptr**(3X) |
| set\_menu\_win | **menu\_win**(3X) |
| set\_top\_row | **mitem\_current**(3X) |
| top\_row | **mitem\_current**(3X) |
| unpost\_menu | **menu\_post**(3X) |

## RETURN VALUE

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

- **E\_OK**

  The routine succeeded.

- **E\_BAD\_ARGUMENT**

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

- **E\_BAD\_STATE**

  Routine was called from an initialization or termination function.

- **E\_NO\_MATCH**

  Character failed to match.

- **E\_NO\_ROOM**

  Menu is too large for its window.

- **E\_NOT\_CONNECTED**

  No items are connected to the menu.

- **E\_NOT\_POSTED**

  The menu has not been posted.

- **E\_NOT\_SELECTABLE**

  The designated item cannot be selected.

- **E\_POSTED**

  The menu is already posted.

- **E\_REQUEST\_DENIED**

  The menu driver could not process the request.

- **E\_SYSTEM\_ERROR**

  System error occurred (see **errno**).

- **E\_UNKNOWN\_COMMAND**

  The menu driver code saw an unknown request code.

## NOTES

The header file **\<menu.h\>** automatically includes the header files **\<curses.h\>** and **\<eti.h\>**.

In your library list, libmenu.a should be before libncurses.a; that is, you want to say \`-lmenu -lncurses', not the other way around (which would usually give a link-error).

## PORTABILITY

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

## AUTHORS

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

## SEE ALSO

**curses**(3X) and related pages whose names begin "menu\_" for detailed descriptions of the entry points.

This describes **ncurses** version @NCURSES\_MAJOR@.@NCURSES\_MINOR@ (patch @NCURSES\_PATCH@).
