Curses interface

From NetHackWiki
Jump to navigation Jump to search

The curses interface is an alternate text-mode user interface for NetHack that uses high-level curses routines to control the display. The curses interface has additional features compared to the traditional tty interface, such as dynamic window resizing, dynamic configurable placement of status and message windows, and mouse support.


Some features of this interface compared to the traditional tty interface include:

  • Dynamic window resizing (e.g. maximizing a terminal window)
  • Dynamic configurable placement of status and message windows, relative to the map
  • Makes better use of larger and smaller terminal windows, such as a multi-line message window if there is space
  • Optional mouse support (click to move player, etc)
  • Menu text search/selection
  • Fancier display (e.g. window borders, optional popup dialogs, splash screen, and better menus)
  • Improved keyboard navigation of menus
  • "symset:curses" option for fancier line-drawing characters for drawing the dungeon—this should work on most terminals and platforms
  • Ability to have a permanent inventory sidebar by enabling perm_invent

Public servers

The following public servers utilize the curses interface:

NetHack 4 and its derivatives NetHack Fourk and FIQHack use a libuncursed interface, which appears similar to curses.

Configuration options

Some configuration options that are specific to the curses windowport or otherwise relevant are shown below.

OPTIONS=windowtype:curses Use this to enable curses interface, if the binary was compiled with multiple window interfaces, and curses is not the default.
OPTIONS=symset:IBMgraphics Set this for Windows systems, or for PDCurses for SDL on any system. The latter uses a cp437 font, which works with this option. For 3.4.3, use OPTIONS=IBMgraphics.
OPTIONS=symset:curses Set this if IBMgraphics above won't work for your system. Mutually exclusive with the above option, and should work on nearly any system. For 3.4.3, use OPTIONS=cursesgraphics.


Optionally specify the alignment of the message and status windows relative to the map window. If not specified, the code will default to the locations used in the tty interface: message window on top, and status window on bottom. Placing either of these on the right or left really only works well for wider terminal windows.
OPTIONS=popup_dialog Use a small popup "window" for short prompts, e.g. "Really save?".

If this is not set, the message window will be used for these as is done for the tty interface.



Specify the initial window size for NetHack in units of characters.

This is supported on PDCurses for SDL as well as PDCurses for Windows.

OPTIONS=windowborders:2 Controls the usage of window borders for the main NetHack windows (message, map, and status windows).

A value of 0 forces the borders to be off, a value of 1 forces them to be drawn, and a value of 2 allows the code to decide if they should be drawn based on the size of the terminal window.

OPTIONS=splash_screen Whether or not to display a fancy ascii-graphics splash screen on startup.
OPTIONS=petattr:u This controls what text attributes are used to highlight any pets. Any combination of single letters representing each text attribute may be used. Not all attributes work on all terminals.

Attributes may be one or more of: Bold, Inverse, Underline, blinK, iTalic, Rightline, or Leftline. The default is underline.

OPTIONS=guicolor Controls whether color and attributes are used for menu headers, window borders, message text, etc. This is separate from the color option, which only controls the color of the map itself.
OPTIONS=mouse_support Use the mouse for moving around. This option defaults to false.
OPTIONS=perm_invent Show a permanent inventory window as a sidebar.


Karl Garrison developed the curses interface as a patch for NetHack 3.4.3, and both NAO and hardfought incorporated the curses interface patch in their servers. In NetHack 3.6.2, the devteam incorporated the curses interface into the vanilla codebase.

3.4.3 Options

For NetHack 3.4.3 and some derived variants, OPTIONS=classic_status is a boolean option. If FALSE, the status bar has 3 lines. If TRUE, the status display has 2 lines. The default value is TRUE.

Historical Links

The following links are of historical value only: