]> git.wh0rd.org Git - nano.git/commitdiff
2009-02-09 Chris Allegretta <chrisa@asty.org>
authorChris Allegretta <chrisa@asty.org>
Mon, 9 Feb 2009 04:03:20 +0000 (04:03 +0000)
committerChris Allegretta <chrisa@asty.org>
Mon, 9 Feb 2009 04:03:20 +0000 (04:03 +0000)
        * New option -q, --quiet, rcfile option "quiet" implemented.  Skips printing
          errors about the rcfile and asking user to press enter.  Also, nano should
          now only ask for one enter press when there is an error when not using -q.
          Based on discussion between Eitan Adler and Mike Frysinger.
        * rcfile.c (parse_keybinding) -  Significant cleanups and fixes for
          detecting and reporting errors in key bindings code.

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

ChangeLog
doc/man/nano.1
doc/man/nanorc.5
src/nano.c
src/nano.h
src/rcfile.c

index ea83190b775795d567fe59e94ccd6384f9c5100d..1628c2a0a94355acf87f966f9ad37cb51599b35a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2009-02-09 Chris Allegretta <chrisa@asty.org>
+       * New option -q, --quiet, rcfile option "quiet" implemented.  Skips printing
+         errors about the rcfile and asking user to press enter.  Also, nano should
+         now only ask for one enter press when there is an error when not using -q.
+         Based on discussion between Eitan Adler and Mike Frysinger.
+       * rcfile.c (parse_keybinding) -  Significant cleanups and fixes for 
+         detecting and reporting errors in key bindings code.
+
 2009-02-08 Chris Allegretta <chrisa@asty.org>
        * Make reset_multidata reset more lines, since contrary to previous problems the
          syntax highlting is now too *un*ambitious, causing display glitches when
index 04e2722add4ba00395db821d3dd1bd39318637ce..2a08983f9ac0a4f8aad2d68a42b0c9e7f04a48d2 100644 (file)
@@ -172,6 +172,10 @@ chroot.
 Preserve the XON and XOFF sequences (^Q and ^S) so they will be caught
 by the terminal.
 .TP
+.B \-q (\-\-quiet)
+Do not report errors in the nanorc file and ask them to
+be acknowledged by pressing enter at startup.
+.TP
 .B \-r \fIcols\fP (\-\-fill=\fIcols\fP)
 Wrap lines at column \fIcols\fP.  If this value is 0 or less, wrapping
 will occur at the width of the screen less \fIcols\fP columns, allowing
index 35d18820ef31cbb672cb451929574add7a01fa5b..31fdf44e36fe1e42bd5267607ce47c981522e620 100644 (file)
@@ -145,6 +145,11 @@ paragraphs.  They cannot contain blank characters.  Only closing
 punctuation, optionally followed by closing brackets, can end sentences.
 The default value is "\fI!.?\fP".
 .TP
+.B set/unset quiet
+\fBnano\fP will not report errors in the nanorc file and ask them to 
+be acknowledged by pressing enter at startup.  If this is used it should
+be placed at the top of the file to be fully effective.
+.TP
 .B set/unset quickblank
 Do quick statusbar blanking.  Statusbar messages will disappear after 1
 keystroke instead of 25.
index 3d3bbfe697de3542676d72def40320dd4f517086..2d01995b3ced9a9f5b0d244a63be0fe6a14d3188 100644 (file)
@@ -879,6 +879,8 @@ void usage(void)
 #endif
     print_opt("-p", "--preserve",
        N_("Preserve XON (^Q) and XOFF (^S) keys"));
+    print_opt("-q", "--quiet",
+       N_("Silently ignore startup issues like rc file errors"));
 #ifndef DISABLE_WRAPJUSTIFY
     print_opt(_("-r <#cols>"), _("--fill=<#cols>"),
        N_("Set wrapping point at column #cols"));
@@ -1930,6 +1932,7 @@ int main(int argc, char **argv)
        {"operatingdir", 1, NULL, 'o'},
 #endif
        {"preserve", 0, NULL, 'p'},
+       {"quiet", 0, NULL, 'q'},
 #ifndef DISABLE_WRAPJUSTIFY
        {"fill", 1, NULL, 'r'},
 #endif
