]> git.wh0rd.org Git - nano.git/commitdiff
add new -L/--nonewlines command line option, and new "nonewlines" rcfile
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Sat, 5 Nov 2005 17:35:44 +0000 (17:35 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Sat, 5 Nov 2005 17:35:44 +0000 (17:35 +0000)
option, to control whether nano adds magiclines to the ends of files

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

ChangeLog
doc/man/nano.1
doc/man/nanorc.5
doc/nanorc.sample
doc/texinfo/nano.texi
src/files.c
src/nano.c
src/nano.h
src/rcfile.c
src/search.c
src/text.c

index f1a501224b3b6cc0cf65801e03530efe9f128c9f..f1a451a406103b688a7be2a5f94ff88ccb20011b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -47,6 +47,13 @@ CVS code -
          do_page_down(), do_para_end(), do_next_word(), do_prev_word(),
          do_up(), do_down(), do_scroll_down(), do_right(), do_mouse(),
          do_gotolinecolumn(), do_delete(), and find_paragraph(). (DLR)
+       - Add new -L/--nonewlines command line option, and new
+         "nonewlines" rcfile option, to control whether nano adds
+         magiclines to the ends of files.  Changes to read_file(),
+         write_marked_file(), move_to_filestruct(),
+         copy_from_filestruct(), usage(), do_output(), main(),
+         do_replace_loop(), do_delete(), nano.1, nanorc.5, nano.texi,
+         and nanorc.sample. (DLR, suggested by re2823@Safe-mail.net)
 - files.c:
   read_file()
        - Remove apparently unneeded logic to handle a case where
index 81683b099b3d424fdd2e13b752817a7b7883b23b..963f40969f778944cd5303839e8bb77393dc1cda 100644 (file)
@@ -6,7 +6,7 @@
 .\" Public License for copying conditions.  There is NO warranty.
 .\"
 .\" $Id$
-.TH NANO 1 "version 1.3.9" "September 27, 2005"
+.TH NANO 1 "version 1.3.9" "November 5, 2005"
 .\" Please adjust this date whenever revising the manpage.
 .\"
 
@@ -73,6 +73,9 @@ Interpret the numeric keypad keys so that they all work properly.  You
 should only need to use this option if they don't, as mouse support
 won't work properly with this option enabled.
 .TP
+.B \-L (\-\-nonewlines)
+Don't add newlines to the ends of files.
+.TP
 .B \-N (\-\-noconvert)
 Disable automatic conversion of files from DOS/Mac format.
 .TP
index d9052fd822854902540e14da767f8638dbf4ba58..a47147b0b3f45f971c4ef62d505021ba865a8980 100644 (file)
@@ -6,7 +6,7 @@
 .\" Public License for copying conditions.  There is NO warranty.
 .\"
 .\" $Id$
-.TH NANORC 5 "version 1.3.9" "September 27, 2005"
+.TH NANORC 5 "version 1.3.9" "November 5, 2005"
 .\" Please adjust this date whenever revising the manpage.
 .\"
 .SH NAME
@@ -95,6 +95,9 @@ Don't follow symlinks when writing files.
 .B set/unset nohelp
 Don't display the help lists at the bottom of the screen.
 .TP
+.B set/unset nonewlines
+Don't add newlines to the ends of files.
+.TP
 .B set/unset nowrap
 Don't wrap text at all.
 .TP
index cdaefc1f0caf6eb74551580098d785de9267607f..2c289a2da4f79d92176a7f5e5ede1154dbda3734 100644 (file)
@@ -67,6 +67,9 @@
 ## Don't display the helpful shortcut lists at the bottom of the screen.
 # set nohelp
 
+## Don't add newlines to the ends of files.
+# set nonewlines
+
 ## Don't wrap text at all.
 # set nowrap
 
 ## highlight possible errors and parameters
 # icolor brightwhite "^[[:space:]]*(set|unset|syntax|i?color).*$"
 ## set, unset and syntax
-# icolor cyan "^[[:space:]]*(set|unset)[[:space:]]+(autoindent|backup|backupdir|backwards|brackets|casesensitive|const|cut|fill|historylog|morespace|mouse|multibuffer|noconvert|nofollow|nohelp|nowrap|operatingdir|preserve|punct|quickblank|quotestr|rebinddelete)\>" "^[[:space:]]*(set|unset)[[:space:]]+(rebindkeypad|regexp|smarthome|smooth|speller|suspend|tabsize|tabstospaces|tempfile|view|whitespace|wordbounds)\>"
+# icolor cyan "^[[:space:]]*(set|unset)[[:space:]]+(autoindent|backup|backupdir|backwards|brackets|casesensitive|const|cut|fill|historylog|morespace|mouse|multibuffer|noconvert|nofollow|nohelp|nonewlines|nowrap|operatingdir|preserve|punct|quickblank)\>" "^[[:space:]]*(set|unset)[[:space:]]+(quotestr|rebinddelete|rebindkeypad|regexp|smarthome|smooth|speller|suspend|tabsize|tabstospaces|tempfile|view|whitespace|wordbounds)\>"
 # icolor green "^[[:space:]]*(set|unset|syntax)\>"
 ## colors
 # icolor yellow "^[[:space:]]*i?color[[:space:]]*(bright)?(white|black|red|blue|green|yellow|magenta|cyan)?(,(white|black|red|blue|green|yellow|magenta|cyan))?\>"
index eb619042351af90416763c26494e9e44f8496aec..be70f0dc5ef4c49496b5697f05213ff06d4717f8 100644 (file)
@@ -9,7 +9,7 @@
 @smallbook
 @set EDITION 0.1
 @set VERSION 1.3.9
-@set UPDATED 04 Nov 2005
+@set UPDATED 05 Nov 2005
 
 @dircategory Editors
 @direntry
@@ -143,6 +143,9 @@ Interpret the numeric keypad keys so that they all work properly.  You
 should only need to use this option if they don't, as mouse support
 won't work properly with this option enabled.
 
+@item -L, --nonewlines
+Don't add newlines to the ends of files.
+
 @item -N, --noconvert
 Don't convert files from DOS/Mac format.
 
index 52e09e40b18225a93888ff7becf5712d6ddcf587..6d864bb6f653ad20ca4d23bfbc87984d8ae44ed1 100644 (file)
@@ -508,11 +508,11 @@ void read_file(FILE *f, const char *filename)
     openfile->totsize += get_totsize(openfile->fileage,
        openfile->filebot);
 
-    /* If text has been added to the magicline (i.e, a file that doesn't
-     * end in a newline has been inserted at the end of the current
-     * buffer), add a new magicline, and move the current line down to
-     * it. */
-    if (openfile->filebot->data[0] != '\0') {
+    /* If the NO_NEWLINES flag isn't set, and text has been added to
+     * the magicline (i.e, a file that doesn't end in a newline has been
+     * inserted at the end of the current buffer), add a new magicline,
+     * and move the current line down to it. */
+    if (!ISSET(NO_NEWLINES) && openfile->filebot->data[0] != '\0') {
        new_magicline();
        openfile->current = openfile->filebot;
        openfile->current_x = 0;
@@ -1608,7 +1608,7 @@ int write_marked_file(const char *name, FILE *f_open, bool tmp,
     int retval = -1;
     bool old_modified = openfile->modified;
        /* write_file() unsets the modified flag. */
-    bool added_magicline;
+    bool added_magicline = FALSE;
        /* Whether we added a magicline after filebot. */
     filestruct *top, *bot;
     size_t top_x, bot_x;
@@ -1621,16 +1621,19 @@ int write_marked_file(const char *name, FILE *f_open, bool tmp,
        (const filestruct **)&bot, &bot_x, NULL);
     filepart = partition_filestruct(top, top_x, bot, bot_x);
 
-    /* If the line at filebot is blank, treat it as the magicline and
-     * hence the end of the file.  Otherwise, add a magicline and treat
-     * it as the end of the file. */
-    if ((added_magicline = (openfile->filebot->data[0] != '\0')))
+    /* Handle the magicline if the NO_NEWLINES flag isn't set.  If the
+     * line at filebot is blank, treat it as the magicline and hence the
+     * end of the file.  Otherwise, add a magicline and treat it as the
+     * end of the file. */
+    if (!ISSET(NO_NEWLINES) &&
+       (added_magicline = (openfile->filebot->data[0] != '\0')))
        new_magicline();
 
     retval = write_file(name, f_open, tmp, append, TRUE);
 
-    /* If we added a magicline, remove it now. */
-    if (added_magicline)
+    /* If the NO_NEWLINES flag isn't set, and we added a magicline,
+     * remove it now. */
+    if (!ISSET(NO_NEWLINES) && added_magicline)
        remove_magicline();
 
     /* Unpartition the filestruct so that it contains all the text
index 05279b1ed34fd35d6425104f9692621c33be5208..0a834dde79626240dcb68e87759bce54ba84b59a 100644 (file)
@@ -387,8 +387,9 @@ void move_to_filestruct(filestruct **file_top, filestruct **file_bot,
      * partition. */
     renumber(top_save);
 
-    /* If the text doesn't end with a magicline, add a new magicline. */
-    if (openfile->filebot->data[0] != '\0')
+    /* If the NO_NEWLINES flag isn't set, and the text doesn't end with
+     * a magicline, add a new magicline. */
+    if (!ISSET(NO_NEWLINES) && openfile->filebot->data[0] != '\0')
        new_magicline();
 }
 
@@ -447,8 +448,9 @@ void copy_from_filestruct(filestruct *file_top, filestruct *file_bot)
      * partition. */
     renumber(top_save);
 
-    /* If the text doesn't end with a magicline, add a new magicline. */
-    if (openfile->filebot->data[0] != '\0')
+    /* If the NO_NEWLINES flag isn't set, and the text doesn't end with
+     * a magicline, add a new magicline. */
+    if (!ISSET(NO_NEWLINES) && openfile->filebot->data[0] != '\0')
        new_magicline();
 }
 
@@ -745,6 +747,8 @@ void usage(void)
 #endif
     print1opt("-K", "--rebindkeypad",
        N_("Fix numeric keypad key confusion problem"));
+    print1opt("-L", "--nonewlines",
+       N_("Don't add newlines to the ends of files"));
 #ifndef NANO_SMALL
     print1opt("-N", "--noconvert",
        N_("Don't convert files from DOS/Mac format"));
@@ -1481,9 +1485,10 @@ void do_output(char *output, size_t output_len, bool allow_cntrls)
        if (!allow_cntrls && is_cntrl_mbchar(output + i - char_buf_len))
            continue;
 
-       /* When a character is inserted on the current magicline, it
-        * means we need a new one! */
-       if (openfile->filebot == openfile->current)
+       /* If the NO_NEWLINES flag isn't set, when a character is
+        * added to the magicline, it means we need a new magicline! */
+       if (!ISSET(NO_NEWLINES) && openfile->filebot ==
+               openfile->current)
            new_magicline();
 
        /* More dangerousness fun =) */
@@ -1570,6 +1575,7 @@ int main(int argc, char **argv)
        {"ignorercfiles", 0, NULL, 'I'},
 #endif
        {"rebindkeypad", 0, NULL, 'K'},
+       {"nonewlines", 0, NULL, 'L'},
        {"morespace", 0, NULL, 'O'},
 #ifndef DISABLE_JUSTIFY
        {"quotestr", 1, NULL, 'Q'},
@@ -1653,11 +1659,11 @@ int main(int argc, char **argv)
     while ((optchr =
 #ifdef HAVE_GETOPT_LONG
        getopt_long(argc, argv,
-               "h?ABC:EFHIKNOQ:RST:UVWY:abcdefgijklmo:pr:s:tvwxz",
+               "h?ABC:EFHIKLNOQ:RST:UVWY:abcdefgijklmo:pr:s:tvwxz",
                long_options, NULL)
 #else
        getopt(argc, argv,
-               "h?ABC:EFHIKNOQ:RST:UVWY:abcdefgijklmo:pr:s:tvwxz")
+               "h?ABC:EFHIKLNOQ:RST:UVWY:abcdefgijklmo:pr:s:tvwxz")
 #endif
                ) != -1) {
        switch (optchr) {
@@ -1701,6 +1707,9 @@ int main(int argc, char **argv)
            case 'K':
                SET(REBIND_KEYPAD);
                break;
+           case 'L':
+               SET(NO_NEWLINES);
+               break;
 #ifndef NANO_SMALL
            case 'N':
                SET(NO_CONVERT);
index a19cb60225330ca9298628bfd612dd021ed26f77..bad9f2a00909ceacb6176bab6c1a09fa0b78ad71 100644 (file)
@@ -320,7 +320,8 @@ typedef struct rcoption {
 #define TABS_TO_SPACES         (1<<27)
 #define QUICK_BLANK            (1<<28)
 #define WORD_BOUNDS            (1<<29)
-#define USE_UTF8               (1<<30)
+#define NO_NEWLINES            (1<<30)
+#define USE_UTF8               (1<<31)
 
 /* Control key sequences.  Changing these would be very, very bad. */
 #define NANO_CONTROL_SPACE 0
index 0852eec66a9f6b84a9a89317df3eace601859765..e1573bfe33e238302a56c9adc03bd15717899081 100644 (file)
@@ -51,6 +51,7 @@ const static rcoption rcopts[] = {
     {"morespace", MORE_SPACE},
     {"nofollow", NOFOLLOW_SYMLINKS},
     {"nohelp", NO_HELP},
+    {"nonewlines", NO_NEWLINES},
 #ifndef DISABLE_WRAPPING
     {"nowrap", NO_WRAP},
 #endif
index 60d212619a153578675dc99f6340a031c04a8db4..a772b76a577a53c9e70ecae2eef94229b01c89c0 100644 (file)
@@ -844,8 +844,9 @@ ssize_t do_replace_loop(const char *needle, const filestruct
     }
 #endif
 
-    /* If text has been added to the magicline, make a new magicline. */
-    if (openfile->filebot->data[0] != '\0')
+    /* If the NO_NEWLINES flag isn't set, and text has been added to the
+     * magicline, make a new magicline. */
+    if (!ISSET(NO_NEWLINES) && openfile->filebot->data[0] != '\0')
        new_magicline();
 
     return numreplaced;
index 5deb6b4fae7dc4586c50b50b766ec797a2efb71d..18cf0998e85fc7feef9d2e8b55a782098d8f1adc 100644 (file)
@@ -129,11 +129,11 @@ void do_delete(void)
        wrap_reset();
 #endif
 
-       /* If text has been added to the magicline as a result of
-        * deleting at the end of the line before filebot, add a new
-        * magicline. */
-       if (openfile->current == openfile->filebot &&
-               openfile->current->data[0] != '\0')
+       /* If the NO_NEWLINES flag isn't set, and text has been added to
+        * the magicline as a result of deleting at the end of the line
+        * before filebot, add a new magicline. */
+       if (!ISSET(NO_NEWLINES) && openfile->current ==
+               openfile->filebot && openfile->current->data[0] != '\0')
            new_magicline();
     } else
        return;