2005.04.10 - GNU nano 1.3.7 claws its way to the top.  This release
		mostly contains bugfixes for the massive amount of new
		code in 1.3.6.  Among other things, nano builds with
		debug support again; going into the help browser at the
		"Read File" prompt no longer kicks you out of the prompt
		after you exit the help browser; paragraph searching no
		longer skips over certain cases of single-line
		paragraphs; the titlebar no longer cuts off some UTF-8
		strings prematurely; and the text displayed in the help
		browser is now wrapped as it was in nano 1.2.x, taking
		UTF-8 support into account.  New features include an
		--enable/disable-utf8 configure option to explicitly
		turn detection of UTF-8 support on or off, and sample
		regexes for C++ as well as C.  Have fun.

2005.03.20 - GNU nano 1.3.6 "shout it from the rooftops" is released.
		This release finally includes the long-awaited support
		for UTF-8.  Other new features include the ability to
		insert UTF-8 characters using verbatim input; the
		ability to delete all text from the cursor position to
		the end of the file via ^W^X as (patched) Pico does;
		improvements to input and output so that pasted text
		displays faster, improvements to the statusbar prompt so
		that more edit window shortcuts, including verbatim
		input and previous/next word search, work in it; a new
		option to allow using the formerly always-blank second
		line of the screen as part of the edit window; and the
		ability to refresh the help browser and file browser
		windows via Ctrl-L.  Notable bug fixes include a fix for
		a segfault when using full justify, and a fix for the
		long-standing bug where nano would keep running if the
		terminal it was in died unexpectedly.  Enjoy.

2004.11.22 - GNU nano 1.3.5 hurls itself forward.  New features in this
		release include the ability to replace only marked text
		when the mark is on, improvements to smooth scrolling so
		that it applies everywhere instead of just affecting the
		movement keys, improvements to how files are opened so
		that they are no longer displayed unnecessarily, support
		for multiple +LINE arguments in addition to multiple
		filenames on the command line, autodetection of the
		format to save a file in based on the format it was in
		when it was opened, the ability to toggle both ways
		between the "Read File" and "Execute Command" prompts
		and the "Search" and "Go to Line" prompts, and support
		for cross-compiling nano.  As for bug fixes, the
		"tabsize" nanorc option works again, mouse clicks on the
		shortcut list trigger the right shortcuts again,
		tab-completing a filename with %'s in it no longer
		causes a segfault, the internal spell checker no longer
		skips words after the cursor position when the cursor is
		in the middle of the file, and spell checking of only
		marked text now works properly.  Have fun with it.

2004.08.17 - GNU nano 1.3.4 marches forth after a false start.  This
		release mainly features fixes for the bugs that crept
		into the last release.  Among other things, nano now
		compiles again with certain options, quoted justify now
		works properly on systems without regex.h, full justify
		no longer segfaults when used on a file with no
		paragraphs, previous paragraph searching works properly
		again, tab completion is properly disabled when needed
		in restricted mode, Ctrl-C is no longer disabled after
		using the alternate spell checker, the permissions of a
		newly created file now match those of nano 1.2.x again,
		and replacing all text in a file now properly updates
		the screen in all cases.  New features include sample
		regexes for patch files, improvements to the sample
		regexes for C files, and support for strings 
		greater than 1023 characters and/or containing nulls in
		.nano_history.  Additionally, the full justify keystroke
		has been changed to match current Pico, and whitespace
		display mode is now turned off by default.  Enjoy.

2004.06.28 - GNU nano 1.3.3 marches forth.  There are several new
		features in this release, including a restricted mode
		that provides better security than just setting an
		operating directory, the ability to justify the entire
		file at once, support for a "smart" home key that can
		leap from the beginning of text on a line to the true
		beginning of the line (or the reverse) in one stroke,
		support for specifying an alternative spell checker in
		$SPELL, the ability to specify the characters used to
		display spaces and tabs so that they can easily be told
		apart, and the ability to specify the characters marking
		the ends of sentences as used in justification.  There
		are also several bug fixes; among other things,
		justification now keeps spaces at the ends of all but
		the last line of a paragraph as Pico does, saving a
		marked selection no longer changes the current filename
		to the filename the selection was saved under, resizing
		now works better and no longer corrupts the screen under
		slang, and the movement functions now avoid doing
		unnecessary redraws and hence work faster.  In short,
		there are a lot of new things to play with.  Enjoy.

