]> git.wh0rd.org Git - nano.git/commitdiff
Carl Drinkwater's backup patch, plus miscellaneous fixes by David
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Fri, 28 Jun 2002 22:45:14 +0000 (22:45 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Fri, 28 Jun 2002 22:45:14 +0000 (22:45 +0000)
Benbennick and me

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1225 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

15 files changed:
ChangeLog
THANKS
TODO
files.c
global.c
nano.1
nano.1.html
nano.c
nano.h
nano.texi
nanorc.sample
proto.h
rcfile.c
search.c
winio.c

index 92d073c83def39919fd62e945ca69d16c655a160..9ba6553d34e6ad69198042be22aa4944e645160f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -16,6 +16,36 @@ CVS Code -
          and spacing improvements. (David Benbennick)
        - Make more functions use const variables when possible. (David
          Benbennick)
+       - Add Carl Drinkwater's backup file option (-B or --backup on the
+         command line, M-B in nano's global shortcuts). If the original
+         file is unchanged from when it was loaded, it is backed up to
+         filename~; if the original file has been changed or deleted
+         since it was originally loaded, it isn't backed up.  The backup
+         file retains the permissions, owner/group, and
+         access/modification times of the original file.  This option is
+         disabled when --enable-tiny is used.  It will not back up
+         temporary files.  Minor fixes to it by David Benbennick and
+         DLR.  Changes to open_file(), add_open_file(),
+         load_open_file(), write_file(), and do_writeout().
+       - Add \n's to the ends of "filename is %s" debugging strings.
+         (Carl Drinkwater)
+       - Add the long option --quotestr as an alternative for -Q, and
+         --regexp as an alternative for -R; they were listed in nano's
+         usage information, but weren't actually in nano.  Also, display
+         "-?" as an alternative for "-h" in nano's usage information,
+         put the command line options in a more consistent (i. e. mostly
+         alphabetical) order in nano, put the long options in a more
+         consistent order in rcfile.c and nanorc.sample, don't include
+         rcfile options if their equivalent command line options are
+         disabled, and remove obsolete relative option from
+         nanorc.sample. (DLR)
+       - Change "File Name to Append/Prepend" to "File Name to
+         Append/Prepend to".  The original prompt could confusingly
+         imply that we are appending/prepending another file to the
+         current file, when we are actually appending/prepending the
+         current file to another file. (DLR)
+       - Put nano.1, nano.1.html, and nano.texi up to date. (DLR)
+       - Typo fixes for the ChangeLog. (David Benbennick)
 - files.c:
   read_file(), read_line():
        - Rework to properly handle nulls in the input file, fix
@@ -31,10 +61,25 @@ CVS Code -
          writing a marked selection to a file, save and restore totsize
          so it isn't decreased by the size of the selection afterward.
          (DLR)
+  do_writeout():
+       - Fix problem with formatstr's being defined as NULL when
+         --enable-tiny is used.  Since formatstr isn't ever used in tiny
+         mode, don't bother even creating the variable. (David
+         Benbennick and DLR)
   append_slash_if_dir(), input_tab():
        - Changed a variable name: lastWasTab -> lastwastab. (DLR)
 - global.c:
-  shortcut_init()
+  free_toggles():
+       - Only include if we're not using tiny mode. (David Benbennick)
+  toggle_init():
+       - Remove global entries for search toggles, as they aren't really
+         global. (DLR)
+       - Don't reinititialize the toggles if they've already been
+         initialized; it's unnecessary and even causes a segfault in
+         do_toggle() if Pico emulation mode is the toggle in question.
+         Don't free the toggles here, either; it's unnecessary after the
+         above change. (David Benbennick)
+  shortcut_init():
        - Rework IFHELP macro (David Benbennick).
 - move.c:
   page_down(), page_up():
@@ -52,6 +97,11 @@ CVS Code -
   do_int_spell(), do_alt_spell():
        - Rework to save the marked selection before doing spell checking
          and restore it afterward. (DLR)
+  do_toggle():
+       - Since the search mode toggles aren't global anymore, we don't
+         need to explicitly block them here anymore (which will end up
+         blocking the global backup mode toggle, which is the same as
+         the backwards search toggle). (DLR)
   main():
        - Rework to blank out filename manually before doing anything
          with it, instead of calling clear_filename() in two places.
@@ -59,7 +109,15 @@ CVS Code -
          hold a line number. (DLR)
        - Properly handle multiple -r settings on the command line. (Carl
          Drinkwater)
+- rcfile.c:
+  colortoint():
+       - Only include if ENABLE_COLOR is defined. (DLR)
 - search.c:
+  search_init():
+       - Since the search mode toggles aren't global anymore, rework the
+         part of this function referencing them so that they still work.
+         (DLR)
+       - Remove unneeded toggles variable. (David Benbennick)
   findnextstr():
        - Update the current line at current_x if we don't find a match.
          Also, pass current_x_find to strstrwrapper() so we know whether
@@ -95,7 +153,7 @@ CVS Code -
          better on smaller terminals. (Carl Drinkwater)
   update_line():
        - When marking control characters, make sure the mark moves
-         forward by two characters inctead of one.  Rework control
+         forward by two characters instead of one.  Rework control
          character display routine to display newlines within the line
          (which should never occur under normal circumstances; they will
          only be there if the line had nulls in it and was unsunder()ed
@@ -106,6 +164,7 @@ CVS Code -
          with TERM=ansi). (DLR)
 - THANKS:
        - Completed a bit (Jordi).
+       - Fixed David Benbennick's email address (David Benbennick).
 GNU nano 1.1.9 - 05/12/2002
 - General:
        - Typos n misspellings all over the place (David Benbennick).
@@ -119,7 +178,7 @@ GNU nano 1.1.9 - 05/12/2002
        - Preliminary prepend code.  This may be a bad idea, but I've
          been wanting it for awhile now and we'll see how bad it messes
          everything up.  Changes to files.c:do_writeout(), write_file().
-         Fixes for O_CREAT & append compatibililty by David Benbennick.
+         Fixes for O_CREAT & append compatibility by David Benbennick.
        - Change from read() and write() to file streams by Jay Carlson.
          Allows OS to implement read and write ahead rather than making
          us do it.  Hopefully merged properly.
@@ -133,8 +192,8 @@ GNU nano 1.1.9 - 05/12/2002
          to specify the type on the command line, if there's no good 
          filename regex to use.  Global variable syntaxstr.
        - Changed many strcmp()s and strcpy()s to their equivalent
-         '\0' conterparts (David Lawrence Ramsey).
-       - Many chanes to allow marked cutting to work with multiple
+         '\0' counterparts (David Lawrence Ramsey).
+       - Many changes to allow marked cutting to work with multiple
          file buffers: changes to openfilestruct type in nano.h and
          files.c (David Lawrence Ramsey).
        - Changed NANO_SMALL to ENABLE_NLS for gettext disabling 
@@ -162,7 +221,7 @@ GNU nano 1.1.9 - 05/12/2002
   do_wrap()
        - Complete rewrite (David Benbennick).
   help_init()
-       - A little les readable, a lot shorer :-) (David Benbennick).
+       - A little less readable, a lot shorter :-) (David Benbennick).
        - Fix Meta-A not getting capitalized, and convert the ASCII
          #s to their character equivalent.
   main()
@@ -187,7 +246,7 @@ GNU nano 1.1.9 - 05/12/2002
        - Changed some syntax highlight computations for the sake of COLS.
        - Add in the necessary regfree() calls to stop nano from leaking
          memory like a sieve when using color syntax highlighting :-)
-  botombars(), onekey()
+  bottombars(), onekey()
        - Cleanups (David Benbennick).
 - po/gl.po:
        - Galician translation updates (Jacobo Tarrio).
@@ -311,7 +370,7 @@ GNU nano 1.1.7 - 03/05/2002
        - malloc->calloc, etc cleanups (DLR).
        - New option, noconvert (-N, --noconvert) to completely stop
          the translation of files from DOS or Mac format (DLR).
-       - New functions wheck_writable_directory() and safe_tempnam()
+       - New functions check_writable_directory() and safe_tempnam()
          to get around the tempnam warning. More improvements (DLR)  
          Still needs testing.
        - Added DOS and Mac format options to write file routine.
@@ -346,7 +405,7 @@ GNU nano 1.1.7 - 03/05/2002
        - Added call to AM_ACLOCAL_INCLUDE.
 - files.c:
   read_byte()
