]> git.wh0rd.org Git - nano.git/commitdiff
Added check for samlinewrap case and cursor placement fixes, closing BUG #55 =-)
authorChris Allegretta <chrisa@asty.org>
Wed, 14 Mar 2001 08:28:48 +0000 (08:28 +0000)
committerChris Allegretta <chrisa@asty.org>
Wed, 14 Mar 2001 08:28:48 +0000 (08:28 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@558 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

BUGS
ChangeLog
nano.c

diff --git a/BUGS b/BUGS
index 2bb6805994d0afacd923578d47881efdb75fe6e5..8bd13b503b89371645052cd1255ec931b55db2a8 100644 (file)
--- a/BUGS
+++ b/BUGS
 - Cut to end cutting (-k) causes segfaults (try cutting "- Backup making
   (filename~)?" line in TODO file) (discovered by
   higuita@cadernoverde.com) (54) [FIXED].
-
+- When using autoindent (-i), wrapped text does not get auto-indented
+  (55, discovered by Mark Senior) [FIXED].
 
 ** Open BUGS **
 
 $Id$
-
-- When using autoindent (-i), wrapped text does not get auto-indented
-  (55, discovered by Mark Senior).
index 04865ba014d877a1fbd97a2f3a0c0ffc88afa3c9..71d5dc2ffe7b5779ce5fd37e91998fe52693d14d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,9 @@
 CVS code -
+- nano.c:
+  do_wrap()
+       - Added case for autoindenting text causing new line (Adam).
+       - Added SAMELINE case to above.  Added checks to cases 1b and
+         2b for placement of cursor.
 - search.c:
        - s/occurence/occurrence typos (Jordi).
 - nano.texi:
diff --git a/nano.c b/nano.c
index e4bdfc144302e636a86cdd4d111652d44c83e02b..6a7c82a2a36aa375e17042a19a9443bdbb917a0b 100644 (file)
--- a/nano.c
+++ b/nano.c
@@ -768,6 +768,7 @@ void do_wrap(filestruct * inptr, char input_char)
 
     /* Category 1a: one word taking up the whole line with no beginning spaces. */
     if ((last_word_end == -1) && (!isspace((int) inptr->data[0]))) {
+fprintf(stderr, "1a\n");
        for (i = current_word_end; i < len; i++) {
            if (!isspace((int) inptr->data[i]) && i < len) {
                current_word_start = i;
@@ -805,6 +806,15 @@ void do_wrap(filestruct * inptr, char input_char)
        if (current_x >= current_word_start) {
            right = current_x - current_word_start;
            current_x = 0;
+           if (ISSET(AUTOINDENT)) {
+               int i = 0;
+               while ((inptr->next->data[i] == ' ' 
+                       || inptr->next->data[i] == '\t')
+                       && inptr->next->data[i] != 0) {
+                   i++;
+                   right++;
+               }                       
+           }
            down = 1;
        }
 
@@ -818,7 +828,7 @@ void do_wrap(filestruct * inptr, char input_char)
 
     /* Category 2: two or more words on the line. */
     else {
-
+fprintf(stderr, "2a\n");
        /* Case 2a: cursor before word at wrap point. */
        if (current_x < current_word_start) {
            temp->data =
@@ -851,6 +861,16 @@ void do_wrap(filestruct * inptr, char input_char)
            down = 1;
 
            right = current_x - current_word_start;
+           if (ISSET(AUTOINDENT)) {
+               int i = 0;
+               while ((inptr->next->data[i] == ' ' 
+                       || inptr->next->data[i] == '\t')
+                       && inptr->next->data[i] != 0) {
+                   i++;
+                   right++;
+               }                       
+           }
+
            i = current_word_start - 1;
            if (isspace((int) input_char)
                && (current_x == current_word_start)) {
@@ -871,6 +891,7 @@ void do_wrap(filestruct * inptr, char input_char)
 
        /* Case 2c: cursor past word at wrap point. */
        else {
+fprintf(stderr, "2c\n");
            temp->data =
                nmalloc(strlen(&inptr->data[current_word_start]) + 1);
            strcpy(temp->data, &inptr->data[current_word_start]);
@@ -892,14 +913,35 @@ void do_wrap(filestruct * inptr, char input_char)
 
     /* We pre-pend wrapped part to next line. */
     if (ISSET(SAMELINEWRAP) && inptr->next) {
-       /* Plus one for the space which concatenates the two lines together plus 1 for \0. */
-       char *p =
-           nmalloc(strlen(temp->data) + strlen(inptr->next->data) + 2);
        int old_x = current_x, old_y = current_y;
 
-       strcpy(p, temp->data);
-       strcat(p, " ");
-       strcat(p, inptr->next->data);
+       /* Plus one for the space which concatenates the two lines together plus 1 for \0. */
+       char *p = nmalloc((strlen(temp->data) + strlen(inptr->next->data) + 2) 
+                       * sizeof(char));
+
+       if (ISSET(AUTOINDENT)) {
+           int non = 0;
+
+            /* Grab the beginning of the next line until it's not a 
+               space or tab, then null terminate it so we can strcat it
+               to hell */
+           while ((inptr->next->data[non] == ' ' 
+               || inptr->next->data[non] == '\t')
+               && inptr->next->data[non] != 0)
+                   p[non] = inptr->next->data[non++];
+
+           p[non] = 0;
+           strcat(p, temp->data);
+           strcat(p, " ");
+
+            /* Now tack on the rest of the next line after the spaces and
+               tabs */
+           strcat(p, &inptr->next->data[non]);
+       } else {
+           strcpy(p, temp->data);
+           strcat(p, " ");
+           strcat(p, inptr->next->data);
+       }
 
        free(inptr->next->data);
        inptr->next->data = p;
@@ -933,7 +975,6 @@ void do_wrap(filestruct * inptr, char input_char)
                while ((*spc == ' ') || (*spc == '\t')) {
                    extra++;
                    spc++;
-                   right++;
                    totsize++;
                }
                t = nmalloc(strlen(temp->data) + extra + 1);