diff --git a/ChangeLog b/ChangeLog index 5f0f1321..c14b7245 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2008-10-13 Chris Allegretta + * Remove CUTTOEND as an undo type as it's unneeded, fix u->to_end logic in undo struct. + * undo.c (update_undo): Don't free cutbuffer if NULL, fix for Savannah bug #24499 + 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. diff --git a/src/cut.c b/src/cut.c index 26899864..f92f9b3c 100644 --- a/src/cut.c +++ b/src/cut.c @@ -245,7 +245,7 @@ void do_copy_text(void) void do_cut_till_end(void) { #ifndef NANO_TINY - add_undo(CUTTOEND); + add_undo(CUT); #endif do_cut_text(FALSE, TRUE, FALSE); } diff --git a/src/nano.h b/src/nano.h index c82122d6..3bc10f1b 100644 --- a/src/nano.h +++ b/src/nano.h @@ -170,7 +170,7 @@ typedef enum { } function_type; typedef enum { - ADD, DEL, REPLACE, SPLIT, UNSPLIT, CUT, CUTTOEND, UNCUT, INSERT, OTHER + ADD, DEL, REPLACE, SPLIT, UNSPLIT, CUT, UNCUT, INSERT, OTHER } undo_type; /* Structure types. */ diff --git a/src/text.c b/src/text.c index 97e1f190..915d1c18 100644 --- a/src/text.c +++ b/src/text.c @@ -408,7 +408,7 @@ void redo_cut(undo *u) { #ifdef DEBUG fprintf(stderr, "Undoing multi-^K cut, u->linescut = %d\n", u->linescut); #endif - for (i = 0, t = openfile->current; i < u->linescut; i++) { + for (i = 0, t = openfile->current; i < u->linescut && t->next != NULL ; i++) { #ifdef DEBUG fprintf(stderr, "Advancing, lineno = %d, data = \"%s\"\n", t->lineno, t->data); @@ -505,7 +505,6 @@ void do_undo(void) renumber(f); break; case CUT: - case CUTTOEND: undidmsg = _("text cut"); undo_cut(u); break; @@ -629,7 +628,6 @@ void do_redo(void) renumber(f); break; case CUT: - case CUTTOEND: undidmsg = _("text cut"); redo_cut(u); break; @@ -890,13 +888,12 @@ void add_undo(undo_type current_action) u->strdata = data; break; case CUT: - case CUTTOEND: u->mark_set = openfile->mark_set; if (u->mark_set) { u->mark_begin_lineno = openfile->mark_begin->lineno; u->mark_begin_x = openfile->mark_begin_x; } - u->to_end = (current_action == CUTTOEND); + u->to_end = (ISSET(CUT_TO_END)) ? TRUE : FALSE; last_cutu = u; break; case UNCUT: @@ -951,7 +948,7 @@ void update_undo(undo_type action) /* Change to an add if we're not using the same undo struct that we should be using */ if (action != fs->last_action - || (action != CUT && action != CUTTOEND && action != INSERT + || (action != CUT && action != INSERT && openfile->current->lineno != fs->current_undo->lineno)) { add_undo(action); return; @@ -1016,7 +1013,8 @@ void update_undo(undo_type action) #endif break; case CUT: - case CUTTOEND: + if (!cutbuffer) + break; if (u->cutbuffer) free(u->cutbuffer); u->cutbuffer = copy_filestruct(cutbuffer);