-       - Added check for conrol characters (indicative of a binary 
+       - Added check for control characters (indicative of a binary 
          file), set NO_CONVERT if found (fixes by DLR).
  do_insertfile()
        - Added support for -o in prompt (Steven Kneizys).
@@ -380,7 +439,7 @@ GNU nano 1.1.7 - 03/05/2002
        - Fixes for various search issues (Ken Tyler)
 - winio.c:
   do_cursorpos()
-       - Rewritten to show col place as well as charcter place, without
+       - Rewritten to show col place as well as character place, without
          needing an entirely separate flag.
   bottombars(), onekey()
        - Make bottom list dynamic with screen size (Guus Sliepen & Chris).
@@ -428,7 +487,7 @@ GNU nano 1.1.7 - 03/05/2002
 
 nano-1.1.6 - 01/25/2002
 - General
-       - Add Meta-A as alternate keyystroke for ^^ for people with
+       - Add Meta-A as alternate keystroke for ^^ for people with
          non-US keyboards.
        - Add Alt-G (NANO_ALT_GOTO_KEY) as alternate for goto dir in 
          browser.
@@ -473,7 +532,7 @@ nano-1.1.6 - 01/25/2002
 - nano.h:
        - Changed color struct slightly, because of previous issue with
          applying color painting in order, the "str" portion was 
-         uselss.  Renamed "val" in colortype to "start", added "end"
+         useless.  Renamed "val" in colortype to "start", added "end"
          for multi-line color strings.
 - rcfile.c:
   General
@@ -482,7 +541,7 @@ nano-1.1.6 - 01/25/2002
        - Re-indented.
        - Added stdarg.h to includes.
   rcfile_error()
-       - Now automatically prpends the "error in line blah at foo"
+       - Now automatically prepends the "error in line blah at foo"
          message to error messages.
   parse_colors()
        - Added section for computing "end" section.
@@ -548,7 +607,7 @@ nano-1.1.5 - 01/05/2002
          suspending nano on the Hurd.
   help_init()
        - Typo fixes in help strings (Jordi).
-       - New variable helplen needes cause currslen is not always
+       - New variable helplen needed cause currslen is not always
          the length we want (bug found by David Lawrence Ramsey).
        - Typo in file switch string (found by David Lawrence Ramsey).
   main()
@@ -870,8 +929,8 @@ nano-1.1.0 - 07/15/2001
          --enable-nanorc is used.  Tons of new funcs, most notably
          do_rcfile() called from nano.c:main().  Added much needed 
          function ncalloc(), will have to go through source code later 
-         and change the aproproate calls which used nmalloc for lack of
-         an apropriate calloc function *** FIXME ***
+         and change the appropriate calls which used nmalloc for lack of
+         an appropriate calloc function *** FIXME ***
        - After "Alternate" spell checker is called, cursor is repositioned on
          the same line as before ^T was pressed. 
        - Moved config.h up in all .c files #include list (Albert Chin).
@@ -885,10 +944,10 @@ nano-1.1.0 - 07/15/2001
          and justify being disabled.  This allows us to compile out the 
          -r flag if neither are set, and will also allow us to comment
          out -W when it is written.
-       - Allow fill to take a negative value ot signify a "from right side"
+       - Allow fill to take a negative value to signify a "from right side"
          value.  This allows the value to vary with the screen size yet
          still be correct.  New static value wrap_at to minimize code
-         inpact.  Updated man page and info file.
+         impact.  Updated man page and info file.
        - Allow file appending.  New shortcut list nano_insertfile_list (since
          insert and write routines can't share shortcut lists anymore), 
          new args to do_writeout and write_file called append, and of source
@@ -963,7 +1022,7 @@ nano-1.1.0 - 07/15/2001
          down, etc, and add the consistent ^C to exit (Jim Knoble).
   do_writeout()
        - New code to allow writing selected text to a separate file.
-         When this is done, the current state is prserved.
+         When this is done, the current state is preserved.
   write_file()
        - New arg, nonamechange, means whether or not to update the
          current filename after writing the file out.
diff --git a/THANKS b/THANKS
index 67d64285c45d186eb44cd21a55eedc576bd727be..bb11d8dde9ff9de62fe763a5de569b69f0c9ab91 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -29,8 +29,7 @@ Miquel Vidal <miquel@sindominio.net>          Catalan Translator
 Pauli Virtanen <pauli.virtanen@saunalahti.fi>  Finnish Translator
 
 Ben Armstrong <synrg@sanctuary.nslug.ns.ca>    Negative -r value idea, code
-David Benbennick dbenbenn@polygon.math.cornell.edu>
-                                               Misc fixes and enhancements
+David Benbennick <dbenbenn@math.cornell.edu>   Misc fixes and enhancements
 Thomas Dickey <dickey@herndon4.his.com>                Curses help and advice
 Sven Guckes <guckes@math.fu-berlin.de>         Advice and Advocacy
 Jim Knoble <jmknoble@pobox.com>                        Pico compat for browser
diff --git a/TODO b/TODO
index 204be3987856ce359b114368a1c3370dbfd3fb73..9f5ffb386af36c125e20c158cb9cb9b7e78cee4f 100644 (file)
--- a/TODO
+++ b/TODO
@@ -5,7 +5,7 @@ For version 1.2:
 - Single line scroll up/down? [DONE]
 - Color syntax highlighting? (certainly seems like there's a demand for it.)
 - .nanorc [DONE]
-- Backup making (filename~)?
+- Backup making (filename~)? [DONE]
 - Search (etc) string history [1.2]
 - Implement Pico's -j and -g flags, as they are pretty easy to do. [DONE]
 - Make mouse support work with clicking on the shortcuts (-m).  Must
diff --git a/files.c b/files.c
index 3ec476d85bfdfe3ecc537cd84904670e97351a2d..781ef0a5e988e6030ceb3ffe25c5bb5477cfd604 100644 (file)
--- a/files.c
+++ b/files.c
@@ -28,6 +28,7 @@
 #include <sys/types.h>
 #include <sys/wait.h>
 #include <sys/stat.h>
+#include <utime.h>
 #include <fcntl.h>
 #include <errno.h>
 #include <ctype.h>
@@ -356,6 +357,9 @@ int open_file(const char *filename, int insert, int quiet)
            return -1;
        }
        read_file(f, filename, quiet);
+#ifndef NANO_SMALL
+       stat(filename, &originalfilestat);
+#endif
     }
 
     return 1;
@@ -417,7 +421,7 @@ int do_insertfile(int loading_file)
     if (i != -1) {
 
 #ifdef DEBUG
-       fprintf(stderr, _("filename is %s"), answer);
+       fprintf(stderr, _("filename is %s\n"), answer);
 #endif
 
 #ifndef DISABLE_TABCOMP
@@ -596,7 +600,7 @@ int add_open_file(int update)
           open_files and splice it in after the current one */
 
 #ifdef DEBUG
-       fprintf(stderr, _("filename is %s"), open_files->filename);
+       fprintf(stderr, _("filename is %s\n"), open_files->filename);
 #endif
 
        tmp = make_new_opennode(NULL);
@@ -607,6 +611,11 @@ int add_open_file(int update)
     /* save current filename */
     open_files->filename = mallocstrcpy(open_files->filename, filename);
 
+#ifndef NANO_SMALL
+    /* save the file's stat */
+    open_files->originalfilestat = originalfilestat;
+#endif
+
     /* save current total number of lines */
     open_files->file_totlines = totlines;
 
@@ -649,7 +658,7 @@ int add_open_file(int update)
     }
 
 #ifdef DEBUG
-    fprintf(stderr, _("filename is %s"), open_files->filename);
+    fprintf(stderr, _("filename is %s\n"), open_files->filename);
 #endif
 
     return 0;
@@ -668,6 +677,9 @@ int load_open_file(void)
     /* set up the filename, the file buffer, the total number of lines in
        the file, and the total file size */
     filename = mallocstrcpy(filename, open_files->filename);
+#ifndef NANO_SMALL
+    originalfilestat = open_files->originalfilestat;
+#endif
     fileage = open_files->fileage;
     current = fileage;
     filebot = open_files->filebot;
@@ -740,7 +752,7 @@ int open_prevfile(int closing_file)
        open_files = open_files->prev;
 
 #ifdef DEBUG
-       fprintf(stderr, _("filename is %s"), open_files->filename);
+       fprintf(stderr, _("filename is %s\n"), open_files->filename);
 #endif
 
     }
@@ -752,7 +764,7 @@ int open_prevfile(int closing_file)
            open_files = open_files->next;
 
 #ifdef DEBUG
-           fprintf(stderr, _("filename is %s"), open_files->filename);
+           fprintf(stderr, _("filename is %s\n"), open_files->filename);
 #endif
 
     }
@@ -804,7 +816,7 @@ int open_nextfile(int closing_file)
        open_files = open_files->next;
 
 #ifdef DEBUG
-       fprintf(stderr, _("filename is %s"), open_files->filename);
+       fprintf(stderr, _("filename is %s\n"), open_files->filename);
 #endif
 
     }
@@ -815,7 +827,7 @@ int open_nextfile(int closing_file)
            open_files = open_files->prev;
 
 #ifdef DEBUG
-           fprintf(stderr, _("filename is %s"), open_files->filename);
+           fprintf(stderr, _("filename is %s\n"), open_files->filename);
 #endif
 
        }
@@ -873,7 +885,7 @@ int close_open_file(void)
 }
 #endif /* MULTIBUFFER */
 
-#if !defined (DISABLE_SPELLER) || !defined (DISABLE_OPERATINGDIR)
+#if !defined(DISABLE_SPELLER) || !defined(DISABLE_OPERATINGDIR)
 /*
  * When passed "[relative path]" or "[relative path][filename]" in
  * origpath, return "[full path]" or "[full path][filename]" on success,
@@ -1283,6 +1295,75 @@ int write_file(char *name, int tmp, int append, int nonamechange)
     /* Save the state of file at the end of the symlink (if there is one) */
     realexists = stat(realname, &st);
 
