]> git.wh0rd.org Git - nano.git/commitdiff
DLR's fixes: arg for operatingdir's getopt_long text, changes to cases 2b and 2c...
authorChris Allegretta <chrisa@asty.org>
Thu, 27 Sep 2001 02:46:53 +0000 (02:46 +0000)
committerChris Allegretta <chrisa@asty.org>
Thu, 27 Sep 2001 02:46:53 +0000 (02:46 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@789 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
nano.c

index e55bf9d3aa4895f72e60c83c39ec4e2c6773b14a..2d80dcde5d890d8eb4544d30802fef833da9849a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -34,6 +34,12 @@ CVS code -
          lines aren't lined up since the menu width changed though,
          this breakage depends on whether the new widths will be kept
          or not (FEEDBACK!!)
+  do_wrap()
+       - Fixes for Pico incompatibility in cases 2b and 2c.  
+         (David Lawrence Ramsey).
+  global_init()
+       - New arg save_cutbuffer, allows cutbuffer to not be lost when
+         using multibuffer.
 - nano.texi:
        - corrected the Mouse Toggle section, noticed by Daniel Bonniot.
 - rcfile.c:
diff --git a/nano.c b/nano.c
index 658573b1063ad8919bad1e1d95d6e3adc87f28f7..6fae56e28cd4aa45eeba4ed5899440e1951cca5e 100644 (file)
--- a/nano.c
+++ b/nano.c
@@ -202,8 +202,9 @@ void clear_filename(void)
     filename[0] = 0;
 }
 
-/* Initialize global variables - no better way for now */
-void global_init(void)
+/* Initialize global variables - no better way for now.  If
+   save_cutbuffer is nonzero, don't set cutbuffer to NULL. */
+void global_init(int save_cutbuffer)
 {
     current_x = 0;
     current_y = 0;
@@ -212,11 +213,13 @@ void global_init(void)
        die_too_small();
 
     fileage = NULL;
-    cutbuffer = NULL;
+    if (!save_cutbuffer)
+       cutbuffer = NULL;
     current = NULL;
     edittop = NULL;
     editbot = NULL;
     totlines = 0;
+    totsize = 0;
     placewewant = 0;
 
 #ifndef DISABLE_WRAPJUSTIFY
@@ -449,7 +452,7 @@ void usage(void)
 #endif
 #ifndef DISABLE_OPERATINGDIR
     printf(_
-          (" -o [dir]  --operatingdir          Set operating directory\n"));
+          (" -o [dir]  --operatingdir=[dir]    Set operating directory\n"));
 #endif
     printf(_
           (" -p                --pico                  Emulate Pico as closely as possible\n"));
@@ -884,13 +887,10 @@ void do_wrap(filestruct * inptr, char input_char)
      *           it is all spaces between previous word and next word which appears after fill.
      *    b) cursor is at the word at the wrap point.
      *         - word at wrap point starts a new line.
-     *         1. pressed a space and at first character of wrap point word.
-     *            - white space on original line is kept to where cursor was.
-     *         2. pressed non space (or space elsewhere).
-     *            - white space at end of original line is cleared.
+     *         - white space on original line is kept to where cursor was.
      *    c) cursor is past the word at the wrap point.
      *         - word at wrap point starts a new line.
-     *            - white space at end of original line is cleared
+     *         - white space at end of original line is cleared
      */
 
     temp = nmalloc(sizeof(filestruct));
@@ -933,6 +933,10 @@ void do_wrap(filestruct * inptr, char input_char)
        /* Inside word, remove it from original, and move cursor to right spot. */
        if (current_x >= current_word_start) {
            right = current_x - current_word_start;
+
+           /* Decrease totsize by the number of spaces we removed, less
+              one for the new line we're replacing the spaces with. */
+           totsize -= (current_word_start - 1);
            current_x = 0;
 #ifndef NANO_SMALL
            if (ISSET(AUTOINDENT)) {
@@ -965,10 +969,16 @@ void do_wrap(filestruct * inptr, char input_char)
 
            if (!isspace((int) input_char)) {
                i = current_word_start - 1;
+
+               /* Decrement totsize each time we remove a space. */
                while (isspace((int) inptr->data[i])) {
                    i--;
+                   totsize--;
                    assert(i >= 0);
                }
+               /* And increment it to account for the blank line we're
+                  replacing the spaces with. */
+               totsize++;
            } else if (current_x <= last_word_end)
                i = last_word_end - 1;
            else
@@ -1000,20 +1010,14 @@ void do_wrap(filestruct * inptr, char input_char)
            }
 #endif
            i = current_word_start - 1;
-           if (isspace((int) input_char)
-               && (current_x == current_word_start)) {
-               current_x = current_word_start;
+           current_x = current_word_start;
 
-               null_at(inptr->data, current_word_start);
-           } else {
+           null_at(inptr->data, current_word_start);
 
-               while (isspace((int) inptr->data[i])) {
-                   i--;
-                   assert(i >= 0);
-               }
-               inptr->data = nrealloc(inptr->data, i + 2);
-               inptr->data[i + 1] = 0;
-           }
+           /* Increment totsize to account for the new line that
+              will be added below, so that it won't end up being
+              short by one. */
+           totsize++;
        }
 
 
@@ -1029,12 +1033,17 @@ void do_wrap(filestruct * inptr, char input_char)
            current_x = current_word_start;
            i = current_word_start - 1;
 
+           /* Decrement totsize each time we remove a space. */
            while (isspace((int) inptr->data[i])) {
                i--;
+               totsize--;
                assert(i >= 0);
                inptr->data = nrealloc(inptr->data, i + 2);
                inptr->data[i + 1] = 0;
            }
+           /* And increment it to account for the blank line we're
+              replacing the spaces with. */
+           totsize++;
        }
     }
 
@@ -1046,6 +1055,11 @@ void do_wrap(filestruct * inptr, char input_char)
        char *p =
            charalloc((strlen(temp->data) + strlen(inptr->next->data) + 2));
 
+       /* We're adding to an existing line instead of creating a new
+          one; decrement totlines here so that when it gets incremented
+          below, it won't end up being high by one. */
+       totlines--;
+
 #ifndef NANO_SMALL
        if (ISSET(AUTOINDENT)) {
            int non = 0;
@@ -1562,7 +1576,7 @@ int do_alt_speller(char *file_name)
 
     refresh();
     free_filestruct(fileage);
-    global_init();
+    global_init(1);
     open_file(file_name, 0, 1);
 
     /* go back to the old line while keeping the same position, mark the
@@ -2676,7 +2690,7 @@ int main(int argc, char *argv[])
     noecho();
 
     /* Set up some global variables */
-    global_init();
+    global_init(0);
     shortcut_init(0);
 #ifndef DISABLE_HELP
     init_help_msg();