2004.03.31 - GNU nano 1.3.2 is prepared for the void.  New features in
		this release include the ability to spell-check only
		marked text and the ability to save all backup files in
		a specified directory instead of wherever the original
		files are.  Bug fixes include a fix for a segfault when
		replacing certain regular expressions, fixes for some
		misbehavior when doing searches, minor fixes to verbatim
		input mode and keyboard input in general, better
		handling of window resizes at certain times, and
		allowing the mark to be saved properly again when
		switching between multiple file buffers.  nano has also
		been ported to the Tandem NonStop Kernel.  Have fun.

2004.01.09 - GNU nano 1.3.1 is outside the gates.  This release
		features, among other things, fixes for the input
		routines to deal with some problems they had, a
		reorganized shortcut list for the help browser, minor
		Pico compatibility improvements for the file browser,
		fixes for misbehavior when replacing certain regular
		expressions, and the ability to highlight those regular
		expressions properly.  It also allows searching without
		prompting to work in view mode, adds support for glib
		2.x for those systems that need it, updates the .spec
		file for the 1.3 branch, prompts you first when you try
		to save a file under a different name, and adds a new
		verbatim input mode that acts as ^V does under vi, but
		with additional Pico compatibility (explained in the
		FAQ).  Basically, a bunch of fixes and a few new
		features for your editor of choice.  Enjoy.

2003.10.22 - GNU nano 1.3.0 is loosed upon the world.  This is the first
		release in the unstable 1.3.x series, and as such it
		includes a lot of new features, including the addition
		of a -d option for those FreeBSD users with Backspace
		keys that act like Delete keys, the ability to repeat
		the last search without prompting, the ability to search
		for the beginning or end of a paragraph, new smooth
		paging routines to go with the smooth scrolling
		routines, and various improvements to the input and
		display routines to make them behave more intuitively.
		It also includes the usual load of bugfixes.  Enjoy.

2003.08.11 - GNU nano 1.2.2 is released, only four months since the
		last version :-).  This release includes fixes for
		broken regex detection, search history recall, and
		keypad handling with -K.  Debugging strings are no
		longer translated and comments denote where translations
		should be as short as possible (i.e, the statusbar).
		There are new examples for syntax highlighting, and
		documentation updates and fixes.  The 1.3.0 CVS tree
		will be opening soon for all your nano desires, so stay
		tuned!

2003.04.19 - Happy Easter! GNU nano 1.2.1 is released.  This release
		features a new check for broken regexec()
		implementations and some variable, function and macro
		cleanups.  Fixes are included for search history,
		cutting marked text, alt keyboard mode, and the usual
		translation and documentation updates.

2003.02.19 - GNU nano 1.2.0 is released.  Few changes from pre3, just
		some doc and translation updates, and bugfixes for
		justify and file conversion.  For those of you who
		haven't kept up with the 1.1 unstable series, v1.2
		brings nanorc support, color syntax highlighting,
		multiple file buffers, search/replace history and much
		much more.  Please read the UPGRADE file for details,
		and enjoy GNU nano 1.2.0.

2003.02.13 - GNU nano 1.1.99pre3 "The last testing version, no
		really!" is released.  This release includes fixes for
		wrapping (again), resizing, color syntax highlighting,
		rcfile parsing, the mouse code, more memory leaks, and
		some reversion of the code to get the user's home
		directory (nano will now again rely on $HOME).  There
		are also translation updates, a new manual page for the
		nanorc file, and an UPGRADE file detailing the changes
		since version 1.0.  Please submit reports for any bugs
		you might find to the development team
		(nano-devel@gnu.org), and enjoy nano almost-1.2.0 ;-)

2003.02.03 - GNU nano 1.1.99pre2 "bugs in my pockets, bugs in my
		shoes" is released.  There are, not surprisingly, only
		bugfixes in this release as we move toward the stable
		1.2.0 release.  Fixes are included for translatable
		string format, subexpression replacement, constant
		cursor position, invalid search regexes, justify, screen
		state on SIGHUP and SIGTERM, cutting to end cuts with
		long lines, many file browser and operating directory
		bugs, memory and file descriptor leaks, marker code,
		spell checker, the mouse code with long lines, multiple
		buffers and non-file open errors, replacement string
		length, and a silly but serious history message crash.
		There is also a drastic improvement in CPU utilization
		for the color regex code.
			Depending on the number of bugs found in this
		release, there may be a 1.1.99pre3 or RC1, or just a
		1.2.0 release.  Most of the major bugs seem to have been
		worked out, so if you are waiting for a good time to
		test nano before the official 1.2.0 release, this would
		be the one to use.  Happy bug hunting!

2003.01.17 - GNU nano 1.1.99pre1 "enough already" has been released.
		This release is, barring bug fixes and documentation
		updates, what version 1.2.0 has looked like, feature
		wise.  There will very likely be bugs, just due the
		volume of changes made in this release.  Search and
		replace string history has been added, including an
		option to log history to ~/.nano_history (-H,
		--historylog).  Because of this, the Pico incompatible
		search/replace string behavior that used to be the
		default has been deleted.  The old "pico" flag (-p) is
		now compatible with Pico's "preserve" mode for allowing
		flow control characters; by default this version ignores
		both ^Q and ^S.  The --disable-wrapping-as-root
		configure option has been forward ported from version
		1.0.x, and a new flag to enable all extra options
		(--enable-all) has been added.  The internal spell
		checker has been improved, meaning you will now be
		prompted only once for each unique capitalization of a
		given word.
			There have also been lots of bug fixes,
		including the "trying to insert a directory name in
		multibuffer mode bug", the ugly spell checker scrolling,
		the color code, cutting text crashes, justification,
		deleting the "magic line" via replace, and cursor
		positioning on the statusbar.  There have also been the
		usual helping of translation and documentation updates.
			Please send all new feedback on this release
		direct to the development list (nano-devel@gnu.org).

10/24/2002 - GNU nano 1.1.12 "Make Jordi happy" is released.  This
		release demonstrated that nano is starting to freeze for
		version 1.2.  New features include a Meta-Y toggle for
		syntax highlighting, pluralized i18n, and a handler for
		SIGTERM.  Nano now ignores XOFF (^S) to stop accidental
		lock-ups, and no longer references malloc.h.
			Also included are fixes for zero-length regex
		matches, segfaults with --disable-mouse, justification,
		memory corruption with the browser, version and help
		cmdline output, and translation updates.  Aside from the
		(currently up in the air) search history behavior, the
		next version of nano should be 1.1.99pre1.  Have fun!

10/01/2002 - GNU nano 1.1.11 "Oddball" is released.  This release
		features a new version of gettext, a new and improved
		syntax highlighting engine, and some updates for the
		nanorc.sample file.  The toggles for case sensitivity
		(Meta-C) and regular expressions (Meta-R) have changed
		in the search and replace prompts, multibuffer status is
		now displayed and can be toggled from the insert file
		menu, and some wrapping behavior that changed in 1.1.10
		has reverted.  The --enable-color warning was also made
		less severe, as the color syntax code has improved, and
		nano now uses extended regexes in the .nanorc file.
			Also included are fixes for various memory
		leaks, the operating directory option, username tab
		completion, the page_up and down arrow, go to previous
		word and next word, nanorc parser and line wrapping
		code.  Have fun!

07/25/2002 - At long last!  GNU nano 1.1.10 "What didn't we break?" is
		released.  This version of GNU nano features version
		0.11.2 of gettext, building with automake 1.6, some new
		code for displaying control characters, browser
		improvements, a new backup file option (-B, --backup), a
		new option to ignore rc files (-I,--ignorercfiles),
		compatibility with -pedantic, handling null characters
		before EOF, a slightly sportier nanorc.sample and more.
			Fixes are included included for justification,
		the reading and writing file routines, resizing and fill
		length, millions of memory leaks, the usage screen was
		updated, and the the --quotestr and --regexp really work
		now ;-)  Enjoy :)

05/12/2002 - GNU nano 1.1.9 is released, happy Mother's Day!  This
		release includes many new features, including a prepend
		mode (^O,M-P), a new "syntax" command in the .nanorc to
		allow multiple syntax highlighting types, and a new -Y,
		--syntax flag to set a specific one if there's no
		filename regex to match it against (i.e, w/mutt).  The
		^space and M-space keys will now show up in the help
		menu, which itself has been tweaked a bit, and many more
		configure options should now cooperate (like the odd
		pairing of --enable-tiny and --enable-multibuffer).  The
		marker should now work when using multiple buffers, and
		the huge memory leak in color syntax highlighting has
		been fixed.  A lot of new stuff for everyone's favorite
		text editor ;)  Have fun!

03/30/2002 - GNU nano 1.1.8 is released.  New features include an
		"Insert Output of External Command", ^R^X, and a .spec
		file is now included in the distribution.  There are
		cleanups in the usage code, fixes for regex parsing, the
		file browser, the NO_CONVERT auto-detect, indented
		justification, the internal spell checker, and a serious
		bug where reading a file of 0 lines would hang nano.
		Also, the "show position" code now shows the starting
		column as 1 instead of 0.  Have fun!