+#ifndef NANO_SMALL
+    /* We backup only if the backup toggle is set, the file isn't
+       temporary, and the file already exists.  Furthermore, if we aren't
+       appending, prepending, or writing a selection, also backup only if
+       the file has not been modified by someone else since nano opened
+       it. */
+    if (ISSET(BACKUP_FILE) && !tmp && realexists == 0 &&
+           (append || ISSET(MARK_ISSET) ||
+               originalfilestat.st_mtime == st.st_mtime)) {
+       FILE *backup_file;
+       char *backupname = NULL;
+       char backupbuf[COPYFILEBLOCKSIZE];
+       size_t bytesread;
+       struct utimbuf filetime;
+
+       /* save the original file's access and modification times */
+       filetime.actime = originalfilestat.st_atime;
+       filetime.modtime = originalfilestat.st_mtime;
+
+       /* open the original file to copy to the backup */
+       f = fopen(realname, "rb");
+       if (!f) {
+           statusbar(_("Could not read %s for backup: %s"), realname,
+               strerror(errno));
+           return -1;
+       }
+
+       backupname = charalloc(strlen(realname) + 2);
+       sprintf(backupname, "%s~", realname);
+
+       /* get a file descriptor for the destination backup file */
+       backup_file = fopen(backupname, "wb");
+       if (!backup_file) {
+           statusbar(_("Couldn't write backup: %s"), strerror(errno));
+           free(backupname);
+           return -1;
+       }
+
+#ifdef DEBUG
+       fprintf(stderr, _("Backing up %s to %s\n"), realname, backupname);
+#endif
+
+       /* copy the file */
+       while ((bytesread = fread(backupbuf, sizeof(char),
+               COPYFILEBLOCKSIZE, f)) > 0)
+           if (fwrite(backupbuf, sizeof(char), bytesread, backup_file) <= 0)
+               break;
+       fclose(backup_file);
+       fclose(f);
+
+       if (chmod(backupname, originalfilestat.st_mode) == -1)
+           statusbar(_("Could not set permissions %o on backup %s: %s"),   
+                       originalfilestat.st_mode, backupname,
+                       strerror(errno));
+
+       if (chown(backupname, originalfilestat.st_uid,
+               originalfilestat.st_gid) == -1)
+           statusbar(_("Could not set owner %d/group %d on backup %s: %s"),
+                       originalfilestat.st_uid, originalfilestat.st_gid,
+                       backupname, strerror(errno));
+
+       if (utime(backupname, &filetime) == -1)
+           statusbar(_("Could not set access/modification time on backup %s: %s"),
+                       backupname, strerror(errno));
+
+       free(backupname);
+    }
+#endif
+
     /* Stat the link itself for the check... */
     anyexists = lstat(realname, &lst);
 
@@ -1368,7 +1449,6 @@ int write_file(char *name, int tmp, int append, int nonamechange)
        else
            fprintf(stderr, _("Wrote >%s\n"), fileptr->data);
 #endif
-
 #ifndef NANO_SMALL
        if (ISSET(DOS_FILE) || ISSET(MAC_FILE))
            putc('\r', f);
@@ -1424,7 +1504,6 @@ int write_file(char *name, int tmp, int append, int nonamechange)
        }
     }
 
-
     if (fclose(f)) {
        statusbar(_("Could not close %s: %s"), realname, strerror(errno));
        unlink(buf);
@@ -1481,7 +1560,6 @@ int write_file(char *name, int tmp, int append, int nonamechange)
        fclose(f_dest);
     }
 
-
     if (realexists == -1 || tmp ||
        (!ISSET(FOLLOW_SYMLINKS) && S_ISLNK(lst.st_mode))) {
 
@@ -1489,7 +1567,7 @@ int write_file(char *name, int tmp, int append, int nonamechange)
        mask = umask(0);
        umask(mask);
 
-       if (tmp)                /* We don't want anyone reading our temporary file! */
+       if (tmp)        /* We don't want anyone reading our temporary file! */
            mask = 0600;
        else
            mask = 0666 & ~mask;
@@ -1529,6 +1607,10 @@ int write_file(char *name, int tmp, int append, int nonamechange)
        if (!nonamechange)
            filename = mallocstrcpy(filename, realname);
 
+#ifndef NANO_SMALL
+       /* Update originalfilestat to reference the file as it is now. */
+       stat(filename, &originalfilestat);
+#endif
        statusbar(_("Wrote %d lines"), lineswritten);
        UNSET(MODIFIED);
        titlebar(NULL);
@@ -1539,8 +1621,9 @@ int write_file(char *name, int tmp, int append, int nonamechange)
 int do_writeout(char *path, int exiting, int append)
 {
     int i = 0;
-    char *formatstr = NULL;
-
+#ifndef NANO_SMALL
+    const char *formatstr, *backupstr;
+#endif
 #ifdef NANO_EXTRA
     static int did_cred = 0;
 #endif
@@ -1568,7 +1651,6 @@ int do_writeout(char *path, int exiting, int append)
     while (1) {
 
 #ifndef NANO_SMALL
-
        if (ISSET(MAC_FILE))
           formatstr = _(" [Mac Format]");
        else if (ISSET(DOS_FILE))
@@ -1576,31 +1658,44 @@ int do_writeout(char *path, int exiting, int append)
        else
           formatstr = "";
 
+       if (ISSET(BACKUP_FILE))
+          backupstr = _(" [Backup]");
+       else
+          backupstr = "";
+
        /* Be nice to the translation folks */
        if (ISSET(MARK_ISSET) && !exiting) {
            if (append == 2)
                i = statusq(1, writefile_list, "",
-                   "%s%s", _("Prepend Selection to File"), formatstr);
+                   "%s%s%s", _("Prepend Selection to File"), formatstr, backupstr);
            else if (append)
                i = statusq(1, writefile_list, "",
-                   "%s%s", _("Append Selection to File"), formatstr);
+                   "%s%s%s", _("Append Selection to File"), formatstr, backupstr);
            else
                i = statusq(1, writefile_list, "",
-                   "%s%s", _("Write Selection to File"), formatstr);
-       } else
-#endif
-       {
+                   "%s%s%s", _("Write Selection to File"), formatstr, backupstr);
+       } else {
            if (append == 2)
                i = statusq(1, writefile_list, answer,
-                   "%s%s", _("File Name to Prepend"), formatstr);
+                   "%s%s%s", _("File Name to Prepend to"), formatstr, backupstr);
            else if (append)
                i = statusq(1, writefile_list, answer,
-                   "%s%s", _("File Name to Append"), formatstr);
+                   "%s%s%s", _("File Name to Append to"), formatstr, backupstr);
            else
                i = statusq(1, writefile_list, answer,
-                   "%s%s", _("File Name to Write"), formatstr);
-
+                   "%s%s%s", _("File Name to Write"), formatstr, backupstr);
        }
+#else
+       if (append == 2)
+           i = statusq(1, writefile_list, answer,
+               "%s", _("File Name to Prepend to"));
+       else if (append)
+           i = statusq(1, writefile_list, answer,
+               "%s", _("File Name to Append to"));
+       else
+           i = statusq(1, writefile_list, answer,
+               "%s", _("File Name to Write"));
+#endif /* !NANO_SMALL */
 
        if (i != -1) {
 
@@ -1627,13 +1722,18 @@ int do_writeout(char *path, int exiting, int append)
            UNSET(DOS_FILE);
            TOGGLE(MAC_FILE);
            return(do_writeout(answer, exiting, append));
+#ifndef NANO_SMALL
+       } else if (i == TOGGLE_BACKUP_KEY) {
+           TOGGLE(BACKUP_FILE);
+           return(do_writeout(answer, exiting, append));
+#endif
        } else if (i == NANO_PREPEND_KEY)
            return(do_writeout(answer, exiting, append == 2 ? 0 : 2));
        else if (i == NANO_APPEND_KEY)
            return(do_writeout(answer, exiting, append == 1 ? 0 : 1));
 
 #ifdef DEBUG
-           fprintf(stderr, _("filename is %s"), answer);
+           fprintf(stderr, _("filename is %s\n"), answer);
 #endif
 
 #ifdef NANO_EXTRA
@@ -1653,8 +1753,8 @@ int do_writeout(char *path, int exiting, int append)
                        continue;
                }
            }
-#ifndef NANO_SMALL
 
+#ifndef NANO_SMALL
        /* Here's where we allow the selected text to be written to 
           a separate file. */
        if (ISSET(MARK_ISSET) && !exiting) {
@@ -1692,7 +1792,8 @@ int do_writeout(char *path, int exiting, int append)
            if (oldmod)
                set_modified();
        } else
-#endif
+#endif /* !NANO_SMALL */
+
            i = write_file(answer, 0, append, 0);
 
 #ifdef ENABLE_MULTIBUFFER
@@ -2357,7 +2458,7 @@ char *do_browser(char *inpath)
 
        blank_statusbar_refresh();
 
-#if !defined DISABLE_HELP || !defined(DISABLE_MOUSE)
+#if !defined(DISABLE_HELP) || !defined(DISABLE_MOUSE)
        currshortcut = browser_list;
 #endif
 
index e31373f4d76d996bfe0e30ad665d5ad68da3f4d7..37b569ae794661f82937865c03d5ff825d083f2d 100644 (file)
--- a/global.c
+++ b/global.c
@@ -42,6 +42,11 @@ WINDOW *edit;                        /* The file portion of the editor */
 WINDOW *topwin;                        /* Top line of screen */
 WINDOW *bottomwin;             /* Bottom buffer */
 char *filename = NULL;         /* Name of the file */
+
+#ifndef NANO_SMALL
+struct stat originalfilestat;  /* Stat for the file as we loaded it */
+#endif
+
 int editwinrows = 0;           /* How many rows long is the edit
                                   window? */
 filestruct *current;           /* Current buffer pointer */
@@ -114,7 +119,7 @@ shortcut *browser_list = NULL;
     char *syntaxstr = NULL;
 #endif
 
-#if !defined(DISABLE_BROWSER) || !defined(DISABLE_MOUSE) || !defined (DISABLE_HELP)
+#if !defined(DISABLE_BROWSER) || !defined(DISABLE_MOUSE) || !defined(DISABLE_HELP)
 shortcut *currshortcut;                        /* Current shortcut list we're using */
 #endif
 
@@ -153,7 +158,7 @@ static void sc_init_one(shortcut **shortcutage, int key,
                const char *desc,
 #ifndef DISABLE_HELP
                const char *help,
-#endif /* !DISABLE_HELP */
+#endif
                int alt, int misc1, int misc2, int view,
                int (*func) (void))
 {
@@ -173,7 +178,7 @@ static void sc_init_one(shortcut **shortcutage, int key,
     s->desc = desc;
 #ifndef DISABLE_HELP
     s->help = help;
-#endif /* !DISABLE_HELP */
+#endif
     s->altval = alt;
     s->misc1 = misc1;
     s->misc2 = misc2;
@@ -205,6 +210,7 @@ static void toggle_init_one(int val, const char *desc, int flag)
     u->next = NULL;
 }
 
+#ifdef DEBUG
 /* Deallocate all of the toggles */
 static void free_toggles(void)
 {
@@ -217,23 +223,27 @@ static void free_toggles(void)
     }
     toggles = NULL;
 }
+#endif
 
 static void toggle_init(void)
 {
     char *toggle_const_msg, *toggle_autoindent_msg, *toggle_suspend_msg,
        *toggle_nohelp_msg, *toggle_picomode_msg, *toggle_mouse_msg,
-       *toggle_cuttoend_msg, *toggle_wrap_msg, *toggle_case_msg, 
-       *toggle_backwards_msg, *toggle_noconvert_msg, *toggle_dos_msg,
-       *toggle_mac_msg, *toggle_smooth_msg;
-
-#ifdef HAVE_REGEX_H
-    char *toggle_regexp_msg;
-#endif
+       *toggle_cuttoend_msg, *toggle_wrap_msg, *toggle_noconvert_msg,
+       *toggle_dos_msg, *toggle_mac_msg, *toggle_backup_msg,
+       *toggle_smooth_msg;
 
 #ifdef ENABLE_MULTIBUFFER
     char *toggle_load_msg;
 #endif
 
+    /* There is no need to reinitialize the toggles.  They can't
+       change.  In fact, reinitializing them causes a segfault in
+       nano.c:do_toggle() when it is called with the Pico-mode
+       toggle. */
+    if (toggles != NULL)
+       return;
+
     toggle_const_msg = _("Constant cursor position");
     toggle_autoindent_msg = _("Auto indent");
     toggle_suspend_msg = _("Suspend");
@@ -241,25 +251,16 @@ static void toggle_init(void)
     toggle_picomode_msg = _("Pico mode");
     toggle_mouse_msg = _("Mouse support");
     toggle_cuttoend_msg = _("Cut to end");
-    toggle_backwards_msg = _("Backwards search");
-    toggle_case_msg = _("Case sensitive search");
-
-#ifdef HAVE_REGEX_H
-    toggle_regexp_msg = _("Regular expression search");
-#endif
-
     toggle_noconvert_msg = _("No conversion from DOS/Mac format");
     toggle_dos_msg = _("Writing file in DOS format");
     toggle_mac_msg = _("Writing file in Mac format");
+    toggle_backup_msg = _("Backing up file");
     toggle_smooth_msg = _("Smooth scrolling");
     toggle_wrap_msg = _("Auto wrap");
-
 #ifdef ENABLE_MULTIBUFFER
     toggle_load_msg = _("Multiple file buffers");
 #endif
 
-    free_toggles();
-
     toggle_init_one(TOGGLE_CONST_KEY, toggle_const_msg, CONSTUPDATE);
     toggle_init_one(TOGGLE_AUTOINDENT_KEY, toggle_autoindent_msg, AUTOINDENT);
     toggle_init_one(TOGGLE_SUSPEND_KEY, toggle_suspend_msg, SUSPEND);
@@ -268,22 +269,17 @@ static void toggle_init(void)
     toggle_init_one(TOGGLE_WRAP_KEY, toggle_wrap_msg, NO_WRAP);
     toggle_init_one(TOGGLE_MOUSE_KEY, toggle_mouse_msg, USE_MOUSE);
     toggle_init_one(TOGGLE_CUTTOEND_KEY, toggle_cuttoend_msg, CUT_TO_END);
-    toggle_init_one(TOGGLE_BACKWARDS_KEY, toggle_backwards_msg, REVERSE_SEARCH);
-    toggle_init_one(TOGGLE_CASE_KEY, toggle_case_msg, CASE_SENSITIVE);
-#ifdef HAVE_REGEX_H
-    toggle_init_one(TOGGLE_REGEXP_KEY, toggle_regexp_msg, USE_REGEXP);
-#endif
 #ifdef ENABLE_MULTIBUFFER
     toggle_init_one(TOGGLE_LOAD_KEY, toggle_load_msg, MULTIBUFFER);
 #endif
     toggle_init_one(TOGGLE_NOCONVERT_KEY, toggle_noconvert_msg, NO_CONVERT);
     toggle_init_one(TOGGLE_DOS_KEY, toggle_dos_msg, DOS_FILE);
     toggle_init_one(TOGGLE_MAC_KEY, toggle_mac_msg, MAC_FILE);
+    toggle_init_one(TOGGLE_BACKUP_KEY, toggle_backup_msg, BACKUP_FILE);
     toggle_init_one(TOGGLE_SMOOTH_KEY, toggle_smooth_msg, SMOOTHSCROLL);
 }
 #endif /* !NANO_SMALL */
 
-
 /* Deallocate the given shortcut. */
 static void free_shortcutage(shortcut **shortcutage)
 {
@@ -302,42 +298,40 @@ static void free_shortcutage(shortcut **shortcutage)
 void shortcut_init(int unjustify)
 {
 #ifndef DISABLE_HELP
-    char *nano_help_msg = "", *nano_writeout_msg = "", *nano_exit_msg = "",
-       *nano_goto_msg = "", *nano_justify_msg = "", *nano_replace_msg =
-       "", *nano_insert_msg = "", *nano_whereis_msg =
-       "", *nano_prevpage_msg = "", *nano_nextpage_msg =
-       "", *nano_cut_msg = "", *nano_uncut_msg = "", *nano_cursorpos_msg =
+    char *nano_help_msg = "", *nano_writeout_msg = "", *nano_exit_msg =
+       "", *nano_goto_msg = "", *nano_justify_msg =
+       "", *nano_replace_msg = "", *nano_insert_msg =
+       "", *nano_whereis_msg = "", *nano_prevpage_msg =
+       "", *nano_nextpage_msg = "", *nano_cut_msg =
+       "", *nano_uncut_msg = "", *nano_cursorpos_msg =
        "", *nano_spell_msg = "", *nano_up_msg = "", *nano_down_msg =
        "", *nano_forward_msg = "", *nano_back_msg = "", *nano_home_msg =
        "", *nano_end_msg = "", *nano_firstline_msg =
        "", *nano_lastline_msg = "", *nano_refresh_msg =
        "", *nano_mark_msg = "", *nano_delete_msg =
        "", *nano_backspace_msg = "", *nano_tab_msg =
-       "", *nano_enter_msg = "", *nano_cancel_msg = 
+       "", *nano_enter_msg = "", *nano_cancel_msg =
        "", *nano_unjustify_msg = "", *nano_append_msg =
-       "", *nano_prepend_msg = ""; 
+       "", *nano_prepend_msg = "", *nano_tofiles_msg =
+       "", *nano_gotodir_msg = "", *nano_case_msg =
+       "", *nano_reverse_msg = "", *nano_execute_msg =
+       "", *nano_dos_msg = "", *nano_mac_msg =
+       "", *nano_backup_msg = "";
 
 #ifdef ENABLE_MULTIBUFFER
     char *nano_openprev_msg = "", *nano_opennext_msg = "";
 #endif
-
-    char *nano_tofiles_msg = "", *nano_gotodir_msg = "", *nano_case_msg =
-       "", *nano_reverse_msg = "", *nano_execute_msg = "";
-    char *nano_dos_msg = "", *nano_mac_msg = ""; 
-
 #ifdef HAVE_REGEX_H
     char *nano_regexp_msg = "", *nano_bracket_msg = "";
 #endif
 
     nano_help_msg = _("Invoke the help menu");
     nano_writeout_msg = _("Write the current file to disk");
-
 #ifdef ENABLE_MULTIBUFFER
     nano_exit_msg = _("Close currently loaded file/Exit from nano");
 #else
     nano_exit_msg = _("Exit from nano");
 #endif
-
     nano_goto_msg = _("Go to a specific line number");
     nano_justify_msg = _("Justify the current paragraph");
     nano_unjustify_msg = _("Unjustify after a justify");
@@ -349,7 +343,7 @@ void shortcut_init(int unjustify)
     nano_cut_msg = _("Cut the current line and store it in the cutbuffer");
     nano_uncut_msg = _("Uncut from the cutbuffer into the current line");
     nano_cursorpos_msg = _("Show the position of the cursor");
-    nano_spell_msg = _("Invoke the spell checker (if available)");
+    nano_spell_msg = _("Invoke the spell checker, if available");
     nano_up_msg = _("Move up one line");
     nano_down_msg = _("Move down one line");
     nano_forward_msg = _("Move forward one character");
@@ -376,8 +370,11 @@ void shortcut_init(int unjustify)
     nano_reverse_msg = _("Search backwards");
     nano_dos_msg = _("Write file out in DOS format");
     nano_mac_msg = _("Write file out in Mac format");
+#ifndef NANO_SMALL
+    nano_backup_msg = _("Back up original file when saving");
+#endif
 #ifdef HAVE_REGEX_H
-    nano_regexp_msg = _("Use Regular expressions");
+    nano_regexp_msg = _("Use regular expressions");
     nano_bracket_msg = _("Find other bracket");
 #endif
 #ifdef ENABLE_MULTIBUFFER
@@ -408,6 +405,7 @@ void shortcut_init(int unjustify)
                do_exit);
     else
 #endif
+
        sc_init_one(&main_list, NANO_EXIT_KEY, _("Exit"),
                IFHELP(nano_exit_msg, 0), NANO_EXIT_FKEY, 0, VIEW,
                do_exit);
@@ -445,7 +443,6 @@ void shortcut_init(int unjustify)
                IFHELP(nano_insert_msg, 0),
                NANO_INSERTFILE_FKEY, 0, NOVIEW, do_insertfile_void);
 #endif
-
     else
        sc_init_one(&main_list, NANO_REPLACE_KEY, _("Replace"),
                    IFHELP(nano_replace_msg, NANO_ALT_REPLACE_KEY),
@@ -484,7 +481,6 @@ void shortcut_init(int unjustify)
                IFHELP(nano_spell_msg, 0),
                NANO_SPELL_FKEY, 0, NOVIEW, do_spell);
 
