]> git.wh0rd.org Git - nano.git/commitdiff
in break_line(), fix another problem where goal could be miscalculated
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Tue, 20 Sep 2005 19:36:39 +0000 (19:36 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Tue, 20 Sep 2005 19:36:39 +0000 (19:36 +0000)
on lines containing tabs

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

ChangeLog
src/text.c

index 0d6b87e6417cfcb820eb205843eadce8314d01a3..6f524e3d77fb6c51b4e1f8af116b9c7a98df6dee 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -317,8 +317,9 @@ CVS code -
   do_enter()
        - Don't update the edit window until we set placewewant. (DLR)
   break_line()
-       - Fix a problem where a line could be broken in the middle of
-         a multibyte character. (DLR)
+       - Fix problems where a line could be broken in the middle of
+         a multibyte character, and goal could be miscalculated on lines
+         containing tabs. (DLR)
   do_word_count()
        - Rename to do_wordlinechar_count(), and expand to also count
          the number of lines and characters in the file or selection,
index 0fc43d403c3301a0d9d2445cde217ff244499a23..7300010b1f048a09bc9c953d3fbb74d1ff349431 100644 (file)
@@ -570,12 +570,16 @@ ssize_t break_line(const char *line, ssize_t goal, bool newline)
         * found with short enough display width.  */
     ssize_t cur_loc = 0;
        /* Current index in line. */
+    size_t pos = 0;
+       /* Current column position in line. */
+    size_t old_pos;
+       /* Previous column position in line. */
     int line_len;
 
     assert(line != NULL);
 
     while (*line != '\0' && goal >= 0) {
-       size_t pos = 0;
+       old_pos = pos;
 
        line_len = parse_mbchar(line, NULL, &pos);
 
@@ -586,7 +590,7 @@ ssize_t break_line(const char *line, ssize_t goal, bool newline)
                break;
        }
 
-       goal -= pos;
+       goal -= pos - old_pos;
        line += line_len;
        cur_loc += line_len;
     }