03/05/2002 - GNU nano 1.1.7 "lets change everything and see what breaks"
		is released.  New features include new flags
		-N,--noconvert to stop any file format conversion and
		-Q, --quotestr for the new quoted text justification, a
		new tempnam() implementation to avoid silly warnings,
		DOS and Mac file options in the Write File dialog,
		multiple save files (file.1) for abnormal exits, ^C now
		shows column as well as character position, and
		multibuffer allows duplicate files, even unnamed ones.
		Also, the static shortcut and toggle lengths are
		history, nano now reads $SYSCONFDIR/nanorc if rc file
		support is enabled, and nano is now built with (and
		requires for rebuilding) autoconf 2.5.
			This release also includes fixes for some memory
		leaks, detecting DOS and Mac file format, justification,
		suspending keys, search & replace under various
		conditions, variable width for shortcuts, and the usual
		ton of translation updates.

01/25/2002 - GNU nano 1.1.6 is released.  Lots of new features in this
		release.  New Meta-keys were added as alternates for
		control sequences: Meta-A for the marker key (^^), and
		Meta-G for the 'goto dir' key in the file browser (^_).
		The color syntax highlighting now supports multiple
		lines via start="regex" end="regex" syntax, and the
		.nanorc regex format itself has changed.  Also, the
		gettext code was upgraded to version 0.10.40, and nano
		will now display a message if only occurrence of a given
		search exists.
			For bugfixes, there are fixes for spelling,
		stray newlines in the usage() function, suspend issues
		with tcsh, auto-indent and wrapping clashes, ugly code
		in rcfile.c, global variable compatibility with AIX.
		There are also oodles of translation updates.  Have fun
		with it.

01/05/2002 - GNU nano 1.1.5 is out.  The main new feature in this
		release is the changed behavior of the keypad.  Nano now
		does the Right Thing and used keypad() by default.  If
		you wish to use the keypad arrow keys in certain
		terminals, you may use the -K or --keypad flag to use
		the old behavior.  Users of other OSes should see better
		handling of their non-keypad keys in this release. Other
		changes include more Hurd fixes, fixes parsing the
		.nanorc, display fixes for the color syntax
		highlighting, gettext stabilization and many translation
		updates.  This is almost like a stable release, much
		like in the 0.9.x series when every other release was
		the most stable one :)  Have fun!

12/11/2001 - GNU nano 1.1.4 is released.  This release contains
		rudimentary color syntax support (but it's still
		broken), compatibility fixes for the Hurd and FreeBSD,
		spell checker and wrapping fixes, and more.  It seems
		that the amount of interest in the code is inversely
		proportional to the amount of time since last release,
		so it's time to show the world all the changes since
		1.1.3 ;)  Have fun with it!

10/26/2001 - GNU nano 1.1.3 is released.  As far as new features go,
		the help system is now available for all functions in
		the editor.  Also, nano will also now print a message on
		the status bar when it automatically converts a file
		from Mac or DOS format, and trying to load a file that
		has already been loaded in multibuffer mode will now
		also cause an error message.  There is now a "goto
		previous word" which you can use by hitting Meta-Space
		Bar.
			As for fixes, a SEVERE bug in the null_at code
		which discarded the memory address of reallocated memory
		has been fixed.  This is probably the biggest bug fix in
		well over the last year of development.  There are also
		some display fixes for when the screen shouldn't center
		itself on cut or uncut text.  Also, the comments in the
		header files incorrectly said that nano was distributed
		under version 1 of the GPL when the accompanying license
		was the GPLv2.
			If you're using nano-1.1, it is highly
		recommended you upgrade to this release.  If using 1.0,
		wait for version 1.0.6 which should be available early
		next week.  Enjoy!

10/03/2001 - GNU nano 1.1.2 is out there.  Many new features in this
		release, including support for auto-converting from DOS
		and Mac formatted files, as well as toggles for writing
		out files in these formats.  Pico's -o flag has been
		implemented, as has some new smooth scrolling code
		(which can be used in place of the default jerky
		scrolling behavior).  Also, there is now a "find
		matching bracket/brace/etc" feature (Meta-]).  The
		.nanorc file now accepts setting the tabsize, and the
		help text at the bottom of the editor is now better
		spaced out in the search/replace prompts.  There are
		also the usual helping of bugfixes, translation updates
		and, surely a bug or two.  You better get ready!

07/28/2001 - GNU nano 1.1.1 is released.  Our second 1.1 unstable
		release features many bugfixes from the initial release,
		in particular fixes for the multibuffer code, and
		various compiler macro fixes.  The shortcut lists for
		the search and replace prompts are a little more logical
		(with cancel the last option again), and the included
		gettext was re-downgraded to 0.10.35 due to problems on
		the PPC platform.  GNU nano now includes its own aclocal
		macros in the m4/ directory to allow rebuilding the
		configure script to work on platforms regardless of
		their gettext version.

