This file lists people who have made significant contributions to the
nano editor.  Please see the ChangeLog for specific changes by author.
-------------------------------------------------------------------------

Chris Allegretta <chrisa@asty.org>
	* Original program author, former and current maintainer.

David Lawrence Ramsey <pooka109@gmail.com>
	* Former stable series maintainer.  Multiple buffer support,
	  operating dir (-o) option, bug fixes for display routines,
	  wrapping code, spelling fixes, const mode, parts of the
	  UTF-8 support, and various other fixes.

Jordi Mallach <jordi@gnu.org>
	* Debian package maintainer, fellow bug squasher.
	* Internationalization support head, ca.po maintainer.

Adam Rogoyski <rogoyski@cs.utexas.edu>
	* New write_file() function, read_file() optimization, mouse
	  support, resize support, nohelp (-x) option, justify function,
	  follow symlink option and bugfixes, and much more.

Robert Siemborski <rjs3@andrew.cmu.edu>
	* Miscellaneous cut, display, replace, and other bug fixes,
	  original and new "magic line" code, read_line() function,
	  new edit display routines.

Rocco Corsi <rocco.corsi@sympatico.ca>
	* Internal spelling code, many optimizations and bug fixes for
	  findnextstr() and search-related functions, various display
	  and file handling fixes.

David Benbennick <dbenbenn@math.cornell.edu>
	* Wrap and justify bugfixes/enhancements, new color syntax
	  code, memleak fixes, parts of the UTF-8 support, and other
	  miscellaneous fixes.

Mike Frysinger <vapier@gentoo.org>
	* Gentoo package maintainer.  Whitespace display mode,
	  --enable-utf8/--disable-utf8 configure options for ncurses,
	  many new color regexes and improvements to existing color
	  regexes for nanorc.sample, and miscellaneous bug fixes.

Mark Majeres <mark@engine12.com>
	* A functional undo/redo system, and coloring nano's interface.

Benno Schulenberg <bensberg@justemail.net>
	* A bunch of small bug fixes, the cutword routines, some extra
	  key bindings.  Current maintainer.
