Curses interface

From NetHackWiki
Jump to: navigation, search

The Curses interface is an alternate text-mode interface for NetHack using 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
  • "cursesgraphics" option for fancier line-drawing characters for drawing the dungeon - this should work on most terminals/platforms
  • Ability to have a permanent inventory sidebar by enabling `perm_invent`

Public servers and the public servers of UnNetHack have the Curses interface installed as an alternative to the standard ASCII interface. Note, however, that has the curses interface available only in NetHack 3.4.3; NetHack 3.6.x does not support it here yet.

NetHack 4 and its derivatives NetHack Fourk and FIQHack use the curses interface by default; any server which hosts these variants supports it.

hardfought offers the curses interface on NetHack 3.4.3 and its variants (UnNetHack, SporkHack, dNetHack, GruntHack, and SLEX), NetHack4 and derivatives as above, and on NetHack 3.6.1.

Configuration Options

Some configuration options that are specific to or relevant to the curses windowport 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.


Set this for Windows systems, or for PDCurses for SDL on any system. The latter uses a cp437 font, which works with this option. Use the symset form on 3.6.x.


Set this if IBMgraphics above won't work for your system. Mutually exclusive with the above option, and should work on nearly any system. Use the symset form on 3.6.x.


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:3 Controls the usage of window borders for the main NetHack windows (message, map, and status windows).

A value of 1 forces the borders to be drawn, a value of 2 forces them to be off, and a value of 3 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.
OPTIONS=classic_status Whether to use a 2-line status display akin to tty display (TRUE), or a 3-line status bar similar to the one NetHack4 and its variants has (FALSE). On NetHack 3.x, classic_status defaults to TRUE. This option is currently ignored in NetHack 3.6.x.