-
     sc_init_one(&main_list, NANO_UP_KEY, _("Up"),
                IFHELP(nano_up_msg, 0),
                KEY_UP, 0, VIEW, do_up);
@@ -554,13 +550,11 @@ void shortcut_init(int unjustify)
                IFHELP(_("Move backward one word"), NANO_PREVWORD_KEY), 0, 0,
                VIEW, do_prev_word_void);
 #endif
-
-#if (!defined NANO_SMALL) && (defined HAVE_REGEX_H)
+#if !defined(NANO_SMALL) && defined(HAVE_REGEX_H)
     sc_init_one(&main_list, -9, _("Find Other Bracket"),
                    IFHELP(nano_bracket_msg, NANO_BRACKET_KEY),
                    0, 0, VIEW, do_find_bracket);
 #endif
-
 #ifdef ENABLE_MULTIBUFFER
     sc_init_one(&main_list, -9, _("Previous File"),
                    IFHELP(nano_openprev_msg, NANO_OPENPREV_KEY),
@@ -703,6 +697,11 @@ void shortcut_init(int unjustify)
     sc_init_one(&writefile_list, NANO_PREPEND_KEY, _("Prepend"),
                IFHELP(nano_prepend_msg, 0), 0, 0, NOVIEW, 0);
 
+#ifndef NANO_SMALL
+    sc_init_one(&writefile_list, TOGGLE_BACKUP_KEY, _("Backup File"),
+               IFHELP(nano_backup_msg, 0), 0, 0, NOVIEW, 0);
+#endif
+
     sc_init_one(&writefile_list, NANO_CANCEL_KEY, _("Cancel"),
                IFHELP(nano_cancel_msg, 0), 0, 0, VIEW, 0);
 
@@ -742,7 +741,6 @@ void shortcut_init(int unjustify)
 #endif
 
 #ifndef DISABLE_BROWSER
-
     free_shortcutage(&browser_list);
 
     sc_init_one(&browser_list, NANO_HELP_KEY, _("Get Help"),
@@ -770,14 +768,11 @@ void shortcut_init(int unjustify)
 
     sc_init_one(&gotodir_list, NANO_CANCEL_KEY, _("Cancel"),
                IFHELP(nano_cancel_msg, 0), 0, 0, VIEW, 0);
-
 #endif
 
-
 #if !defined(DISABLE_BROWSER) || !defined(DISABLE_MOUSE) || !defined (DISABLE_HELP)
     currshortcut = main_list;
 #endif
-
 #ifndef NANO_SMALL
     toggle_init();
 #endif
diff --git a/nano.1 b/nano.1
index 79f01933d8280e67ea1878a75024fa8019b2c9a4..e4852ae3d25c13d41b92273e8425dccbcef40c85 100644 (file)
--- a/nano.1
+++ b/nano.1
@@ -6,7 +6,7 @@
 .\" Public License for copying conditions. There is NO warranty.
 .\"
 .\" $Id$
-.TH NANO 1 "January 3, 2002"
+.TH NANO 1 "June 27, 2002"
 .\" Please adjust this date whenever revising the manpage.
 .\"
 .SH NAME
@@ -31,11 +31,15 @@ also implements some missing (or disabled by default) features in Pico,
 such as "search and replace" and "goto line number".
 .SH OPTIONS
 .TP
+.B \-B (\-\-backup)
+When saving a file, back up the previous version of it to the current
+filename suffixed with a ~.
+.TP
 .B \-D (\-\-dos)
 Write file in DOS format.
 .TP
 .B \-F (\-\-multibuffer)
-Enable multiple file buffers (if available).
+Enable multiple file buffers, if available.
 .TP
 .B \-K (\-\-keypad)
 Do not use the ncurses keypad() call unless necessary.  Try this flag if 
@@ -66,7 +70,8 @@ Set the size (width) of a tab.
 Show the current version number and author.
 .TP
 .B \-Y (\-\-syntax=[str])
-Specify a specific syntax highlighting from the .nanorc to use (if available).
+Specify a specific syntax highlighting from the .nanorc to use, if
+available.
 .TP
 .B \-c (\-\-const)
 Constantly show the cursor position.
@@ -89,18 +94,19 @@ a new file, do not follow it.  Good for editing files in /tmp, perhaps?
 Enable mouse support (if available for your system).
 .TP
 .B \-o [dir] (\-\-operatingdir=[dir])
-Set operating directory. Makes nano set up something similar to a chroot.
+Set operating directory. Makes nano set up something similar to a
+chroot.
 .TP
 .B \-p (\-\-pico)
-Emulate Pico as closely as possible.  This affects both the "shortcut list"
-at the bottom of the screen, as well as the display and entry of previous
-search and replace strings.
+Emulate Pico as closely as possible.  This affects both the "shortcut
+list" at the bottom of the screen, as well as the display and entry of
+previous search and replace strings.
 .TP
 .B \-r [#cols] (\-\-fill=[#cols])
-Wrap lines at column #cols.  By default, this is the width of the screen,
-less eight.  If this value is negative, wrapping will occur at #cols from
-the right of the screen, allowing it to vary along with the screen width
-if the screen is resized.
+Wrap lines at column #cols.  By default, this is the width of the
+screen, less eight.  If this value is negative, wrapping will occur at
+#cols from the right of the screen, allowing it to vary along with the
+screen width if the screen is resized.
 .TP
 .B \-s [prog] (\-\-speller=[prog])
 Enable alternative spell checker command.
@@ -128,10 +134,10 @@ Places cursor at LINE on startup.
 .SH NOTES
 Nano will try to dump the buffer into an emergency file in some cases.
 Mainly, this will happen if Nano receives a SIGHUP or runs out of
-memory, when it will write the buffer into a file named "nano.save" if the
-buffer didn't have a name already, or will add a ".save" suffix to the
-current filename. If an emergency file with that name already exists in
-the current directory, ".save" and a number (e.g. ".save.1") will be
+memory, when it will write the buffer into a file named "nano.save" if
+the buffer didn't have a name already, or will add a ".save" suffix to
+the current filename. If an emergency file with that name already exists
+in the current directory, ".save" and a number (e.g. ".save.1") will be
 suffixed to the current filename in order to make it unique. In
 multibuffer mode, nano will write all the open buffers to the respective
 emergency files.
index 2d15d6496a52c6a333eaaca97a404fbc6d1eecbe..86aaaa18193db2a3120132e2cdbea2d7d3bf04fc 100644 (file)
@@ -3,7 +3,7 @@ Content-type: text/html
 <HTML><HEAD><TITLE>Manpage of NANO</TITLE>
 </HEAD><BODY>
 <H1>NANO</H1>
-Section: User Commands  (1)<BR>Updated: January 3, 2002<BR><A HREF="#index">Index</A>
+Section: User Commands  (1)<BR>Updated: June 27, 2002<BR><A HREF="#index">Index</A>
 <A HREF="http://localhost/cgi-bin/man/man2html">Return to Main Contents</A><HR>
 
 
@@ -44,6 +44,11 @@ such as &quot;search and replace&quot; and &quot;goto line number&quot;.
 <H2>OPTIONS</H2>
 
 <DL COMPACT>
+<DT><B>-B (--backup)</B>
+
+<DD>
+When saving a file, back up the previous version of it to the current
+filename suffixed with a ~.
 <DT><B>-D (--dos)</B>
 
 <DD>
@@ -51,7 +56,7 @@ Write file in DOS format.
 <DT><B>-F (--multibuffer)</B>
 
 <DD>
-Enable multiple file buffers (if available).
+Enable multiple file buffers, if available.
 <DT><B>-K (--keypad)</B>
 
 <DD>
@@ -91,7 +96,8 @@ Show the current version number and author.
 <DT><B>-Y (--syntax=[str])</B>
 
 <DD>
-Specify a specific syntax highlighting from the .nanorc to use (if available).
+Specify a specific syntax highlighting from the .nanorc to use, if
+available.
 <DT><B>-c (--const)</B>
 
 <DD>
@@ -121,20 +127,21 @@ Enable mouse support (if available for your system).
 <DT><B>-o [dir] (--operatingdir=[dir])</B>
 
 <DD>
-Set operating directory. Makes nano set up something similar to a chroot.
+Set operating directory. Makes nano set up something similar to a
+chroot.
 <DT><B>-p (--pico)</B>
 
 <DD>
-Emulate Pico as closely as possible.  This affects both the &quot;shortcut list&quot;
-at the bottom of the screen, as well as the display and entry of previous
-search and replace strings.
+Emulate Pico as closely as possible.  This affects both the &quot;shortcut
+list&quot; at the bottom of the screen, as well as the display and entry of
+previous search and replace strings.
 <DT><B>-r [#cols] (--fill=[#cols])</B>
 
 <DD>
-Wrap lines at column #cols.  By default, this is the width of the screen,
-less eight.  If this value is negative, wrapping will occur at #cols from
-the right of the screen, allowing it to vary along with the screen width
-if the screen is resized.
+Wrap lines at column #cols.  By default, this is the width of the
+screen, less eight.  If this value is negative, wrapping will occur at
+#cols from the right of the screen, allowing it to vary along with the
+screen width if the screen is resized.
 <DT><B>-s [prog] (--speller=[prog])</B>
 
 <DD>
@@ -173,10 +180,10 @@ Places cursor at LINE on startup.
 
 Nano will try to dump the buffer into an emergency file in some cases.
 Mainly, this will happen if Nano receives a SIGHUP or runs out of
-memory, when it will write the buffer into a file named &quot;nano.save&quot; if the
-buffer didn't have a name already, or will add a &quot;.save&quot; suffix to the
-current filename. If an emergency file with that name already exists in
-the current directory, &quot;.save&quot; and a number (e.g. &quot;.save.1&quot;) will be
+memory, when it will write the buffer into a file named &quot;nano.save&quot; if
+the buffer didn't have a name already, or will add a &quot;.save&quot; suffix to
+the current filename. If an emergency file with that name already exists
+in the current directory, &quot;.save&quot; and a number (e.g. &quot;.save.1&quot;) will be
 suffixed to the current filename in order to make it unique. In
 multibuffer mode, nano will write all the open buffers to the respective
 emergency files.
@@ -227,6 +234,6 @@ used by others).
 This document was created by
 <A HREF="http://localhost/cgi-bin/man/man2html">man2html</A>,
 using the manual pages.<BR>
-Time: 19:17:30 GMT, May 08, 2002
+Time: 21:45:15 GMT, June 27, 2002
 </BODY>
 </HTML>
diff --git a/nano.c b/nano.c
index 25f94a2fe5db2294e709681a692a737dcdb90459..104e35cd29b52c91b028a343d7c9eb0ae72da94e 100644 (file)
--- a/nano.c
+++ b/nano.c
@@ -464,7 +464,9 @@ void usage(void)
     printf(_("Option           Meaning\n"));
 #endif /* HAVE_GETOPT_LONG */
 
+    print1opt("-h, -?", "--help", _("Show this message"));
 #ifndef NANO_SMALL
+    print1opt("-B", "--backup", _("Backup existing files on save"));
     print1opt("-D", "--dos", _("Write file in DOS format"));
 #endif
 #ifdef ENABLE_MULTIBUFFER
@@ -478,7 +480,9 @@ void usage(void)
 #ifndef DISABLE_JUSTIFY
     print1opt(_("-Q [str]"), _("--quotestr [str]"), _("Quoting string, default \"> \""));
 #endif
-
+#ifdef HAVE_REGEX_H
+    print1opt("-R", "--regexp", _("Do regular expression searches"));
+#endif
 #ifndef NANO_SMALL
     print1opt("-S", "--smooth", _("Smooth scrolling"));
 #endif
@@ -488,7 +492,6 @@ void usage(void)
     print1opt(_("-Y [str]"), _("--syntax [str]"), _("Syntax definition to use"));
 #endif
     print1opt("-c", "--const", _("Constantly show cursor position"));
-    print1opt("-h", "--help", _("Show this message"));
 #ifndef NANO_SMALL
     print1opt("-i", "--autoindent", _("Automatically indent new lines"));
     print1opt("-k", "--cut", _("Let ^K cut from cursor to end of line"));
@@ -503,7 +506,6 @@ void usage(void)
     print1opt(_("-o [dir]"), _("--operatingdir=[dir]"), _("Set operating directory"));
 #endif
     print1opt("-p", "--pico", _("Emulate Pico as closely as possible"));
-
 #ifndef DISABLE_WRAPJUSTIFY
     print1opt(_("-r [#cols]"), _("--fill=[#cols]"), _("Set fill cols to (wrap lines at) #cols"));
 #endif
@@ -2395,7 +2397,7 @@ int do_justify(void)
            strcpy(&tmpline->data[j], quotestr);
 
        /* Skip the white space in current. */
-       memcpy(&tmpline->data[qdepth], current->data + i + 1, slen-qdepth);
+       memcpy(&tmpline->data[qdepth], current->data + i + 1, slen - qdepth);
        tmpline->data[slen] = '\0';
 
        current->data = nrealloc(current->data, i + 1);
@@ -2700,13 +2702,6 @@ void do_toggle(toggle *which)
     char *enabled = _("enabled");
     char *disabled = _("disabled");
 
-    switch (which->val) {
-    case TOGGLE_BACKWARDS_KEY:
-    case TOGGLE_CASE_KEY:
-    case TOGGLE_REGEXP_KEY:
-       return;
-    }
-
     /* Even easier! */
     TOGGLE(which->flag);
 
@@ -2809,49 +2804,49 @@ int main(int argc, char *argv[])
 #ifdef HAVE_GETOPT_LONG
     int option_index = 0;
     struct option long_options[] = {
+       {"help", 0, 0, 'h'},
+#ifdef ENABLE_MULTIBUFFER
+       {"multibuffer", 0, 0, 'F'},
+#endif
+       {"keypad", 0, 0, 'K'},
+#ifndef DISABLE_JUSTIFY
+       {"quotestr", 1, 0, 'Q'},
+#endif
 #ifdef HAVE_REGEX_H
        {"regexp", 0, 0, 'R'},
 #endif
+       {"tabsize", 1, 0, 'T'},
        {"version", 0, 0, 'V'},
-       {"const", 0, 0, 'c'},
-       {"suspend", 0, 0, 'z'},
-       {"nowrap", 0, 0, 'w'},
-       {"nohelp", 0, 0, 'x'},
-       {"help", 0, 0, 'h'},
-       {"view", 0, 0, 'v'},
-#ifndef NANO_SMALL
-       {"cut", 0, 0, 'k'},
-       {"dos", 0, 0, 'D'},
-       {"mac", 0, 0, 'M'},
-       {"noconvert", 0, 0, 'N'},
-       {"autoindent", 0, 0, 'i'},
-#endif
-       {"tempfile", 0, 0, 't'},
-#ifndef DISABLE_SPELLER
-       {"speller", 1, 0, 's'},
-#endif
-
-#ifndef DISABLE_WRAPJUSTIFY
-       {"fill", 1, 0, 'r'},
+#ifdef ENABLE_COLOR
+       {"syntax", 1, 0, 'Y'},
 #endif
+       {"const", 0, 0, 'c'},
+       {"nofollow", 0, 0, 'l'},
        {"mouse", 0, 0, 'm'},
 #ifndef DISABLE_OPERATINGDIR
        {"operatingdir", 1, 0, 'o'},
 #endif
        {"pico", 0, 0, 'p'},
-       {"nofollow", 0, 0, 'l'},
-       {"tabsize", 1, 0, 'T'},
-
-#ifdef ENABLE_MULTIBUFFER
-       {"multibuffer", 0, 0, 'F'},
+#ifndef DISABLE_WRAPJUSTIFY
+       {"fill", 1, 0, 'r'},
+#endif
+#ifndef DISABLE_SPELLER
+       {"speller", 1, 0, 's'},
 #endif
+       {"tempfile", 0, 0, 't'},
+       {"view", 0, 0, 'v'},
+       {"nowrap", 0, 0, 'w'},
+       {"nohelp", 0, 0, 'x'},
+       {"suspend", 0, 0, 'z'},
 #ifndef NANO_SMALL
+       {"backup", 0, 0, 'B'},
+       {"dos", 0, 0, 'D'},
+       {"mac", 0, 0, 'M'},
+       {"noconvert", 0, 0, 'N'},
        {"smooth", 0, 0, 'S'},
+       {"autoindent", 0, 0, 'i'},
+       {"cut", 0, 0, 'k'},
 #endif
-#ifdef ENABLE_COLOR
-       {"syntax", 1, 0, 'Y'},
-#endif
-       {"keypad", 0, 0, 'K'},
        {0, 0, 0, 0}
     };
 #endif
@@ -2872,16 +2867,31 @@ int main(int argc, char *argv[])
 #endif /* ENABLE_NANORC */
 
 #ifdef HAVE_GETOPT_LONG
-    while ((optchr = getopt_long(argc, argv, "h?DFKMNQ:RST:VY:abcefgijklmo:pr:s:tvwxz",
+    while ((optchr = getopt_long(argc, argv, "h?BDFKMNQ:RST:VY:abcefgijklmo:pr:s:tvwxz",
                                 long_options, &option_index)) != EOF) {
 #else
     while ((optchr =
-           getopt(argc, argv, "h?DFKMNQ:RST:VY:abcefgijklmo:pr:s:tvwxz")) != EOF) {
+           getopt(argc, argv, "h?BDFKMNQ:RST:VY:abcefgijklmo:pr:s:tvwxz")) != EOF) {
 #endif
 
        switch (optchr) {
 
+       case 'h':
+       case '?':
+           usage();
+           exit(0);
+       case 'a':
+       case 'b':
+       case 'e':
+       case 'f':
+       case 'g':
+       case 'j':
+           /* Pico compatibility flags */
+           break;
 #ifndef NANO_SMALL
+       case 'B':
+           SET(BACKUP_FILE);
+           break;
        case 'D':
            SET(DOS_FILE);
            break;
@@ -2935,21 +2945,9 @@ int main(int argc, char *argv[])
            syntaxstr = mallocstrcpy(syntaxstr, optarg);
            break;
 #endif
-       case 'a':
-       case 'b':
-       case 'e':
-       case 'f':
-       case 'g':
-       case 'j':
-           /* Pico compatibility flags */
-           break;
        case 'c':
            SET(CONSTUPDATE);
            break;
-       case 'h':
-       case '?':
-           usage();
-           exit(0);
 #ifndef NANO_SMALL
        case 'i':
            SET(AUTOINDENT);
@@ -3026,7 +3024,6 @@ int main(int argc, char *argv[])
            usage();
            exit(0);
        }
-
     }
 
     /* Clear the filename we'll be using */
diff --git a/nano.h b/nano.h
index 1fb406f81d031961e24855c28deb06cc6c6c2c9d..7cb9d4773916a5cac5a5b9ab14052a6d441932d0 100644 (file)
--- a/nano.h
+++ b/nano.h
 #define ISSET(bit) (flags & bit)
 #define TOGGLE(bit) flags ^= bit
 
+#ifndef NANO_SMALL
+  /* For the backup file copy ... */
+# define COPYFILEBLOCKSIZE 1024
+#endif
 
 #ifdef USE_SLANG       /* Slang support enabled */
 #include <slcurses.h>
@@ -50,6 +54,8 @@
 #include <libintl.h>
 #endif
 
+#include <sys/types.h>
+#include <sys/stat.h>
 #include "config.h"
 
 #if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF)
@@ -79,6 +85,9 @@ typedef struct filestruct {
 #ifdef ENABLE_MULTIBUFFER
 typedef struct openfilestruct {
     char *filename;
+#ifndef NANO_SMALL
+    struct stat originalfilestat;
+#endif
     struct openfilestruct *next;       /* Next node */
     struct openfilestruct *prev;       /* Previous node */
     struct filestruct *fileage;        /* Current file */
@@ -190,6 +199,7 @@ typedef struct syntaxtype {
 #define DISABLE_CURPOS         (1<<24) /* Damn, we still need it */
 #define ALT_KEYPAD             (1<<25)
 #define NO_CONVERT             (1<<26)
+#define BACKUP_FILE            (1<<27)
 
 /* Control key sequences, changing these would be very very bad */
 
@@ -259,9 +269,7 @@ typedef struct syntaxtype {
 #define NANO_ALT_LCARAT '<'
 #define NANO_ALT_RCARAT '>'
 #define NANO_ALT_BRACKET ']'
-#ifndef NANO_SMALL
-#  define NANO_ALT_SPACE ' '
-#endif
+#define NANO_ALT_SPACE ' '
 
 /* Some semi-changeable keybindings; don't play with unless you're sure you
 know what you're doing */
@@ -325,10 +333,8 @@ know what you're doing */
 #define NANO_OPENNEXT_ALTKEY   NANO_ALT_PERIOD
 #define NANO_BRACKET_KEY       NANO_ALT_BRACKET
 #define NANO_EXTCMD_KEY                NANO_CONTROL_X
-#ifndef NANO_SMALL
-#  define NANO_NEXTWORD_KEY    NANO_CONTROL_SPACE
-#  define NANO_PREVWORD_KEY    NANO_ALT_SPACE
-#endif
+#define NANO_NEXTWORD_KEY      NANO_CONTROL_SPACE
+#define NANO_PREVWORD_KEY      NANO_ALT_SPACE
 
 #define TOGGLE_CONST_KEY       NANO_ALT_C
 #define TOGGLE_AUTOINDENT_KEY  NANO_ALT_I
@@ -346,6 +352,7 @@ know what you're doing */
 #define TOGGLE_MAC_KEY         NANO_ALT_O
 #define TOGGLE_SMOOTH_KEY      NANO_ALT_S
 #define TOGGLE_NOCONVERT_KEY   NANO_ALT_N
+#define TOGGLE_BACKUP_KEY      NANO_ALT_B
 
 #define MAIN_VISIBLE 12
 
index 1dddca218239371a0f725e4adb04aeab61c330c1..2b6646485f3b9d35f4263484028e85ad6166578c 100644 (file)
--- a/nano.texi
+++ b/nano.texi
@@ -9,7 +9,7 @@
 @smallbook
 @set EDITION 0.1
 @set VERSION 1.1.9
-@set UPDATED 4 Jan 2002
+@set UPDATED 27 Jun 2002
 
 @dircategory Editors
 @direntry
@@ -106,13 +106,18 @@ Email bug reports to @email{nano@@nano-editor.org}.
 @section Command Line Options
 
 @code{nano} takes the following options from the command line:
+
 @table @code
 
+@item -B, --backup
+When saving a file, back up the previous version of it to the current
+filename suffixed with a ~.
+
 @item -D, --dos
 Write file in DOS format.
 
 @item -F, --multibuffer
-Enable multiple file buffers.
+Enable multiple file buffers, if available.
 
 @item -K, --keypad
 Do not use the ncurses keypad() call unless necessary.  Try this flag if
@@ -140,6 +145,10 @@ Set the displayed tab length to [num] columns.
 @item -V, --version 
 Print the version number and copyright and quit.
 
+@item -Y, --syntax=[str]
+Specify a specific syntax highlighting from the .nanorc to use, if
+available.
+
 @item -c, --const
 Constantly display the cursor position and line number on the statusbar.
 
@@ -270,22 +279,22 @@ will display the current directory instead of the filename.
 @node The Statusbar, Shortcut Lists, The Titlebar, Editor Basics
 @section The Statusbar
 
-The statusbar is located three lines from the bottom of the screen (or the
-bottom line in Expert Mode.  @xref{Expert Mode}, for more info.  
+The statusbar is located three lines from the bottom of the screen (or
+the bottom line in Expert Mode.  @xref{Expert Mode}, for more info.
 
 The Statusbar shows important and informational messages.  Any error
 messages that occur from using the editor will appear on the statusbar.
 Any questions that are asked of the user will be asked on the statusbar,
-and any user input (search strings, file names, etc) will be input on the
-statusbar.
+and any user input (search strings, file names, etc) will be input on
+the statusbar.
 
 @node Shortcut Lists, , The Statusbar, Editor Basics
 @section Shortcut Lists
 
-The Shortcut Lists are the two lines at the bottom of the screen which show
-some of the more commonly used functions in the editor. The exact
-functions which are displayed depend on whether Pico Compatibility Mode mode
-is enabled. @xref{Pico Compatibility}, for more info.
+The Shortcut Lists are the two lines at the bottom of the screen which
+show some of the more commonly used functions in the editor. The exact
+functions which are displayed depend on whether Pico Compatibility Mode
+mode is enabled. @xref{Pico Compatibility}, for more info.
 
 @node Online Help, Feature Toggles, Editor Basics, Top
 @chapter Online Help
@@ -302,25 +311,16 @@ and ^V (Page Down) keys.  ^X exits the help system.
 Toggles allow you to change certain aspects of the editor that
 would normally be done via command line flags. They are invoked via
 certain Meta key sequenced. @xref{Special Functions}, for more info.
-The following toggles are available:
+The following global toggles are available:
 
 @table @code
 
-@item Case Sensitive Search Toggle (Meta-A)
-toggles case sensistive searching functionality on/off.
-
-@item Backwards Search Toggle (Meta-B)
-toggles backwards searching fuctionality on/off.
-
-@item Constant Update Toggle (Meta-C)
-toggles the -c (--const) command line flag.
+@item Backup File Toggle (Meta-B)
+toggles the -B (--backup) command line flag.
 
 @item DOS Format Toggle (Meta-D)
 toggles the -D (--dos) command line flag.
 
-@item Regular Expressions Toggle (Meta-E)
-toggles the -R (--regexp) command line flag.
-
 @item Multiple Files Toggle (Meta-F)
 toggles the  -F (--multibuffer) command line flag.
 
@@ -365,21 +365,21 @@ changes buffer to next loaded file.
 @chapter The File Browser
 
 When reading or writing files, pressing ^T will invoke the file browser.
-Here, one can navigate directories in a graphical manner in order to find
-the desired file.
+Here, one can navigate directories in a graphical manner in order to
+find the desired file.
 
 Basic movement in the file browser is accomplished with he arrow keys
-and page up/down.  The behavior of the enter (or 's') key varies by what 
-is currently selected.  If the currently selected object is a directory, 
-the file browser will enter and display the contents of the directory.  If
-the object is a file, this filename and path are copied to the statusbar
-and the file browser is exited.
+and page up/down.  The behavior of the enter (or 's') key varies by what
+is currently selected.  If the currently selected object is a directory,
+the file browser will enter and display the contents of the directory. 
+If the object is a file, this filename and path are copied to the
+statusbar and the file browser is exited.
 
 @node Pico Compatibility, Building and Configure Options, The File Browser, Top
 @chapter Pico Compatibility
 
-Nano does not completely emulate Pico by default.  The following differences
-apply to the default mode and Pico Compatibility mode:
+Nano does not completely emulate Pico by default.  The following
+differences apply to the default mode and Pico Compatibility mode:
 
 @table @code
 @item Displayed Shortcuts
@@ -466,24 +466,22 @@ Disables all word wrapping in the editor.  This also eliminates the
 -w command line flag, as nonwrapping is then the default behavior.
 
 @item --disable-mouse
-Disables all mouse functionality.  This also disables the -m commands line 
+Disables all mouse functionality.  This also disables the -m command line
 flag which enables the mouse functions.
 
 @item --disable-operatingdir
-Disables setting of operating directory. This also disables the -o command
-line flag.
+Disables setting of operating directory. This also disables the -o
+command line flag.
 
 @item --disable-nls
 Disables Native Language support. This will make the available GNU nano
 translations unusable.
 
 @item --with-slang
-Compiling GNU nano with Slang is supported, and will make the binary notably
-smaller than if compiled with ncurses or other curses libraries.
+Compiling GNU nano with Slang is supported, and will make the binary
+notably smaller than if compiled with ncurses or other curses libraries.
 
 @end table
 
 @contents
 @bye
-
-
index bc23026236e6288860e807e70546d539c2918e21..951b8ff6df90c6e3d9930d39be67fbf1832fe222 100644 (file)
@@ -4,74 +4,73 @@
 #
 # To make sure a value is not enabled, use "unset <option>"
 
-# Use regular expressions by default 
-# set regexp 
+# Use auto-indentation
+# set autoindent
+
+# Backup files to filename~
+# set backup
 
 # Constantly update the cursor position
 # set const
 
-# Show column position relative to the current line, not the whole file
-# set relative
-
 # Use cut to end of line with ^K by default
 # set cut
 
-# Use Auto-indentation
-# set autoindent
+# Use this value instead of the default
+# set fill -8
+
+# Use alternate keypad routines
+# set keypad
+
+# Allow multiple file buffers (using ^R inserts into separate buffer)
+# You must have configured with --enable-multibuffer or --enable-extra
+# for this to work
+#
+# set multibuffer
+
+# Don't convert files from DOS/Mac format
+# set noconvert
 
 # Don't follow symlinks when writing files
 # set nofollow
 
+# Don't display the help lists at the bottom of the screen
+# set nohelp
+
+# Don't wrap text at all
+# set nowrap
+
 # Set operating directory (chroot of sorts)
 # set operatingdir "~"
 
 # Use Pico Compatibility mode for the shortcut lists and search text
 # set pico
 
-# Use this value instead of the default
-# set fill -8
+# Use this as the quoting string.  You shouldn't need to change this,
+# but...... default "> "
+# set quotestr "// "
 
-# Use this tab size instead of the default
-# set tabsize 4
+# Do regular expression searches by default 
+# set regexp
+
+# Use smooth scrolling as the default
+# set smooth
 
 # Use this spelling checker instead of the default one
 # set speller aspell
 
-# Save automatically on exit, don't prompt
-# set tempfile
-
-# Disallow file modification, why would you want this in an rc file? ;)
-# set view
-
-# Don't wrap text at all
-# set nowrap
-
-# Don't display the help lists at the bottom of the screen
-# set nohelp
-
 # Allow nano to be suspended with ^Z
 # set suspend
 
-# Use smooth scrolling as the default
-# set smooth
-
-# Use alternate keypad routines
-# set keypad
-
-# Don't convert files from DOS/Mac format
-# set noconvert
+# Use this tab size instead of the default
+# set tabsize 4
 
-# Allow multiple file buffers (using ^R inserts into separate buffer)
-# You must have configured with --enable-multibuffer or --enable-extra for
-# this to work
-#
-# set multibuffer
+# Save automatically on exit, don't prompt
+# set tempfile
 
-# Use this as the quoting string.  You shouldn't need to change this,
-# but...... default "> "
-# set quotestr "// "
+# Disallow file modification, why would you want this in an rc file? ;)
+# set view
 
-#
 # Color setup
 # Format: 
 # syntax "short description" ["filename regex" ...]
@@ -85,7 +84,7 @@
 # If your system supports transparency, not specifying a background
 # color will use a transparent color.  If you don't want this, be sure
 # to set the background color to black or white.
-#
+
 # syntax "c-file" ".*\.c" ".*\.h"
 # color red "\<[A-Z_]\{2,\}\>" 
 # color green "\<float\>" "\<char\>" "\<int\>" "\<void\>"
 # color brightcyan "#define" "#include" "#ifn*def" "#endif" 
 # color brightcyan "#elif" "#else" "#if"
 
-# You will in general want your comments and strings to come last, becase
-# syntax highlighting rules will be applied in the order they are read in
+# You will in general want your comments and strings to come last,
+# because syntax highlighting rules will be applied in the order they are
+# read in
 
 # color brightyellow "<[^= ]*>" "\"[^"]*\""
 # color brightblue "//.*"
 # color brightblue start="/\*.*" end="\*/"
 
 # For this you will probably want to set your editor to "nano -Y mutt"
-#
+
 # syntax "mutt"
 # color green "^>.*"
diff --git a/proto.h b/proto.h
index 1c4436a66b3d6ca6091d4fedf51f44420533c058..c12cfdb4d5811089721de3cdcb8060fdf5310220 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -45,6 +45,7 @@ extern char *quotestr;
 
 extern WINDOW *edit, *topwin, *bottomwin;
 extern char *filename;
+extern struct stat originalfilestat;
 extern char *answer;
 extern char *hblank, *help_text;
 extern char *last_search;
index c02784102af69dd8abc88f6f6aadd386ce5671eb..93c5a4f1a20fd121712c62759b22ba51e07f2a47 100644 (file)
--- a/rcfile.c
+++ b/rcfile.c
 
 /* Static stuff for the nanorc file */
 rcoption rcopts[] = {
-    {"regexp", USE_REGEXP},
-    {"const", CONSTUPDATE},
+#ifndef NANO_SMALL
     {"autoindent", AUTOINDENT},
+    {"backup", BACKUP_FILE},
+#endif
+    {"const", CONSTUPDATE},
+#ifndef NANO_SMALL
     {"cut", CUT_TO_END},
-    {"nofollow", FOLLOW_SYMLINKS},
+#endif
+    {"fill", 0},
+    {"keypad", ALT_KEYPAD},
+#ifndef DISABLE_MOUSE
     {"mouse", USE_MOUSE},
+#endif
+#ifdef ENABLE_MULTIBUFFER
+    {"multibuffer", MULTIBUFFER},
+#endif
+#ifndef NANO_SMALL
+    {"noconvert", NO_CONVERT},
+#endif
+    {"nofollow", FOLLOW_SYMLINKS},
+    {"nohelp", NO_HELP},
+    {"nowrap", NO_WRAP},
+#ifndef DISABLE_OPERATINGDIR
     {"operatingdir", 0},
+#endif
     {"pico", PICO_MODE},
-    {"tabsize", 0},
-    {"fill", 0},
+#ifndef NANO_SMALL
+    {"quotestr", 0},
+#endif
+#ifdef HAVE_REGEX_H
+    {"regexp", USE_REGEXP},
+#endif
+#ifndef NANO_SMALL
+    {"smooth", SMOOTHSCROLL},
+#endif
+#ifndef DISABLE_SPELLER
     {"speller", 0},
+#endif
+    {"suspend", SUSPEND},
+    {"tabsize", 0},
     {"tempfile", TEMP_OPT},
     {"view", VIEW_MODE},
-    {"nowrap", NO_WRAP},
-    {"nohelp", NO_HELP},
-    {"suspend", SUSPEND},
-    {"multibuffer", MULTIBUFFER},
-    {"smooth", SMOOTHSCROLL},
-    {"keypad", ALT_KEYPAD},
-    {"noconvert", NO_CONVERT},
-    {"quotestr", 0},
     {"", 0}
 };
 
@@ -144,6 +165,8 @@ char *parse_next_regex(char *ptr)
 
 }
 
+#ifdef ENABLE_COLOR
+
 int colortoint(char *colorname, int *bright)
 {
     int mcolor = 0;
@@ -183,8 +206,6 @@ int colortoint(char *colorname, int *bright)
     return mcolor;
 }
 
-
-#ifdef ENABLE_COLOR
 void parse_syntax(FILE * rcstream, char *buf, char *ptr)
 {
     syntaxtype *tmpsyntax = NULL;
@@ -268,8 +289,7 @@ void parse_syntax(FILE * rcstream, char *buf, char *ptr)
            exttmp->next->val = mallocstrcpy(exttmp->next->val, fileregptr);
            exttmp->next->next = NULL;
        }
-   }
-
+    }
 }
 
 /* Parse the color stuff into the colorstrings array */
@@ -399,7 +419,8 @@ void parse_colors(FILE * rcstream, char *buf, char *ptr)
 
     }
 }
-#endif                         /* ENABLE_COLOR */
+
+#endif /* ENABLE_COLOR */
 
 /* Parse the RC file, once it has been opened successfully */
 void parse_rcfile(FILE * rcstream)
@@ -597,5 +618,4 @@ void do_rcfile(void)
 
 }
 
-
-#endif                         /* ENABLE_NANORC */
+#endif /* ENABLE_NANORC */
index aee3e3cd7aa56801f735cbf71f0e88c0ecf8eb5f..fbcb442d1996b3f61eda30ab6d286798468c2282 100644 (file)
--- a/search.c
+++ b/search.c
@@ -75,9 +75,6 @@ int search_init(int replacing)
     int i = 0;
     char *buf;
     static char *backupstring = NULL;
-#ifndef NANO_SMALL
-    toggle *t;
-#endif
 
     search_init_globals();
 
@@ -180,20 +177,19 @@ int search_init(int replacing)
        last_replace[0] = '\0';
        break;
     case TOGGLE_CASE_KEY:
+       TOGGLE(CASE_SENSITIVE);
+       goto string_reinit;
     case TOGGLE_BACKWARDS_KEY:
+       TOGGLE(REVERSE_SEARCH);
+       goto string_reinit;
 #ifdef HAVE_REGEX_H
     case TOGGLE_REGEXP_KEY:
+       TOGGLE(USE_REGEXP);
 #endif
+  string_reinit:
        free(backupstring);
        backupstring = NULL;
        backupstring = mallocstrcpy(backupstring, answer);
-
-#ifndef NANO_SMALL
-       for (t = toggles; t != NULL; t = t->next)
-           if (i == t->val)
-               TOGGLE(t->flag);
-#endif
-
        return 1;
     case NANO_OTHERSEARCH_KEY:
        backupstring = mallocstrcpy(backupstring, answer);
@@ -859,7 +855,7 @@ int do_gotoline_void(void)
     return do_gotoline(0, 0);
 }
 
-#if (defined ENABLE_MULTIBUFFER || !defined DISABLE_SPELLER)
+#if defined(ENABLE_MULTIBUFFER) || !defined(DISABLE_SPELLER)
 void do_gotopos(int line, int pos_x, int pos_y, int pos_placewewant)
 {
     /* since do_gotoline() resets the x-coordinate but not the
diff --git a/winio.c b/winio.c
index 6d1da81d8ae9bbc539e58d5bb14dc4f7b83746cb..08b0c664dd09ac886fcf2f1289d3c8651a512b69 100644 (file)
--- a/winio.c
+++ b/winio.c
@@ -1920,7 +1920,7 @@ void dump_buffer(filestruct * inptr)
        fflush(stderr);
        fileptr = fileptr->next;
     }
-#endif                         /* DEBUG */
+#endif /* DEBUG */
 }
 
 void dump_buffer_reverse(filestruct * inptr)
@@ -1934,7 +1934,7 @@ void dump_buffer_reverse(filestruct * inptr)
        fflush(stderr);
        fileptr = fileptr->prev;
     }
-#endif                         /* DEBUG */
+#endif /* DEBUG */
 }
 
 /* Fix editbot, based on the assumption that edittop is correct */