From ea577874ef220b85737ca0b84803750c5114e5c7 Mon Sep 17 00:00:00 2001 From: Chris Allegretta Date: Sun, 3 Aug 2008 20:19:42 +0000 Subject: [PATCH] - Add redo of an insert - Fix bug in fsfromlineno - Tiny cleanups in undo git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@4292 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- src/text.c | 17 ++++++++++++----- src/utils.c | 4 ++-- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/text.c b/src/text.c index 0564cb9c..5226a321 100644 --- a/src/text.c +++ b/src/text.c @@ -498,6 +498,7 @@ void do_redo(void) { undo *u = openfile->undotop; filestruct *f = openfile->current, *t; + filestruct *oldcutbuffer = cutbuffer, *oldcutbottom = cutbottom; int len = 0, i; char *undidmsg, *data; @@ -619,6 +620,15 @@ void do_redo(void) u->strdata = f->data; f->data = data; break; + case INSERT: + undidmsg = _("text insert"); + cutbuffer = u->cutbuffer; + cutbottom = u->cutbottom; + do_gotolinecolumn(u->lineno, u->begin+1, FALSE, FALSE, FALSE, FALSE); + do_uncut_text(); + cutbuffer = oldcutbuffer; + cutbottom = oldcutbottom; + break; default: undidmsg = _("wtf?"); break; @@ -804,11 +814,8 @@ void add_undo(undo_type current_action) fs->undotop = fs->undotop->next; if (u2->strdata != NULL) free(u2->strdata); - while (u2->cutbuffer != NULL) { - filestruct *f2 = u2->cutbuffer->next; - u2->cutbuffer = u2->cutbuffer->next; - free(f2); - } + if (u2->cutbuffer); + free_filestruct(u2->cutbuffer); free(u2); } diff --git a/src/utils.c b/src/utils.c index d09118fa..0c10f46b 100644 --- a/src/utils.c +++ b/src/utils.c @@ -613,10 +613,10 @@ filestruct *fsfromline(ssize_t lineno) ; else for (; f->lineno != lineno && f->next != NULL; f = f->next) + ; if (f->lineno != lineno) - return NULL; - + f = NULL; return f; } -- 2.39.5