]> git.wh0rd.org Git - nano.git/commitdiff
Eliminate linescut variable from undo structure as its an unneeded pain in the ass.
authorChris Allegretta <chrisa@asty.org>
Tue, 14 Oct 2008 04:34:56 +0000 (04:34 +0000)
committerChris Allegretta <chrisa@asty.org>
Tue, 14 Oct 2008 04:34:56 +0000 (04:34 +0000)
Also initialize to_end, because for some reason it seems to be not getting set even when
type == CUT in add_undo (?!)

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

src/nano.h
src/text.c

index 3bc10f1b252cb64ba4a94372bcd2315392c52092..04f00232d8d5392b08a15734f6a283343315290e 100644 (file)
@@ -276,8 +276,6 @@ typedef struct undo {
        /* copy copy copy */
     ssize_t mark_begin_x;
        /* Another shadow variable */
-    ssize_t linescut;
-       /* How many lines we cut on a straight non-marked non-to-end cut */
     struct undo *next;
 } undo;
 
index 915d1c186f8ebf0ab859ee3e28cf124fdfe0b12e..789d280c97fa6a32d68f624e14b7ac3d60437008 100644 (file)
@@ -388,7 +388,7 @@ void undo_cut(undo *u)
 /* Re-do a cut, or undo an uncut */
 void redo_cut(undo *u) {
     int i;
-    filestruct *t;
+    filestruct *t, *c;
 
        do_gotolinecolumn(u->lineno, u->begin+1, FALSE, FALSE, FALSE, FALSE);
        openfile->mark_set = u->mark_set;
@@ -405,14 +405,12 @@ void redo_cut(undo *u) {
            /* Here we have a regular old potentially multi-line ^K cut.  We'll
                need to trick nano into thinking it's a marked cut to cut more
                than one line again */
-#ifdef DEBUG
-           fprintf(stderr, "Undoing multi-^K cut, u->linescut = %d\n", u->linescut);
-#endif
-           for (i = 0, t = openfile->current; i < u->linescut && t->next != NULL ; i++) {
+           for (c = u->cutbuffer, t = openfile->current; c->next != NULL && t->next != NULL; ) {
 
 #ifdef DEBUG
            fprintf(stderr, "Advancing, lineno  = %d, data = \"%s\"\n", t->lineno, t->data);
 #endif
+               c = c->next;
                t = t->next;
            }
            openfile->mark_begin = t;
@@ -854,8 +852,8 @@ void add_undo(undo_type current_action)
     u->mark_set = 0;
     u->mark_begin_lineno = 0;
     u->mark_begin_x = 0;
-    u->linescut = 0;
     u->xflags = 0;
+    u->to_end = FALSE;
 
     switch (u->type) {
     /* We need to start copying data into the undo buffer or we wont be able
@@ -902,13 +900,6 @@ void add_undo(undo_type current_action)
        else if (last_cutu->type == CUT) {
            u->cutbuffer = last_cutu->cutbuffer;
            u->cutbottom = last_cutu->cutbottom;
-           if (!last_cutu->mark_set)
-               u->linescut = last_cutu->linescut;
-           else {
-               filestruct *c;
-               for (c = u->cutbuffer; c != NULL; c = c->next)
-                   u->linescut++;
-           }
        }
        break;
     case OTHER:
@@ -1018,8 +1009,9 @@ void update_undo(undo_type action)
        if (u->cutbuffer)
            free(u->cutbuffer);
        u->cutbuffer = copy_filestruct(cutbuffer);
-       u->cutbottom = cutbottom;
-       u->linescut++;
+        /* Compute cutbottom for the uncut using out copy */
+        for (u->cutbottom = u->cutbuffer; u->cutbottom->next != NULL; u->cutbottom = u->cutbottom->next)
+            ;
        break;
     case REPLACE:
     case UNCUT: