From 5c1c143ed2949f7fbc84cdcb8370a1ecede259f0 Mon Sep 17 00:00:00 2001 From: Chris Allegretta Date: Sat, 4 Oct 2008 11:10:11 +0000 Subject: [PATCH] 2008-10-04 Chris Allegretta * cut.c (Add_undo): Save last cut undo information so it can be used for next uncut, fixes Savannah bug 24183. git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@4338 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 4 ++++ src/text.c | 19 ++++++++++--------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 98e92539..5f0f1321 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2008-10-04 Chris Allegretta + * cut.c (Add_undo): Save last cut undo information so it can be used for next uncut, fixes + Savannah bug 24183. + GNU nano 2.1.6 - 2008.10.03 2008-10-03 Pascal Gentil * fortran.nanorc: Sample python syntax highlighting file diff --git a/src/text.c b/src/text.c index 407b7ecb..97e1f190 100644 --- a/src/text.c +++ b/src/text.c @@ -822,6 +822,7 @@ void add_undo(undo_type current_action) undo *u, *cutu; char *data; openfilestruct *fs = openfile; + static undo *last_cutu = NULL; /* Last thing we cut to set up the undo for uncut */ /* Ugh, if we were called while cutting not-to-end, non-marked and on the same lineno, we need to abort here */ @@ -896,22 +897,22 @@ void add_undo(undo_type current_action) u->mark_begin_x = openfile->mark_begin_x; } u->to_end = (current_action == CUTTOEND); + last_cutu = u; break; case UNCUT: - for (cutu = u; cutu != NULL && cutu->type != CUT; cutu = cutu->next) - ; - if (cutu->type == CUT) { - u->cutbuffer = cutu->cutbuffer; - u->cutbottom = cutu->cutbottom; - if (!cutu->mark_set) - u->linescut = cutu->linescut; + if (!last_cutu) + statusbar(_("Internal error: can't setup uncut. Please save your work.")); + 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++; } - } else - statusbar(_("Internal error: can't setup uncut. Please save your work.")); + } break; case OTHER: statusbar(_("Internal error: unknown type. Please save your work.")); -- 2.39.5