mirror of git://git.sv.gnu.org/nano.git
Add undoing argument to do_cut_text as we don't want to be messing around with the undo contents when we're in the
middle of an undo. git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@4285 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
This commit is contained in:
parent
e418b694b6
commit
91a1862eed
10
src/cut.c
10
src/cut.c
|
@ -113,7 +113,7 @@ void cut_to_eof(void)
|
|||
* position to the end of the file into the cutbuffer. */
|
||||
void do_cut_text(
|
||||
#ifndef NANO_TINY
|
||||
bool copy_text, bool cut_till_end
|
||||
bool copy_text, bool cut_till_end, bool undoing
|
||||
#else
|
||||
void
|
||||
#endif
|
||||
|
@ -204,7 +204,7 @@ void do_cut_text(
|
|||
* disturbing the text. */
|
||||
if (!old_no_newlines)
|
||||
UNSET(NO_NEWLINES);
|
||||
} else
|
||||
} else if (!undoing)
|
||||
update_undo(CUT, openfile);
|
||||
#endif
|
||||
/* Leave the text in the cutbuffer, and mark the file as
|
||||
|
@ -226,7 +226,7 @@ void do_cut_text_void(void)
|
|||
add_undo(CUT, openfile);
|
||||
do_cut_text(
|
||||
#ifndef NANO_TINY
|
||||
FALSE, FALSE
|
||||
FALSE, FALSE, FALSE
|
||||
#endif
|
||||
);
|
||||
}
|
||||
|
@ -236,14 +236,14 @@ void do_cut_text_void(void)
|
|||
* back into the filestruct afterward. */
|
||||
void do_copy_text(void)
|
||||
{
|
||||
do_cut_text(TRUE, FALSE);
|
||||
do_cut_text(TRUE, FALSE, FALSE);
|
||||
}
|
||||
|
||||
/* Cut from the current cursor position to the end of the file. */
|
||||
void do_cut_till_end(void)
|
||||
{
|
||||
add_undo(CUTTOEND, openfile);
|
||||
do_cut_text(FALSE, TRUE);
|
||||
do_cut_text(FALSE, TRUE, FALSE);
|
||||
}
|
||||
#endif /* !NANO_TINY */
|
||||
|
||||
|
|
|
@ -239,7 +239,7 @@ void cut_to_eof(void);
|
|||
#endif
|
||||
void do_cut_text(
|
||||
#ifndef NANO_TINY
|
||||
bool copy_text, bool cut_till_end
|
||||
bool copy_text, bool cut_till_end, bool undoing
|
||||
#else
|
||||
void
|
||||
#endif
|
||||
|
|
28
src/text.c
28
src/text.c
|
@ -554,7 +554,7 @@ void do_redo(void)
|
|||
openfile->mark_begin = t;
|
||||
}
|
||||
openfile->mark_begin_x = u->mark_begin_x;
|
||||
do_cut_text(FALSE, u->to_end);
|
||||
do_cut_text(FALSE, u->to_end, TRUE);
|
||||
openfile->mark_set = FALSE;
|
||||
openfile->mark_begin = NULL;
|
||||
openfile->mark_begin_x = 0;
|
||||
|
@ -734,11 +734,17 @@ void add_undo(undo_type current_action, openfilestruct *fs)
|
|||
char *data;
|
||||
|
||||
/* Blow away the old undo stack if we are starting from the middle */
|
||||
while (fs->undotop != fs->current_undo) {
|
||||
undo *tmp = fs->undotop;
|
||||
while (fs->undotop != NULL && fs->undotop != fs->current_undo) {
|
||||
undo *u2 = fs->undotop;
|
||||
fs->undotop = fs->undotop->next;
|
||||
free(tmp->strdata);
|
||||
free(tmp);
|
||||
if (u2->strdata != NULL)
|
||||
free(u2->strdata);
|
||||
while (u2->cutbuffer != NULL) {
|
||||
filestruct *f2 = u2->cutbuffer->next;
|
||||
u2->cutbuffer = u2->cutbuffer->next;
|
||||
free(f2);
|
||||
}
|
||||
free(u2);
|
||||
}
|
||||
|
||||
u->type = current_action;
|
||||
|
@ -747,6 +753,10 @@ void add_undo(undo_type current_action, openfilestruct *fs)
|
|||
u->next = fs->undotop;
|
||||
fs->undotop = u;
|
||||
fs->current_undo = u;
|
||||
u->strdata = NULL;
|
||||
u->cutbuffer = NULL;
|
||||
u->cutbottom = NULL;
|
||||
u->xflags = 0;
|
||||
|
||||
switch (u->type) {
|
||||
/* We need to start copying data into the undo buffer or we wont be able
|
||||
|
@ -808,11 +818,17 @@ void update_undo(undo_type action, openfilestruct *fs)
|
|||
char *data;
|
||||
int len = 0;
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
fprintf(stderr, "action = %d, fs->last_action = %d, openfile->current->lineno = %d, fs->current_undo->lineno = %d\n",
|
||||
action, fs->last_action, openfile->current->lineno, fs->current_undo->lineno);
|
||||
#endif
|
||||
|
||||
/* 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
|
||||
&& openfile->current->lineno != fs->undotop->lineno)) {
|
||||
&& openfile->current->lineno != fs->current_undo->lineno)) {
|
||||
add_undo(action, fs);
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue