World Library  
Flag as Inappropriate
Email this Article


Article Id: WHEBN0000022091
Reproduction Date:

Title: Ncurses  
Author: World Heritage Encyclopedia
Language: English
Subject: Terminfo, SMG$, Ncurses, Alsamixer, Termcap
Collection: C Libraries, Free Software Programmed in Ada, Free Software Programmed in C, Gnu Project Software, Ncurses, Software Using the Mit License, Termcap, Terminfo
Publisher: World Heritage Encyclopedia


ncurses-based menuconfig
Developer(s) GNU Project
Initial release 1993 (1993)
Stable release 5.9 / 4 April 2011 (2011-04-04)
Operating system POSIX
Type Widget toolkit
License X11 License[1]
Website .html/ncurses/ncurses/

ncurses (new curses) is a programming library that provides an API which allows the programmer to write text-based user interfaces in a terminal-independent manner. It is a toolkit for developing "GUI-like" application software that runs under a terminal emulator. It also optimizes screen changes, in order to reduce the latency experienced when using remote shells.


  • History 1
    • curses 1.1
    • pcurses 1.2
    • ncurses 1.3
  • Terminal database 2
  • License 3
  • Programs using ncurses 4
  • See also 5
  • References 6
  • External links 7
    • Programming Introductions 7.1
    • Toolkits 7.2
    • Language bindings 7.3
    • Distributions and packages 7.4


The N in ncurses comes from the word new. This is because ncurses is a free software emulation (clone) of the System V Release 4.0 (SVr4) curses, which was itself an enhancement over the discontinued classic 4.4 BSD curses.[2] The XSI Curses standard issued by X/Open is explicitly and closely modeled on System V.


The first curses library was developed at the University of California at Berkeley, for a BSD operating system, around 1980 to support a screen-oriented game. It originally used the termcap library, which was used in other programs, such as the vi editor.[2]

The success of the BSD curses library prompted Bell Labs to release an enhanced curses library in their System III and System V Release 1 Unix systems. This library was more powerful and instead of using termcap, it used terminfo. However, due to AT&T policy regarding source-code distribution, this improved curses library did not have much acceptance in the BSD community.[2]


Around 1982, Pavel Curtis started work on a freeware clone of the Bell Labs curses, named pcurses, which was maintained by various people through 1986.[3]


The pcurses library was further improved when Zeyd Ben-Halim took over the development effort in late 1991.[2][3][4] The new library was released as ncurses in November 1993, with version 1.8.1 as the first major release. Subsequent work, through version 1.8.8 (1995), was driven by Eric S. Raymond, who added the form and menu libraries written by Juergen Pfeifer.[5] Since 1996, it has been maintained by Thomas E. Dickey.[3]

Most ncurses calls can be easily ported to the old curses. System V curses implementations can support BSD curses programs with just a recompilation.[6] However, a few areas are problematic, such as handling terminal resizing, since no counterpart exists in the old curses.

Terminal database

Ncurses can use either terminfo (with extensible data) or termcap. Other implementations of curses generally use terminfo; a minority use termcap. Few (mytinfo was an older exception[7]) use both.


Ncurses is a part of the GNU Project. It is one of the few GNU files not distributed under the GNU GPL or LGPL; it is distributed under a permissive free software licence, similar to the MIT License.[8] This is due to the agreement made with the Free Software Foundation at the time the developers assigned their copyright.

When the agreement was made to pass on the rights to the FSF, there was a clause that stated

The Foundation promises that all distribution of the Package, or of any work "based on the Package", that takes place under the control of the Foundation or its agents or assignees, shall be on terms that explicitly and perpetually permit anyone possessing a copy of the work to which the terms apply, and possessing accurate notice of these terms, to redistribute copies of the work to anyone on the same terms.[8]

According to the maintainer Thomas E. Dickey, this precludes relicensing to the GPL in any version, since it would place restrictions on the programs that will be able to link to the libraries.[8]

Programs using ncurses

There are hundreds of programs which use ncurses.[9][10] Some, such as GNU Screen and w3m, use only the termcap interface, performing screen management within the application. Others, such as GNU Midnight Commander and YaST, use the curses programming interface.

See also


  1. ^ "NCURSES — Licensing". Retrieved July 9, 2013. 
  2. ^ a b c d Eric S. Raymond (September 1995). "ncurses: Portable Screen-Handling for Linux". Linux Journal. 
  3. ^ a b c Thomas E. Dickey (December 1996). "NCURSES - New Curses". 
  4. ^ The README file in ncurses 1.8.1 states "v0.1 July 31, 1992" and "v1.8.1 November 5, 1993", which agrees with the NEWS (changelog) file
  5. ^ NCURSES - Frequently Asked Questions (FAQ): Who wrote NCURSES?
  6. ^ A Hacker's Guide to Ncurses Internals
  7. ^ Ross Ridge (December 27, 1992). newsgroup"comp.sources.unix posting to mytinfo". Internet Systems Consortium, Inc. 
  8. ^ a b c NCURSES - Frequently Asked Questions (FAQ): Is it GPL'd?
  9. ^ Search results: +ncurses on at the Wayback Machine (archived February 18, 2012)
  10. ^ "Projects tagged ‘ncurses’". ohloh. 

External links

  • Official website
  • NCURSES — Frequently Asked Questions (FAQ) by Thomas Dickey

Programming Introductions

  • Introduction "Writing Programs with NCURSES" by Eric S. Raymond and Zeyd M. Ben-Halim
  • ncurses Programming HOWTO ( and PDF version)
  • ncurses Beginner's Tutorial
  • A Hacker's Guide to NCURSES


  • NDK++ Development Kit for C++

Language bindings

  • Ada95Binding for
  • C#Binding for
  • Common LispBinding for ANSI
  • Free PascalBinding for
  • GoBinding for
  • GuileBinding for GNU
  • HaskellBinding for
  • JavaBinding for
  • JavaScriptBinding for
  • LuaBinding for
  • Node.jsBinding for
  • PerlBinding for
  • PHPTerminal Screen Control Functions for
    • Using Ncurses in PHP
  • PythonBinding for
  • RubyBinding for

Distributions and packages

  • Ncurses package for Windows – GnuWin32
This article was sourced from Creative Commons Attribution-ShareAlike License; additional terms may apply. World Heritage Encyclopedia content is assembled from numerous content providers, Open Access Publishing, and in compliance with The Fair Access to Science and Technology Research Act (FASTR), Wikimedia Foundation, Inc., Public Library of Science, The Encyclopedia of Life, Open Book Publishers (OBP), PubMed, U.S. National Library of Medicine, National Center for Biotechnology Information, U.S. National Library of Medicine, National Institutes of Health (NIH), U.S. Department of Health & Human Services, and, which sources content from all federal, state, local, tribal, and territorial government publication portals (.gov, .mil, .edu). Funding for and content contributors is made possible from the U.S. Congress, E-Government Act of 2002.
Crowd sourced content that is contributed to World Heritage Encyclopedia is peer reviewed and edited by our editorial staff to ensure quality scholarly research articles.
By using this site, you agree to the Terms of Use and Privacy Policy. World Heritage Encyclopedia™ is a registered trademark of the World Public Library Association, a non-profit organization.

Copyright © World Library Foundation. All rights reserved. eBooks from Project Gutenberg are sponsored by the World Library Foundation,
a 501c(4) Member's Support Non-Profit Organization, and is NOT affiliated with any governmental agency or department.