Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
An ncurses binding for node.js
JavaScript C++
tree: d86f365d22

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
deps/ncurses
examples
.gitignore
AUTHORS
LICENSE
README.md
ncconsts.js
ncurses.cc
package.json
wscript

README.md

Description

node-ncurses is an ncurses binding for node.js.

Requirements

  • node.js -- v0.1.94+
  • A compatible terminal (OSX users see the note below)

To build node-curses:

node-waf configure build

Special note for unknown terminals

If your terminal is not in terminfo's database, you'll get this error while attempting to execute any of the node-ncurses examples: "Error opening terminal: xxxxx." This error has been known to at least occur on OSX 10.6.* with the default Terminal.app. The fix for this is to add your terminal to the terminfo database like so:

mkdir ~/.terminfo
infocmp -L > foo
tic foo
rm foo

If no errors occurred while executing those commands, then you are all set and should be able to execute node-ncurses examples now. If not, send me a message and let me know.

Terminology

Functions that accept window/screen coordinates have the "x" and "y" parameters reversed so that it's "y" and then "x." It seems a bit unintuitive at first, but after you remember that the "y" axis is just rows and the "x" is the columns and [0,0] is the top-left corner of the screen, it doesn't take long to remember the order since the "row, column" format is used in a lot of other places outside of ncurses.

With that said, from here on out I'll be using the terms "row" and "column" instead of "y" and "x", respectively.

Also, stdscr is the name of the first window that is created and fills the terminal/screen by default.

API Documentation

node-ncurses exposes only one class: ncWindow.

Special data types

  • Result is simply an integer indicating success or failure of the function. In ncurses land this is either the OK (0) or ERR (-1) constant.

  • Attributes is an unsigned integer used as a bitmask for holding window attributes (see ncconsts.js for the available values).

  • ACS_Character is a special character used when dealing with line graphics. These are automatically determined at runtime by ncurses and thus cannot be defined as constants. Instead, they are accessible statically via the ncWindow class after at least one window has been created (so that ncurses has initialized this special character set). See the Additional notes at the bottom for a list of the available characters.

    • An ACS_Character can currently be retrieved by using the ACS property of an ncWindow instance (i.e. "var win = new ncWindow(); win.hline(win.cols, win.ACS.DIAMOND);")

ncWindow Events

  • inputChar(String, Integer) - Called when the user has pressed a key on the keyboard. The first parameter is a string containing the character and the second parameter is the integer value of the character.

ncWindow Functions