07/15/2001 - GNU nano 1.1.0 is released.  This is the first release
		in the 1.1.x unstable series of GNU nano.  It
		incorporates all changes up to the 1.0.3 release, and
		also includes many many new features, including
		appending to as well as overwriting files, writing
		marked text to a separate file, dynamic wrap length,
		lots more compatibility with Pico, and new optional
		features like .nanorc file support and multiple file
		buffers!  All in all, plenty of new stuff that's sure to
		introduce lots of bugs ;-)  Have fun with it, but be
		careful, unstable means unstable.

04/06/2001 - GNU nano 1.0.1 is out there.  The only new feature is a
		configure option for those who want to disable all word
		wrapping from nano, --disable-wrapping.  Bug fixes this
		release include some bugs with autoconf and i18n, and
		several fixes in the file browser including a segfault
		on Solaris, symlinks to directories now work properly,
		and nano now sorts files case insensitively like Pilot.
		Have fun with it.

03/22/2001 - GNU Nano 1.0 is released!  The autoindent wrapping bug
		has been fixed, as well as strange bug when using Pico
		mode and regex search.  There have also been some minor
		spelling and documentation updates.  As stated on the
		website, there are currently no known bugs with nano,
		but some will pop up eventually and they will be
		addressed in subsequent releases.  We hope you enjoy
		this first stable release of nano, and as always,
		feedback is welcome! nano@nano-editor.org.

02/19/2001 - Nano 0.9.99pre3 brings a lot of changes!  The most
		important being that nano is now officially a GNU
		program.  Some changes have been made for GNU
		compatibility (like the default list of shortcuts, "^G
		Get Help" is now Listed and "^_ Goto Line" is not).  The
		Yes/No/All keys have finally been internationalized
		also.  All in all, quite a few changes, considering nano
		is supposed to be in a code freeze.  But there are the
		usual helping of bugfixes, a nasty bug when cutting text
		in -k mode and some compatibility issues with older
		ncurses libraries have also been fixed.  All in all, a
		lot to see.

01/31/2001 - Nano 0.9.99pre2 is released.  Not surprisingly, all that is
		new is bugfixes, bugfixes, bugfixes.  There were a few
		cleanups in unneeded global variables and duplicate
		functions, but most is just fixing.  Specifically, there
		is now a preliminary (read: needs testing) fix for
		resizing the editor in any mode other than normal edit
		mode.  Other fixes include some more tab completion
		segfaults, and an silly segfault that occurred when
		successfully writing a file on the 2nd try (i.e, after
		an initial write error).  Slowly but surely, on toward
		1.0 we travel.

01/17/2001 - Nano 0.9.99pre1 is released.  This is the first pre-1.0
		release of nano, and is also the first release since the
		code freeze for nano 1.0.  Don't expect (or request) any
		new features between now and nano 1.0, only bugfixes,
		optimizations and doc/translation updates.  For fixes, a
		nasty segfault when trying to insert one's home
		directory (~), some checks for the NumLock key making
		the keypad go awry, window size sanity checks, many
		autoconf fixes, and support for the KDE konsole keypad
		layout.  Have fun.

01/07/2001 - Nano 0.9.25 is the "Just one more feature I swear!"
		release.  It includes one new feature that Pico has had
		forever, a built-in file browser.  Since not everyone
		may want this option, there is a --disable-browser
		option to the configure script as well.  Other changes
		include slightly different keypad handling, and a bugfix
		for crashes when tab completion in certain instances.
		Have fun and Happy New Year!

12/18/2000 - Nano 0.9.24 is released.  This version contains the last of
		the security fixes for writing files, as well as for a
		nasty segfault when nano is unable to open a file for
		reading, among other fixes.  Nano also now cowardly
		refuses to open device files, to stop silly things like
		trying to open /dev/zero.  New features include being
		Able to use Meta-Meta-<key> as Control-<key>, better
		HURD support, and some new flags have been added for
		Pico compatibility.  Upgrading to this version is highly
		recommended.

12/08/2000 - Nano 0.9.23 is the "race conditions bite" release.  The
		main reason for this release is the less-than-optimal
		fix for the security issue in nano with following
		symbolic links.  Hopefully this will fix the problem
		permanently.  The --nofollow option also works again for
		those who are real security nuts.  There are also some
		display and search fixes, and the --disable-spell
		function was renamed to --disable-speller to be in line
		with nano and Pico's "speller" term.

12/02/2000 - Nano 0.9.22 is released, with many more changes and
		additions than imaginable.  The most important change is
		a fix for unsafe handling of symbolic links which could
		lead to symlink attacks if nano were to exit because of
		an error or signal.  Also there are better checks when
		saving files.
		    As for new features, username tab completion is now
		working well, the internal spell checker code has been
		tweaked, you can now unjustify if you don't like how the
		justify formatted your text, and there are more options
		for configure, including --disable-spell and
		--disable-justify and --enable-extra (for those who like
		surprises).  All in all, a whole lot of changes in a
		little over a week.

11/23/2000 - Happy Thanksgiving!  Nano 0.9.21 is our "last version was
		a big turkey" release.  It fixes several bugs introduced
		by the previous version, as well as a few long- standing
		display bugs.  All 0.9.20 users are strongly encouraged
		to upgrade to this release.

11/18/2000 - Nano 0.9.20 is finally out the door.  Probably the biggest
		change is the brand new way nano displays previous
		search and replace strings (they are now editable!)
		This is a break from Pico's (inconsistent) interface, so
		if you don't like the new way, "Pico" mode (-p on the
		command line or Meta-P within nano) still works the
		"old" way.
		    Other new features include being able to deal with
		search strings of any length, a new internal spell
		feature (courtesy of Mr. Rocco Corsi) and tab completion
		when reading in or writing out files!  There's also the
		usual billion or so bug fixes.  Feedback on this release
		is welcome because so much has changed, especially with
		the previous string display in search and replace.
		Email -> nano@nano-editor.org <-.  If you like
		something, don't like something, or just want to order a
		pizza, let us know!