@@ -1993,11 +1996,11 @@ int main(int argc, char **argv)
     while ((optchr =
 #ifdef HAVE_GETOPT_LONG
        getopt_long(argc, argv,
-               "h?ABC:DEFHIKLNOQ:RST:UVWY:abcdefgijklmo:pr:s:tvwxz",
+               "h?ABC:DEFHIKLNOQ:RST:UVWY:abcdefgijklmo:pqr:s:tvwxz",
                long_options, NULL)
 #else
        getopt(argc, argv,
-               "h?ABC:DEFHIKLNOQ:RST:UVWY:abcdefgijklmo:pr:s:tvwxz")
+               "h?ABC:DEFHIKLNOQ:RST:UVWY:abcdefgijklmo:pqr:s:tvwxz")
 #endif
                ) != -1) {
        switch (optchr) {
@@ -2125,6 +2128,9 @@ int main(int argc, char **argv)
            case 'p':
                SET(PRESERVE);
                break;
+           case 'q':
+               SET(QUIET);
+               break;
 #ifndef DISABLE_WRAPJUSTIFY
            case 'r':
                if (!parse_num(optarg, &wrap_at)) {
index 0d725de57a8a4056cf74fc216ec57a2302d0c352..039bb3eead32ee06a2155bbca0d664d2e2418258 100644 (file)
@@ -471,6 +471,7 @@ typedef struct subnfunc {
 #define WORD_BOUNDS                    (1<<28)
 #define NO_NEWLINES                    (1<<29)
 #define BOLD_TEXT                      (1<<30)
+#define QUIET                          (1<<31)
 
 /* Flags for which menus in which a given function should be present */
 #define MMAIN                          (1<<0)
index d0d985c1a3635295898327b1ea0f32d692708e25..dd4c059e735401aabbe431fe8bfeeeb1671173bd 100644 (file)
@@ -84,6 +84,7 @@ static const rcoption rcopts[] = {
     {"historylog", HISTORYLOG},
     {"matchbrackets", 0},
     {"noconvert", NO_CONVERT},
+    {"quiet", QUIET},
     {"quickblank", QUICK_BLANK},
     {"smarthome", SMART_HOME},
     {"smooth", SMOOTH_SCROLL},
@@ -117,6 +118,9 @@ void rcfile_error(const char *msg, ...)
 {
     va_list ap;
 
+    if (ISSET(QUIET))
+       return;
+
     fprintf(stderr, "\n");
     if (lineno > 0) {
        errors = TRUE;
@@ -388,41 +392,41 @@ void parse_keybinding(char *ptr)
 
     if (keycopy[0] != 'M' && keycopy[0] != '^' && keycopy[0] != 'F' && keycopy[0] != 'K') {
        rcfile_error(
-               N_("keybindings must begin with \"^\", \"M\", or \"F\"\n"));
+               N_("keybindings must begin with \"^\", \"M\", or \"F\""));
        return;
     }
 
     funcptr = ptr;
     ptr = parse_next_word(ptr);
 
-    if (funcptr == NULL) {
+    if (!strcmp(funcptr, "")) {
        rcfile_error(
-               N_("Must specify function to bind key to\n"));
+               N_("Must specify function to bind key to"));
        return;
     }
 
     menuptr = ptr;
     ptr = parse_next_word(ptr);
 
-    if (menuptr == NULL) {
+    if (!strcmp(menuptr, "")) {
        rcfile_error(
                /* Note to translators, do not translate the word "all"
                   in the sentence below, everything else is fine */
-               N_("Must specify menu bind key to (or \"all\")\n"));
+               N_("Must specify menu to bind key to (or \"all\")"));
        return;
     }
 
-    menu = strtomenu(menuptr);
-    if (menu < 1) {
+    newsc = strtosc(menu, funcptr);
+    if (newsc == NULL) {
        rcfile_error(
-               N_("Could not map name \"%s\" to a menu\n"), menuptr);
+               N_("Could not map name \"%s\" to a function"), funcptr);
        return;
     }
 
-    newsc = strtosc(menu, funcptr);
-    if (newsc == NULL) {
+    menu = strtomenu(menuptr);
+    if (menu < 1) {
        rcfile_error(
-               N_("Could not map name \"%s\" to a function\n"), funcptr);
+               N_("Could not map name \"%s\" to a menu"), menuptr);
        return;
     }
 
@@ -444,7 +448,7 @@ void parse_keybinding(char *ptr)
 
     if (check_bad_binding(newsc)) {
        rcfile_error(
-               N_("Sorry, keystr \"%s\" is an illegal binding\n"), newsc->keystr);
+               N_("Sorry, keystr \"%s\" is an illegal binding"), newsc->keystr);
        return;
     }
 
@@ -1057,15 +1061,6 @@ void parse_rcfile(FILE *rcstream
     lineno = 0;
 
     check_vitals_mapped();
-
-    if (errors) {
-       errors = FALSE;
-       fprintf(stderr,
-               _("\nPress Enter to continue starting nano.\n"));
-       while (getchar() != '\n')
-           ;
-    }
-
     return;
 }
 
@@ -1146,6 +1141,14 @@ void do_rcfile(void)
     free(nanorc);
     nanorc = NULL;
 
+    if (errors && !ISSET(QUIET)) {
+       errors = FALSE;
+       fprintf(stderr,
+               _("\nPress Enter to continue starting nano.\n"));
+       while (getchar() != '\n')
+           ;
+    }
+
 #ifdef ENABLE_COLOR
     set_colorpairs();
 #endif