Global/Terminal-specific

  • colorPair(Integer[, Integer, Integer]) - Integer - The first value specifies a color pair number in the color palette. If the second and third values are provided, that color pair's foreground and background colors are set respectively. The color pair number is always returned.

  • resetScreen() - (void) - Restores the terminal after using ncurses. This function is automatically called when the last window is closed and thus should never be used except when handling unexpected exceptions (i.e. in node.js's uncaughtException event) so that you can safely restore the terminal back to normal.

Window-specific

  • clearok(Boolean) - Result - If true is passed in, the next call to refresh() will clear the screen completely and redraw the entire screen from scratch.

  • scrollok(Boolean) - Result - Controls what happens when the cursor of a window is moved off the edge of the window or scrolling region, either as a result of a newline action on the bottom line, or typing the last character of the last row. If true is passed in, the window is scrolled up one line (Note: that in order to get the physical scrolling effect on the terminal, it is also necessary to call idlok()), otherwise the cursor is left at the bottom line.

  • idlok(Boolean) - Result - If true is passed in, ncurses considers using the hardware insert/delete line feature of the terminal (if available). Otherwise if false is passed in, hardware line insertion and deletion is disabled. This option should be enabled only if the application needs insert/delete line, for example, for a screen editor. It is disabled by default because insert/delete line tends to be visually annoying when used in applications where it isn't really needed. If insert/delete line cannot be used, ncurses redraws the changed portions of all lines.

  • idcok(Boolean) - Result - If true is passed in, ncurses considers using the hardware insert/delete character feature of the terminal (if available). Otherwise if false is passed in, ncurses no longer considers using the hardware insert/delete character feature of the terminal. Use of character insert/delete is enabled by default.

  • leaveok(Boolean) - Result - Normally, the hardware cursor is left at the location of the window cursor being refreshed. Passing in true to this function allows the cursor to be left wherever the update happens to leave it. It is useful for applications where the cursor is not used, since it reduces the need for cursor motions. If possible, the cursor is made invisible when this function is called.

  • immedok(Boolean) - Result - If true is passed in, any change in the virtual window, such as the ones caused by addch(), clrtobot(), scroll(), etc., automatically cause a call to refresh(). However, it may degrade performance considerably, due to repeated calls to refresh(). It is disabled by default.

  • standout(Boolean) - Result - If true is passed in, the standout Attribute is enabled. Otherwise, it is disabled.

  • syncok(Boolean) - Result - If true is passed in, syncup() is automatically caled whenever there is a change in this window.

  • syncdown() - Result - Touches each location in the window that has been touched in any of its ancestor windows. This function is called by refresh(), so it should almost never be necessary to call it manually.

  • syncup() - Result - Touches all locations in ancestors of this window that are changed in this window.

  • cursyncup() - Result - Updates the current cursor position of all the ancestors of the window to reflect the current cursor position of the window.

  • hide() - (void) - Hides the window.

  • show() - (void) - Un-hides the window.

  • top() - (void) - Bring the window to the front.

  • bottom() - (void) - Send the window to the back (stdscr is always the bottom-most window, so this function will actually make the window the bottom-most window right above stdscr).

  • move(Integer, Integer) - (void) - Moves the window to the specified row and column respectively.

  • refresh() - Result - Update the physical screen to match that of the virtual screen.

  • redraw() - (void) - Redraws all windows.

  • frame([String[, String]]) - (void) - Draws a frame around the window and calls label() with the optional parameters.

  • boldframe([String[, String]]) - (void) - Same as frame(), except the frame is highlighted.

  • label([String[, String]]) - (void) - Displays a title at the top and bottom of the window with the first optional parameter being the title text to display centered at the top row of the window and the second optional parameter being the title text to display centered at the bottom row of the window.

  • centertext(Integer, String) - (void) - Display a centered string at the row specified by the first parameter.

  • cursor(Integer, Integer) - Result - Moves the cursor to the specified row and column respectively.

  • insertln() - Result - Inserts an empty row above the current row.

  • insdelln([Integer=1]) - Result - If the passed in value is greater than zero, that many rows will be inserted above the current row. If the passed in value is less than zero, that many rows are deleted, beginning with the current row.

  • insstr(String[, Integer=-1]) - Result - Insert the string into the window before the current cursor position. Insert stops at the end of the string or when the limit indicated by the second parameter is reached. If the second parameter is negative, the limit is ignored.

    • insstr(Integer, Integer, String[, Integer=-1]) - Result - Moves the cursor to the row and column specified by the first two parameters respectively, then calls the version of insstr() above with the rest of the parameters.
  • attron(Attributes) - Result - Switch on the specified window attributes.

  • attroff(Attributes) - Result - Switch off the specified window attributes.

  • attrset(Attributes) - Result - Sets the window's attributes to be exactly that of the attributes specified.

  • attrget() - Attributes - Get the window's current set of attributes.

  • box([ACS_Character=0[, ACS_Character=0]]) - Result - Draws a box around the window using the optionally specified parameters as the vertical and horizontal characters respectively. If a zero is given for any of the parameters, ncurses will use the POSIX default characters instead (See Additional notes).

  • border([ACS_Character=0[, ACS_Character=0[, ACS_Character=0[, ACS_Character=0[, ACS_Character=0[, ACS_Character=0[, ACS_Character=0[, ACS_Character=0]]]]]]]]) - Result - Draws a border around the window using the optionally specified parameters as the left, right, top, bottom, top left, top right, bottom left, bottom right characters respectively. If a zero is given for any of the parameters, ncurses will use the POSIX default characters instead (See Additional notes).

  • hline(Integer[, ACS_Character=0]) - Result - Draws a horizontal line on the current row whose length is determined by the first parameter. The second parameter specifies the character to be used when drawing the line. If a zero is given for the second parameter, ncurses will use the POSIX default characters instead (See Additional notes).

  • vline(Integer[, ACS_Character=0]) - Result - Draws a vertical line on the current column whose length is determined by the first parameter. The second parameter specifies the character to be used when drawing the line. If a zero is given for the second parameter, ncurses will use the POSIX default characters instead (See Additional notes).

  • erase() - Result - Copies blanks to every position in the window, clearing the screen.

  • clear() - Result - Similar to erase(), but it also calls clearok(true), so that the screen is cleared completely on the next call to refresh() for the window and is repainted from scratch.

  • clrtobot() - Result - Clears to the end of the window.

  • clrtoeol() - Result - Clears to the end of the current row.

  • delch() - Result - Deletes the character under the cursor.

    • delch(Integer, Integer) - Result - Moves the cursor to the row and column specified by the first two parameters respectively, then calls the version of delch() above with the rest of the parameters.
  • deleteln() - Result - Deletes the current row.

  • scroll([Integer=1]) - Result - Scrolls the amount of lines specified. Positive values scroll up and negative values scroll down.

  • setscrreg(Integer, Integer) - Result - Sets the scrolling region of a window using the first parameter as the starting row and the second parameter as the ending row (both inclusive).

  • touchlines(Integer, Integer[, Boolean=true]) - Result - Marks rows as having been modified or unmodified. The first parameter is the starting row. The second parameter is the number of rows after the starting row. If the third parameter is true, then the lines are marked as modified, otherwise they are marked as unmodified.

  • is_linetouched(Integer) - Boolean - Indicates whether the specified row has been marked as modified.

  • redrawln(Integer, Integer) - Result - Redraws a number of rows specified by the second parameter, starting with the row specified in the first parameter.

  • touch() - Result - Marks the entire window as having been modified.

  • untouch() - Result - Marks the entire window as having been unmodified.

  • resize(Integer, Integer) - Result - Resizes the window to the specified number of rows and columns respectively.

  • print(String) - Result - Writes the specified string at the current cursor position.

    • print(Integer, Integer, String) - Result - Moves the cursor to the row and column specified by the first two parameters respectively, then calls the version of print() above with the rest of the parameters.
  • addstr(String[, Integer=-1]) - Result - Writes the specified string at the current cursor position. Writing stops at the end of the string or when the limit indicated by the second parameter is reached. If the second parameter is negative, the limit is ignored.

    • addstr(Integer, Integer, String[, Integer=-1]) - Result - Moves the cursor to the row and column specified by the first two parameters respectively, then calls the version of addstr() above with the rest of the parameters.
  • close() - Result - Destroys the window and any of its children. Only call this once and when you are completely finished with the window.

ncWindow Properties

Global/Terminal-specific

  • echo - Boolean [Read/Write] - Enable/disable local echoing of keyboard input
  • showCursor - Boolean [Read/Write] - Show/hide the cursor
  • raw - Boolean [Read/Write] - Enable/disable terminal's raw mode
  • lines - Integer [Read-only] - The total number of rows of the terminal
  • cols - Integer [Read-only] - The total number of columns of the terminal
  • tabsize - Integer [Read-only] - The terminal's tab size
  • hasMouse - Boolean [Read-only] - Indicates whether the terminal supports mouse (clicks) functionality
  • hasColors - Boolean [Read-only] - Indicates whether the terminal supports colors
  • hasColors - Boolean [Read-only] - Indicates whether the terminal supports colors
  • maxColorPairs - Integer [Read-only] - The maximum number of foreground-background color pairs supported by the terminal
  • ACS - Array [Read-only] - Contains a hash of all of the available ACS characters (for line graphics) described in the Additional notes section of this README

Window-specific

  • bkgd - Attributes [Read/Write] - Get/set the window's background attributes
  • hidden - Boolean [Read-only] - Is this window hidden?
  • height - Integer [Read-only] - Current window height
  • width - Integer [Read-only] - Current window width
  • begx - Integer [Read-only] - Column of the top-left corner of the window, relative to stdscr
  • begy - Integer [Read-only] - Row of the top-left corner of the window, relative to stdscr
  • curx - Integer [Read-only] - Column of the current cursor position
  • cury - Integer [Read-only] - Row of the current cursor position
  • maxx - Integer [Read-only] - Largest column number for this window
  • maxy - Integer [Read-only] - Largest row number for this window
  • touched - Integer [Read-only] - Indicates whether the window has been marked as modified

Additional notes

Using ncurses with X

A resize operation in X sends SIGWINCH to the running application. The ncurses library does not catch this signal, because it cannot in general know how you want the screen re-painted. You will have to write the SIGWINCH handler yourself.

At minimum, your SIGWINCH handler should do a clearok(), followed by a refresh() on each of your windows.

ACS_Character descriptions

Character Name   POSIX Default  Description
--------------   -------------  -----------
ULCORNER              +         upper left-hand corner
LLCORNER              +         lower left-hand corner
URCORNER              +         upper right-hand corner
LRCORNER              +         lower right-hand corner
RTEE                  +         right tee
LTEE                  +         left tee
BTEE                  +         bottom tee
TTEE                  +         top tee
HLINE                 -         horizontal line
VLINE                 |         vertical line
PLUS                  +         plus
S1                    -         scan line 1
S9                    _         scan line 9
DIAMOND               +         diamond
CKBOARD               :         checker board (stipple)
DEGREE                '         degree symbol
PLMINUS               #         plus/minus
BULLET                o         bullet
LARROW                <         arrow pointing left
RARROW                >         arrow pointing right
DARROW                v         arrow pointing down
UARROW                ^         arrow pointing up
BOARD                 #         board of squares
LANTERN               #         lantern symbol
BLOCK                 #         solid square block
Something went wrong with that request. Please try again.