10/02/2000 - Nano 0.9.19 is the "Chris is getting married in less than
		a week and needs a distraction" release.  There are only
		a few actual code changes, mainly portability and
		compiler warning fixes.  Nano now also supports
		PDCurses, which enables easily-built nano executables
		for Windows NT and 95/98 for the brave.  The official
		nano site has changed (again) as well, check out
		www.nano-editor.org for all the latest nano schtuff.

09/18/2000 - Nano 0.9.18 is unleashed.  It has some new keyboard
		handling code, Cygwin support out of the box, and a more
		portable handler for the NOHELP toggle.  There is also a
		fix for a somewhat serious bug whereby trying to insert
		a directory instead of a normal file would destroy the
		contents of the editor.  A must-see.  Four stars.

09/04/2000 - Nano 0.9.17, the Labor Day release, is released after a
		quiet spell (almost an entire month since last release!)
		New features include better (not yet perfect) binary
		display support and toggle support for most of the
		program flags (M-c, M-i, M-z, M-x, M-p, M-w, M-m, M-k
		and M-e for -c, -i, -x, -p, -w, -k, and -R).

08/09/2000 - Nano 0.9.16, after some struggling, is released.  This
		release should fix a few of the holes that 0.9.15 dug.
		The "cutting text on the first line" bug is fixed, as is
		the "cutting text on the last line" bug.  Nice symmetry
		there huh?  Also the --tabsize argument should now work
		as well as by using -T.

08/03/2000 - Nano 0.9.15 is the "I can't think of a release description"
		release.  There are the usual gala of display bugfixes,
		a fix for the the nasty bug in -k mode that could create
		a loop in the file being edited, and some other code
		cleanup.  Also, the -T option should now work regardless
		of the curses library used.  Yay.

07/27/2000 - Nano 0.9.14 is officially the "13 is so unlucky it should
		be skipped as a version number" release.  One typo
		caused unending problems (calling nano with either -t or
		-k caused both flags to be used).  The -k code is also
		now closer in functionality to Pico's -k mode; please
		note that this code is not finished yet.  Working on
		this code has made me realize that there is not enough
		abstraction in the code, and I will be working on that
		for the next release.  Until then, have fun with this
		version.

07/23/2000 - Nano 0.9.13 has a few new bits and bobs, most notably the
		-k option from Pico (cut to end of line).  The majority
		of changes in this release are bugfixes, however,
		including the usual display fixes and fixes for writing
		to symbolic links and un-writable files.  Barring any
		other major changes, this should be the feature set for
		nano 1.0, whenever it might be released =-)

07/07/2000 - Nano 0.9.12 (The "lucky day" release) is bursting with new
		features, bug fixes, and yummy fruit flavor.  For
		changes, the alternate replace keystroke ^W^T is now
		^W^R to be compatible with later versions of Pico.  ^W^T
		is now goto line, again for Pico compatibility.  As for
		new features, the wonderful/hated magic line code has
		returned with a vengeance!  Also, regular expression
		searches and replaces have been incorporated via the -R
		flag.  And, of course, there are the usual helping of
		display and other bug fixes to top it all off.

