diff --git a/ChangeLog b/ChangeLog index b9190e10b0c4a8e35b6b36c608ae6653e61b54da..06241bac9a453c47e73d897ec4fa7c51dc9ac936 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2015-12-03 Benno Schulenberg <bensberg@justemail.net> + * src/text.c (discard_until): Move the trimming of the undo stack + into a separate function, so it can be used elsewhere. + 2015-12-02 Benno Schulenberg <bensberg@justemail.net> * doc/syntax/python.nanorc: Don't colour triple quotes by themselves. * doc/syntax/python.nanorc: Treat backslashed quotes properly, and diff --git a/src/text.c b/src/text.c index eef0a52addc2e8ffcd09e0637d70aca790b00cc6..c63d435cb396836f3471b5cbf6979edd60c9dd40 100644 --- a/src/text.c +++ b/src/text.c @@ -904,6 +904,21 @@ bool execute_command(const char *command) return TRUE; } +/* Discard undo items that are newer than thisone, or all if NULL. */ +void discard_until(undo *thisone) +{ + undo *dropit = openfile->undotop; + + while (dropit != NULL && dropit != thisone) { + openfile->undotop = dropit->next; + free(dropit->strdata); + if (dropit->cutbuffer) + free_filestruct(dropit->cutbuffer); + free(dropit); + dropit = openfile->undotop; + } +} + /* Add a new undo struct to the top of the current pile. */ void add_undo(undo_type action) { @@ -918,14 +933,7 @@ void add_undo(undo_type action) return; /* Blow away newer undo items if we add somewhere in the middle. */ - while (openfile->undotop != NULL && openfile->undotop != u) { - undo *dropit = openfile->undotop; - openfile->undotop = openfile->undotop->next; - free(dropit->strdata); - if (dropit->cutbuffer) - free_filestruct(dropit->cutbuffer); - free(dropit); - } + discard_until(u); #ifdef DEBUG fprintf(stderr, " >> Adding an undo...\n");