]> git.wh0rd.org Git - nano.git/commitdiff
miscellaneous bug fixes
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Thu, 17 Oct 2002 02:19:31 +0000 (02:19 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Thu, 17 Oct 2002 02:19:31 +0000 (02:19 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1303 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

16 files changed:
ChangeLog
color.c
configure.ac
cut.c
files.c
global.c
move.c
nano.1
nano.1.html
nano.c
nano.h
proto.h
rcfile.c
search.c
utils.c
winio.c

index 05ade5268ba67d868bd3c2e3a6ed7810aa9f6a66..5d57311d50dd8a56d2a4fb9a4f5323c9282adf4a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,6 +8,43 @@ CVS code -
          complicated for a feature freeze.
        - Disable VSTOP keystroke.  Stops people accidentally locking up
          nano (suggested by David Benbennick).
+       - Pluralize messages with ngettext() where needed. (David
+         Benbennick)
+       - Update nano.1 and nano.1.html to show that nano now does an
+         emergency save on receiving SIGHUP or SIGTERM. (DLR)
+       - Don't include "nowrap" in the long options if
+         DISABLE_WRAPPING is defined. (DLR)
+- files.c:
+  read_file()
+       - Minor efficiency fixes, some of which fit in with the change
+         to ngettext() usage mentioned above. (David Benbennick)
+  do_browser()
+       - Make sure the value of path is mallocstrcpy()ed into retval
+         and not just assigned to it, to avoid memory corruption
+         problems. (DLR)
+- nano.c:
+  justify_format()
+       - Make sure the double space maintained after sentence-ending
+         punctuation is done when that punctuation is immediately
+         followed by a bracket-type character, so justifying e.g.
+         sentences in parentheses works properly. (David Benbennick)
+  handle_hup()
+       - Renamed handle_hupterm() to show that it now handles SIGTERM
+         as well as SIGHUP. (DLR)
+  signal_init()
+       - Do an emergency save on receiving either SIGHUP or SIGTERM,
+         not just SIGHUP. (David Benbennick)
+  main()
+       - Fix a problem where control key commands were printed
+         literally instead of interpreted after a failed search of a
+         one-line file. (David Benbennick)
+- proto.h:
+  handle_hup()
+       - Renamed handle_hupterm(); see above for why. (DLR)
+- winio.c:
+  edit_add()
+       - Fix a potential infinite loop occurring with certain
+         zero-length regexes. (David Benbennick)
 
 GNU nano 1.1.11 - 10/01/2002
 - General:
diff --git a/color.c b/color.c
index e26b5a5856c43a34f0aa42e18ac3f143ca99cfe8..0149d687f2811844d8db2970194f3313ded6de24 100644 (file)
--- a/color.c
+++ b/color.c
 
 #ifdef ENABLE_COLOR
 
-#ifdef ENABLE_NLS
-#include <libintl.h>
-#define _(string) gettext(string)
-#else
-#define _(string) (string)
-#endif
-
 /* For each syntax list entry, we go through the list of colors and
  * assign color pairs. */
 void set_colorpairs(void)
index b0d3dd7c8ef3b65ab0aa0ce4149bdc6eebf49630..b1115c6d75dcd285fedf5fdc61484861ce1469e0 100644 (file)
@@ -15,7 +15,7 @@ AC_SYS_LARGEFILE
 
 dnl Checks for header files.
 AC_HEADER_STDC
-AC_CHECK_HEADERS(fcntl.h unistd.h termios.h termio.h limits.h getopt.h regex.h)
+AC_CHECK_HEADERS(fcntl.h getopt.h libintl.h limits.h termio.h termios.h regex.h unistd.h)
 
 dnl options
 AC_ARG_ENABLE(debug, 
diff --git a/cut.c b/cut.c
index aa4e2c69cb402f5bdd66d2bcae4596cb4eac8ddb..7be1ed4e6d601dd63ab5417b1b24e9a97c73c95a 100644 (file)
--- a/cut.c
+++ b/cut.c
 #include "proto.h"
 #include "nano.h"
 
-#ifdef ENABLE_NLS
-#include <libintl.h>
-#define _(string) gettext(string)
-#else
-#define _(string) (string)
-#endif
-
 static int marked_cut;         /* Is the cutbuffer from a mark? */
 static filestruct *cutbottom = NULL; /* Pointer to end of cutbuffer */
 
diff --git a/files.c b/files.c
index a615a713fcfba4a4a0bd0870b72345801bc71c83..4ea06cf4828058379cad8762f32b3c70703dcc28 100644 (file)
--- a/files.c
+++ b/files.c
 #include "proto.h"
 #include "nano.h"
 
-#ifdef ENABLE_NLS
-#include <libintl.h>
-#define _(string) gettext(string)
-#else
-#define _(string) (string)
-#endif
-
 #ifndef NANO_SMALL
 static int fileformat = 0;     /* 0 = *nix, 1 = DOS, 2 = Mac */
 #endif
@@ -287,44 +280,38 @@ int read_file(FILE *f, const char *filename, int quiet)
 #endif
 
     /* Did we even GET a file if we don't already have one? */
-    if (totsize == 0 || fileptr == NULL) {
+    if (totsize == 0 || fileptr == NULL)
        new_file();
-       statusbar(_("Read %d lines"), num_lines);
-       return 1;
-    }
 
     /* Did we try to insert a file of 0 bytes? */
-    if (num_lines == 0)
-    {
-       statusbar(_("Read %d lines"), 0);
-       return 1;
-    }
-
-    if (current != NULL) {
-       fileptr->next = current;
-       current->prev = fileptr;
-       renumber(current);
-       current_x = 0;
-       placewewant = 0;
-    } else if (fileptr->next == NULL) {
-       filebot = fileptr;
-       new_magicline();
-       totsize--;
-
-       /* Update the edit buffer; note that if using multibuffers, a
-          quiet load will update the current open_files entry, while a
-          noisy load will add a new open_files entry */
-       load_file(quiet);
+    if (num_lines != 0) {
+       if (current != NULL) {
+           fileptr->next = current;
+           current->prev = fileptr;
+           renumber(current);
+           current_x = 0;
+           placewewant = 0;
+       } else if (fileptr->next == NULL) {
+           filebot = fileptr;
+           new_magicline();
+           totsize--;
+           load_file(quiet);
+       }
     }
 
 #ifndef NANO_SMALL
     if (fileformat == 2)
-       statusbar(_("Read %d lines (Converted from Mac format)"), num_lines);
+       statusbar(ngettext("Read %d line (Converted from Mac format)",
+                       "Read %d lines (Converted from Mac format)",
+                       num_lines), num_lines);
     else if (fileformat == 1)
-       statusbar(_("Read %d lines (Converted from DOS format)"), num_lines);
+       statusbar(ngettext("Read %d line (Converted from DOS format)",
+                       "Read %d lines (Converted from DOS format)",
+                       num_lines), num_lines);
     else
 #endif
-       statusbar(_("Read %d lines"), num_lines);
+       statusbar(ngettext("Read %d line", "Read %d lines", num_lines),
+                       num_lines);
 
     totlines += num_lines;
 
@@ -1659,7 +1646,8 @@ int write_file(const char *name, int tmp, int append, int nonamechange)
        /* Update originalfilestat to reference the file as it is now. */
        stat(filename, &originalfilestat);
 #endif
-       statusbar(_("Wrote %d lines"), lineswritten);
+       statusbar(ngettext("Wrote %d line", "Wrote %d lines", lineswritten),
+                       lineswritten);
        UNSET(MODIFIED);
        titlebar(NULL);
     }
@@ -2655,7 +2643,7 @@ char *do_browser(const char *inpath)
                free(foo);
                return do_browser(path);
            } else {
-               retval = path;
+               retval = mallocstrcpy(retval, path);
                abort = 1;
            }
            break;
index 5fc946b51693a4c98162ea4588d68efb6b3e0a2e..ee58dcd627f77f8a565f6dcc38c9a12a8e4eb928 100644 (file)
--- a/global.c
+++ b/global.c
 #include "proto.h"
 #include "nano.h"
 
-#ifdef ENABLE_NLS
-#include <libintl.h>
-#define _(string) gettext(string)
-#else
-#define _(string) (string)
-#endif
-
 /*
  * Global variables
  */
diff --git a/move.c b/move.c
index d70edad6d25417cf023994f63d97ce999bffe7ba..d0dead8d34ed5eefef60999290fe3f7ed7f45808 100644 (file)
--- a/move.c
+++ b/move.c
 #include "proto.h"
 #include "nano.h"
 
-#ifdef ENABLE_NLS
-#include <libintl.h>
-#define _(string) gettext(string)
-#else
-#define _(string) (string)
-#endif
-
 int do_home(void)
 {
     UNSET(KEEP_CUTBUFFER);
diff --git a/nano.1 b/nano.1
index 67818fe72ce53c4992955dbe28a4020c8076433f..d582707db2d19d5a46f2940381f30c6e6c8502c6 100644 (file)
--- a/nano.1
+++ b/nano.1
@@ -135,10 +135,10 @@ Enable suspend ability.
 Ignored, for compatibility with Pico.
 .SH NOTES
 \fBnano\fP will try to dump the buffer into an emergency file in some
-cases.  Mainly, this will happen if \fBnano\fP 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
+cases.  Mainly, this will happen if \fBnano\fP receives a SIGHUP or
+SIGTERM 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
+".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, \fBnano\fP will write all the open buffers
index 542b78b365f5f9257d0c1ecdc15015ab2f7876fa..f7601ac56803c788ea80e2c9dc7143b5fd7efbc3 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: July 30, 2002<BR><A HREF="#index">Index</A>
+Section: User Commands  (1)<BR>Updated: October 13, 2002<BR><A HREF="#index">Index</A>
 <A HREF="http://localhost/cgi-bin/man/man2html">Return to Main Contents</A><HR>
 
 
@@ -180,10 +180,10 @@ Ignored, for compatibility with Pico.
 <H2>NOTES</H2>
 
 <B>nano</B> will try to dump the buffer into an emergency file in some
-cases.  Mainly, this will happen if <B>nano</B> 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
+cases.  Mainly, this will happen if <B>nano</B> receives a SIGHUP or
+SIGTERM 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
+&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, <B>nano</B> will write all the open buffers
@@ -235,6 +235,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: 21:12:05 GMT, July 30, 2002
+Time: 16:04:40 GMT, October 13, 2002
 </BODY>
 </HTML>
diff --git a/nano.c b/nano.c
index 88928e178dfb3b9edd51099769adc6de2bea9c85..cfe88188d57bf252e748bb6e341b7bc5fb31cb55 100644 (file)
--- a/nano.c
+++ b/nano.c
 #include "proto.h"
 #include "nano.h"
 
-#ifdef ENABLE_NLS
-#include <libintl.h>
-#define _(string) gettext(string)
-#else
-#define _(string) (string)
-#endif
-
 #ifdef HAVE_TERMIOS_H
 #include <termios.h>
 #endif
@@ -1973,16 +1966,34 @@ int justify_format(int changes_allowed, filestruct *line, size_t skip)
     back = line->data + skip;
     front = back;
     for (; *front; front++) {
+       int remove_space = 0;
+           /* Do we want to remove this space? */
+
        if (*front == '\t') {
            if (!changes_allowed)
                return 1;
            *front = ' ';
        }
        /* these tests are safe since line->data + skip is not a space */
-       if (*front == ' ' && *(front - 1) == ' ' && *(front - 2) != '.' &&
-               *(front - 2) != '!' && *(front - 2) != '?') {
+       if (*front == ' ' && *(front-1) == ' ') {
+           const char *brackets = _("'\")}]>");
+           const char *punct = _(".?!");
+           const char *bob = front - 2;
+
+           remove_space = 1;
+           for (bob = front - 2; bob >= line->data + skip; bob--) {
+               if (strchr(punct, *bob) != NULL) {
+                   remove_space = 0;
+                   break;
+               }
+               if (strchr(brackets, *bob) == NULL)
+                   break;
+           }
+       }
+
+       if (remove_space) {
            /* Now *front is a space we want to remove.  We do that by
-            * simply failing to assign it to *back */
+            * simply failing to assign it to *back. */
            if (!changes_allowed)
                return 1;
 #ifndef NANO_SMALL
@@ -2630,9 +2641,10 @@ void signal_init(void)
     act.sa_handler = SIG_IGN;
     sigaction(SIGINT, &act, NULL);
 
-    /* Trap SIGHUP cuz we want to write the file out. */
-    act.sa_handler = handle_hup;
+    /* Trap SIGHUP and SIGTERM cuz we want to write the file out. */
+    act.sa_handler = handle_hupterm;
     sigaction(SIGHUP, &act, NULL);
+    sigaction(SIGTERM, &act, NULL);
 
 #ifndef NANO_SMALL
     act.sa_handler = handle_sigwinch;
@@ -2677,10 +2689,10 @@ void signal_init(void)
 #endif
 }
 
-/* Handler for SIGHUP */
-RETSIGTYPE handle_hup(int signal)
+/* Handler for SIGHUP and SIGTERM */
+RETSIGTYPE handle_hupterm(int signal)
 {
-    die(_("Received SIGHUP"));
+    die(_("Received SIGHUP or SIGTERM"));
 }
 
 /* What do we do when we catch the suspend signal */
@@ -2933,7 +2945,9 @@ int main(int argc, char *argv[])
 #endif
        {"tempfile", 0, 0, 't'},
        {"view", 0, 0, 'v'},
+#ifndef DISABLE_WRAPPING
        {"nowrap", 0, 0, 'w'},
+#endif
        {"nohelp", 0, 0, 'x'},
        {"suspend", 0, 0, 'z'},
 #ifndef NANO_SMALL
@@ -3256,7 +3270,7 @@ int main(int argc, char *argv[])
 
     while (1) {
 
-#ifndef DISABLE_MOUSE
+#if !defined(DISABLE_BROWSER) || !defined(DISABLE_MOUSE) || !defined(DISABLE_HELP)
        currshortcut = main_list;
 #endif
 
diff --git a/nano.h b/nano.h
index 3e38bc008ccebd75cb125aa19c57d72f85826be2..cae56d0b99abcb754374153dd85e1cf893a233fe 100644 (file)
--- a/nano.h
+++ b/nano.h
 #include <curses.h> 
 #endif /* CURSES_H */
 
-#ifdef HAVE_LIBINTL_H
-#include <libintl.h>
+#ifdef ENABLE_NLS
+#  ifdef HAVE_LIBINTL_H
+#    include <libintl.h>
+#  endif
+#  define _(string) gettext(string)
+#else
+#  define _(string) (string)
+#  define ngettext(singular, plural, number) number == 1 ? singular : plural
 #endif
 
 #include <sys/types.h>
diff --git a/proto.h b/proto.h
index 0818fb35bdedb0af8274f9df857ec5d57b4962ff..d318c65e33f1e2b76b74669b61172e82b932bb95 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -290,7 +290,7 @@ int break_line(const char *line, int goal, int force);
 int do_justify(void);
 int do_exit(void);
 void signal_init(void);
-RETSIGTYPE handle_hup(int signal);
+RETSIGTYPE handle_hupterm(int signal);
 RETSIGTYPE do_suspend(int signal);
 RETSIGTYPE do_cont(int signal);
 #ifndef NANO_SMALL
index 43594413d5d9585b10ec3e385ce848b388285d26..6a7fb9773f8f5e9337645f89e6683953f670af6e 100644 (file)
--- a/rcfile.c
+++ b/rcfile.c
 
 #ifdef ENABLE_NANORC
 
-#ifdef ENABLE_NLS
-#include <libintl.h>
-#define _(string) gettext(string)
-#else
-#define _(string) (string)
-#endif
-
 const static rcoption rcopts[] = {
 #ifndef NANO_SMALL
     {"autoindent", AUTOINDENT},
index f7929cf71caaeaca478020dd783453650337ca44..0727aa5eb7ed6284594231e083b6371c1e76d42e 100644 (file)
--- a/search.c
+++ b/search.c
 #include "proto.h"
 #include "nano.h"
 
-#ifdef ENABLE_NLS
-#include <libintl.h>
-#define _(string) gettext(string)
-#else
-#define _(string) (string)
-#endif
-
 /* Regular expression helper functions */
 
 #ifdef HAVE_REGEX_H
diff --git a/utils.c b/utils.c
index 431824e1cad78ae7d5900440800e40446d97bcb2..6b50dd445559dfdb1ddef000f52f5fd058050d29 100644 (file)
--- a/utils.c
+++ b/utils.c
 #include "proto.h"
 #include "nano.h"
 
-#ifdef ENABLE_NLS
-#include <libintl.h>
-#define _(string) gettext(string)
-#else
-#define _(string) (string)
-#endif
-
 int is_cntrl_char(int c)
 {
     if (iscntrl(c) || ((c & 127) != 127 && iscntrl(c & 127)))
diff --git a/winio.c b/winio.c
index e09cdcd14d3f9fb034dc72796df422ebbdf8b720..36378a686775b3c0f1d1c026dafec9ddd76a3d52 100644 (file)
--- a/winio.c
+++ b/winio.c
 #include "proto.h"
 #include "nano.h"
 
-#ifdef ENABLE_NLS
-#include <libintl.h>
-#define _(string) gettext(string)
-#else
-#define _(string) (string)
-#endif
-
 static int statblank = 0;      /* Number of keystrokes left after
                                   we call statusbar(), before we
                                   actually blank the statusbar */
@@ -655,9 +648,10 @@ void edit_add(const filestruct *fileptr, int yval, int start
                    /* Translate the match to the beginning of the line. */
                    startmatch.rm_so += k;
                    startmatch.rm_eo += k;
-                   if (startmatch.rm_so == startmatch.rm_eo)
+                   if (startmatch.rm_so == startmatch.rm_eo) {
+                       startmatch.rm_eo++;
                        statusbar(_("Refusing 0 length regex match"));
-                   else if (startmatch.rm_so < start + COLS &&
+                   else if (startmatch.rm_so < start + COLS &&
                                startmatch.rm_eo > start) {
                        x_start = startmatch.rm_so - start;
                        if (x_start < 0)