06/20/2000 - Nano 0.9.11 presents drastic rewrites of the most buggy
		routines in the program, specifically the wrapping code
		and almost all of the display routines.  There are many
		improvements and bugfixes to the display subsystem in
		general, but there may be bugs lurking yet.  Also, after
		many MANY requests, there is now an option to set the
		displayed tab width (-T, --tabsize).  Note that this
		function just changes the way tabs LOOK in the editor,
		the tabs you input are still real tabs of normal width
		(usually 8 characters); nano just makes them look
		smaller or bigger while in the editor.  New in the
		translation department is an Indonesian translation
		(id).

06/06/2000 - Nano 0.9.10 is primarily a bugfix for the loss of SIGINT
		when using "run and terminate" flags (for example,
		--help).  There are also some minor documentation
		updates.  This version of nano is the most stable in
		quite some time, and is likely to be the most stable for
		awhile.  Users are encouraged to upgrade to this
		version.

05/31/2000 - Nano 0.9.9 introduces much better working i18n support,
		more portability, and a ton of bugfixes.  While nano is
		not likely anywhere near 1.0 in terms of code quality,
		it gets a quantum leap closer with this release.

05/18/2000 - Nano 0.9.8 (the 'what broke now?' release) should fix
		the resize crash people have been experiencing.  It also
		offers a new input method that should allow nano to do
		things the right way (like ^S, ^Q, custom suspend keys)
		and hopefully won't break with non-US keyboards.  There
		are also the obligatory display fixes and speedups.
		Have fun with it.

05/14/2000 - Nano 0.9.7 (the Mother's Day release) continues in the long
		line of display fixes, and also fixes the broken symlink
		behavior (i.e, symlinks weren't being followed by
		default).  Hopefully all major bugs can be worked out
		soon and we can have a 1.0 release before the end of the
		year, but who knows.

05/08/2000 - Nano 0.9.6 cleans up a lot of the display bugs that 0.9.5
		uncovered.  There are improvements (and some remaining
		segfaults) in the wrapping code, and even more display
		optimizations.  I would still say 0.9.4 or 0.9.2 are the
		most stable versions of nano to date, but this one may
		not be too bad =-)

05/01/2000 - Nano 0.9.5 attempts to speed up the display of text
		to be at least somewhat reasonable.  Much code profiling
		has been done to reduce the ridiculous number of
		redundant display updates.  This will probably expose a
		lot of bugs that can then be fixed, so this release is
		probably not for the faint of heart.  For anyone
		curious, I would call nano 0.9.2 the most stable version
		recently, so use that if you're not particularly
		concerned with being on the bleeding edge.

04/25/2000 - Nano 0.9.4 fixes some problems in 0.9.3 with the last
		line code and related segfaults.  It also now has much
		better handling for 8-bit characters.  The --enable-tiny
		code also produces a smaller executable.

04/19/2000 - Nano 0.9.3 is officially the "Micro$oft" release.  It
		underscores the recent problem of bugfixes introducing
		more bugs than they fix.  The most important change to
		this version of nano is the removal of the "magic line".
		You will no longer see a blank line at the end of the
		file.  If you want a new line at the end of your file,
		you'll have to hit enter to get one.

		NOTE: THIS BREAKS COMPATIBILITY WITH PICO.
		Unfortunately, this feature has been causing many many
		problems with nano so it is being removed for the time
		being, and perhaps indefinitely.

		Other new stuff includes an --enable-tiny option to make
		nano ultra small (disabling i18n, detailed help and the
		marker and mouse code), and --with-slang to use the
		slang libraries instead of ncurses.

04/15/2000 - Nano 0.9.2 just fixes the serious segfault problem if
		nano is invoked any way other than using the absolute
		path.  The bug was in the new code for checking whether
		nano is invoked as 'pico'.

04/14/2000 - 0.9.1 has some more Pico compatibility built-in.  The
		option to switch to/from Search and Search/Replace (^T)
		is now available, and nano now displays the more
		Pico-like shortcut list when invoked as 'pico' (i.e, if
		'pico' is a symlink to nano).  There is an important
		change to the handling of symbolic links as well.  Now,
		nano does the "correct" thing and automatically writes
		to the object of the symlink, rather than replace the
		symlink with the updated file.  This behavior is still
		available with the --nofollow or -l flags.
		    Other new things include a fix for the infamous
		"recursive replace" bug, and more bugfixes in the
		wrapping code.

04/07/2000 - Nano 0.9.0 has some updates, new language support and
		a much better refresh setup (It's still not great,
		but...)  There should also be more stability editing
		long lines, as there was a stupid mistake in the
		update_line call.  Silly me =)

03/22/2000 - Nano 0.8.9 is basically just a bugfix release of 0.8.8
		to reflect the current stagnant status of the project.
		Most things work, the rest doesn't doesn't work because
		(a) I can't fix it or I would have already done so, and
		(b) the amount of patches I'm receiving right now is
		quite negligible.  Fortunately, this release marks the
		first release since I have acquired ownership of the
		nano pages on SourceForge.  Here's hoping SF will get us
		some more visibility, translators and patches.

03/12/2000 - After a hiatus, I have finally moved (not unpacked though)
		to my new home into Albany.  Thus I should now have more
		time to work on nano.  Nano 0.8.8, the "dear god what
		broke this time?" release, incorporates patches for both
		i18n and many bugfixes.  It is VERY likely something
		broke this version, and it's likely I didn't even apply
		the i18n stuff properly, so *it* may not even work.

		I would like to announce that I'm going to need
		translations soonish, so if you are fluent in other
		languages than English (or even better, if your native
		language is not English) and you would like to submit a
		translation file to me, please feel free to do so.  If
		you do, I will list your name and email in the AUTHORS
		file as the maintainer of the .po file, and from then on
		it is yours to take care of and keep up to date.

03/01/2000 - Well, to continue my trend of going back on my previous
		release's comments, nano 0.8.7 is released.  The
		crashing behavior was still occurring, and this most
		recent fix also fixes some other wrapping problems, so
		here you go.  There may be another release soon, there
		may not be, is that vague enough? =)

02/25/2000 - More minor bugfixes in 0.8.6, the bizarre behavior at the
		end of a page has ceased, thankfully.  I'm also moving
		next weekend, so don't be shocked if you don't see a new
		version of nano next week  =-)

02/11/2000 - Okay, here we go again.  Aside from a few minor fixes and
		some under-the-hood changes, you won't notice much
		different in this version of nano.  I haven't gotten
		much feedback on the help feature, is it simply amazing
		or does no one care?  Write and let me know! =)

02/08/2000 - Nano 0.8.3 marks the first time in a long time that there
		has been more than three days since the last release.
		New features include an initial help mode (YAY!),
		hopefully much more support for i18n out of the box, and
		a flag for more Pico compatibility in the shortcut lists
		displayed.  This release also marks the new nano
		distribution site, http://www.asty.org/nano and email
		address nano@asty.org for bugs, etc.

02/02/2000 - Okay, I hate to go back on what I said in the last release,
		but I may be changing jobs very soon.  I will release
		version 0.8.2 as is (no i18n, no help menu (yet).  I
		expect things to settle down by the end of next week,
		and then I can try to start on the i18n support and help
		menu; look for these new features in version 0.8.5 to
		0.9.0.

01/28/2000 - Nano 0.8.1 marks our first official step toward
		internationalization (i18n) and the help system (^G).  I
		will be merging in Jordi's patches for initial i18n in
		the next version, and will implement the help system
		with i18n built into it shortly after that.  Please
		don't hesitate to send bug reports, as long as you're
		sure the fault lies with nano =-).

01/25/2000 - Nano 0.8.0 is officially the 'let's try and be at least a
		little portable, mmmmkay?' release.  There are many
		portability checks and fixes; many thanks to Andy Kahn
		for his patches.  I removed the broken do_spell behavior
		with the 'spell' program; for now, we only try to call
		'ispell' until I write a better method to handle the
		output of the normal 'spell' command.

01/24/2000 - Nano 0.7.9 features many new features.  Among them are a
		new autoindent feature (-i, --autoindent), tempfile flag
		like Pico's -t flag (-t, --tempfile), and preliminary
		spelling program support.  The spelling function tries
		to run 'spell' and then 'ispell' in that order, but you
		can specify another spelling program with -s or
		--speller.

01/17/00 - Nano 0.7.7 is officially the 'way too much stuff changed this
		release' release.  It's the busy time at work for me, so
		please don't get offended if your patch doesn't get
		included in the next immediate version of nano.  I'm
		sure all the changes in this release will cause a few
		bugs, so 0.7.8 will primarily be about fixing those
		bugs.

		Things added this release include resizability (kinda),
		new -x and -c flags (see nano -h for help), long command
		line flag support, and the usual array of bugfixes.

01/15/00 - Nano 0.7.6 is officially the 'lightning' release.  It now
		loads large files much faster than previous versions,
		and is even much faster than Pico or vi in some rather
		rudimentary tests.  Many thanks to Adam Rogoyski for the
		read_byte patch!

01/09/00 - As of this version (0.7.4), TIP has officially been renamed
		to nano.  The new homepage is at
		http://faculty.plattsburgh.edu/astyanax/nano.  Please
		update your bookmarks, tell your friends, and all that
		jazz.

$Id$
