
	GNU nano - an enhanced clone of the Pico text editor.

Overview

     The nano project was started because of a few "problems" with the
     wonderfully easy-to-use and friendly Pico text editor.

     First and foremost is its license: the Pine suite does not use the
     GPL or a GPL-friendly license, and has unclear restrictions on
     redistribution.  Because of this, Pine and Pico are not included
     with many GNU/Linux distributions.  Also, other features (like goto
     line number or search and replace) were unavailable until recently
     or require a command line flag.  Yuck.

     nano aims to solve these problems by emulating the functionality of
     Pico as closely as possible while addressing the problems above and
     perhaps providing other extra functionality.

     The nano editor is now an official GNU package.  For more
     information on GNU and the Free Software Foundation please see
     http://www.gnu.org.

How to compile and install nano

     Download the nano source code, then:
     tar zxvf nano-x.y.z.tar.gz
     cd nano-x.y.z
     ./configure
     make
     make install

     It's that simple.  Use --prefix with configure to override the
     default installation directory of /usr/local.

Web Page

	http://www.nano-editor.org/

Mailing List and Bug Reports

	Savannah hosts all the nano-related mailing-lists.

	+ info-nano@gnu.org is a very low traffic list
	  used to announce new nano versions or other important
	  information about the project.
	+ help-nano@gnu.org is for those seeking to get help without
	  wanting to hear about the technical details of its
	  development.
	+ nano-devel@gnu.org is the list used by the people
	  that make nano and a general development discussion list, with
	  moderate traffic.

	To subscribe, send email to nano-<name>-request@gnu.org with a
	subject of "subscribe", where <name> is the list you want to
	subscribe to.

	For general bug reports, send a description of the problem to
	nano@nano-editor.org or directly to the development list.

Current Status

	GNU nano has reached its second stable milestone, 1.2.x.
	Development of new features continues in the 1.3.x branch, while
	1.2.x versions are dedicated to bug-fixing and polishing.

   Chris Allegretta (chrisa@asty.org)

$Id$
