- Certains are not lined up properly when there are tabs in them at 
  certain col values. (9) [FIXED]
- edit_refresh() and update_line() do not handle selecting text when the
  cursor is beyond COLS (10) [FIXED]
- no way to do a replace with the empty string (11) [FIXED, yay!]
- Spelling support is not elegant like pico's integration of the 'spell'
  program.  Nano only uses ispell (for now) (12) [FIXED]
- Moving to the end of a line when close to a multiple of COLS and at
  least COLS * 2 does not make the screen jump early like it would for
  if we were around COLS (bugs in edit_refresh, update_line) (13)
  [FIXED, mostly]
- When at the very bottom of the edit window, do_wrap goes berzerk and
  puts the curor somewhere bad, subsequent keystrokes crash the program
  (14) [FIXED, mostly]
- Doing a replacement of a substring of the replace string (e.g. replacing
  "ed" with "fred" causes an infinite loop. (15) [FIXED]
- Cutting a file with marked text and both marker ends on the same line
  causes a random segfault (16) [FIXED]
- Cutting more than one line resets the KEEP_CUTBUFFER flag in 0.9.3
  Error is in bitwise assignment (nano.h). (17) [FIXED]
- The wrapping code does not work right for lines like the following:
 *                                                                     *
  Error is in do_wrap, must be rewritten. (18) [FIXED]
- Nano fails to follow symlinks, even though -l isn't being used (20).
  [Bug in global flag init, FIXED]
- When using --help or --version, the SIGINT character gets lost. (21) [FIXED]
- edit_refresh() and update_line() (and related functions), have 
  trouble when a tab is the character that is the boundry at COLS (23) [FIXED]
- there is an off-by-one error in keeping track of totsize.  It is caused
  by the fact that we count the newline at the end when we read in a file
  but we do not, in fact, display this newline.  This should go away
  implicitly when the "Magic Line" returns, but it is noted here for
  documentation's sake. (24) [FIXED]
- In replace with completely adjacent strings, every other search string
  will be missed (try replace ':' in a string like ':::::::::') (28) [FIXED]
- If nano opens a read-only file with the --tempfile option, and a change
  is made to the buffer, and a write is attempted, nano will not give you
  a dialog about not being able to write the file, and it will not let the
  user exit (29, discovered by Joshua Jensen) [FIXED]
- Using nano -k, marked text is not cut properly. (31) [FIXED]
- Invoking -t or -k has the effect of invoking both option. (32) [FIXED]
- totsize becomes incorrect after word-wrapping (25) [FIXED]
- Wrapping a line with autoindent mode sometimes causes a segfault (19)[FIXED]
- When inserting files, the display sometimes fails to display properly
  until a pageup/down occurs (22)[FIXED]
- In search/replace code there is too much refreshing in bottomwin (26)
 [FIXED]
- In replace, there is no way to accept the default replace string. (27)
 [FIXED]
- Using nano -t, user can not exit until a filename is given via ^O. (30)
 [FIXED]
- Using -k cut text is not pasted properly. (34) [FIXED].
- Using -k pasted text is not updated properly if it goes beyond editbot. (35)
 [FIXED]
- Doing a cut with -k can screw up the filestruct, fault is in cutting
 code. (36)  [FIXED]
- Hitting enter on the magic line makes new lines, but they are not
  written out to disk when saved..... (37). [FIXED]
- Page up and page down do not work the same way as Pico (# of lines). (38)
 [FIXED]
- When doing a search and the marker is set, the screen does not always
  properly update the inverted text (39). [FIXED]
- Searches for a string that only exist on one line multiple times will
  fail after finding the last occurance (discovered by Ken Tyler) (40). [FIXED]
- Alt-Z is current broken to toggle suspend.  I guess I still don't know
  signals very well =-) (41) [FIXED].
- Unable to cut the entire file using the marker (discovered by Kev Tyler)
  (42). [FIXED]
- The keypad does not work when nano runs in the Gnome terminal (43). [FIXED]
- When reading in a file, if the file is a directory the contents of the
  file being edited are blown away (discovered by  Chris Pimlot) (44). [FIXED]
- in certain terms, nano will leave a "ghost" of screen upon exit
  when called from inside mutt (among other settings) (45). [FIXED]
- In replace, hitting the Goto line shortcut key does nothing after a
  search string is entered (discovered by Rocco Corsi) (46) [FIXED].
- When typing in a string in serahc or replace and hitting CASE_SENSITVE
  or the other search string, the current string edit is blown away in
  favor of the last stored search (47) [FIXED]

** Open BUGS **

- Marked cutting sometimes leaves a newline in the file unintelligently,
  such as when all of a line is selected but the mark doesn't proceed to
  the new line. (8) { Is this an issue? compare to pico 3.5 }
- totsize problems still abound in do_justify (33).

$Id$
