]> git.wh0rd.org Git - nano.git/commitdiff
fix bug in do_justify(): if all the text from the next line has been
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Sat, 3 Jul 2004 05:23:19 +0000 (05:23 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Sat, 3 Jul 2004 05:23:19 +0000 (05:23 +0000)
moved to the current line and the next line has been deleted, continue
the justification loop from there and skip the respacing routine in
order to avoid running it more than once on the same line (since it
assumes that we've moved to the next line, which isn't true in that
case)

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

ChangeLog
src/nano.c

index 428c4cd872896ef84aa118f23402b92a2be23943..3f3a06c82d8ab1d9d7b969d96866e8210b8692d8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -27,6 +27,13 @@ CVS code -
        - Fix erroneous #ifdef so that nano compiles with
          --disable-justify again. (DLR; found by Mike Frysinger)
 - nano.c:
+  do_justify()
+       - If all the text from the next line has been moved to the
+         current line and the next line has been deleted, continue the
+         justification loop from there and skip the respacing routine
+         in order to avoid running it more than once on the same line
+         (since it assumes that we've moved to the next line, which
+         isn't true in that case). (DLR)
   do_exit()
        - Tweak for efficiency. (David Benbennick)
 - proto.h:
index f5f2df83a9837bcef35a4271589cee2ffad72370..dfa577a4c692de47854d3e666299bf7b1f05c09e 100644 (file)
@@ -2407,7 +2407,6 @@ void do_justify(int full_justify)
     last_par_line = current;
 
     while (TRUE) {
-
        /* First, search for the beginning of the current paragraph or,
         * if we're at the end of it, the beginning of the next
         * paragraph.  Save the quote length, paragraph length, and
@@ -2570,11 +2569,17 @@ void do_justify(int full_justify)
                    totlines--;
                    totsize -= indent_len;
                    current_y--;
+
+                   /* Don't go to the next line, since there isn't one
+                    * anymore.  Just continue the loop from here. */
+                   continue;
                } else {
                    charmove(current->next->data + indent_len,
                        current->next->data + indent_len + break_pos + 1,
                        next_line_len - break_pos - indent_len);
                    null_at(&current->next->data, next_line_len - break_pos);
+
+                   /* Go to the next line. */
                    current = current->next;
                }
            } else
@@ -2582,12 +2587,12 @@ void do_justify(int full_justify)
                /* Go to the next line. */
                current = current->next;
 
-           /* If the line we were on before still exists, and it was
-            * not the last line of the paragraph, add a space to the
-            * end of it to replace the one removed or left out by
-            * justify_format().  If it was the last line of the
-            * paragraph, and justify_format() left a space on the end
-            * of it, remove the space. */
+           /* If we've gone to the next line, the line we were on
+            * before still exists, and it was not the last line of the
+            * paragraph, add a space to the end of it to replace the
+            * one removed or left out by justify_format().  If it was
+            * the last line of the paragraph, and justify_format() left
+            * a space on the end of it, remove the space. */
            if (current->prev != NULL) {
                size_t prev_line_len = strlen(current->prev->data);