Making sure the cutbuffer is cleared at the appropriate moments.
Patch by Mark Majeres. git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@4978 35c25a1d-7b9e-4130-9fde-d3aeb78583b8master
parent
b439f55678
commit
a872709ab4
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
||||||
|
2014-06-18 Mark Majeres <mark@engine12.com>
|
||||||
|
* src/text.c (add_undo): Don't start a new undo for CUT when the
|
||||||
|
cutbuffer is being preserved, because then the cuts are contiguous
|
||||||
|
and will form a single undo item. And make sure the cutbuffer will
|
||||||
|
be cleared when a new undo item for CUT is created.
|
||||||
|
* src/cut.c (keeping_cutbuffer): New function, to access the status
|
||||||
|
of 'keep_cutbuffer' from the undo/redo code in src/text.c.
|
||||||
|
* src/cut.c (do_copy_text): Blow away the contents of the cutbuffer
|
||||||
|
if the mark is set or the cursor has moved between two copy commands.
|
||||||
|
|
||||||
2014-06-17 Mark Majeres <mark@engine12.com>
|
2014-06-17 Mark Majeres <mark@engine12.com>
|
||||||
* src/text.c (do_undo, do_redo): After an undo or redo, update the
|
* src/text.c (do_undo, do_redo): After an undo or redo, update the
|
||||||
'placewewant' (the desired horizontal position of the cursor).
|
'placewewant' (the desired horizontal position of the cursor).
|
||||||
|
|
18
src/cut.c
18
src/cut.c
|
@ -37,6 +37,12 @@ void cutbuffer_reset(void)
|
||||||
keep_cutbuffer = FALSE;
|
keep_cutbuffer = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return the status of cutbuffer preservation. */
|
||||||
|
inline bool keeping_cutbuffer(void)
|
||||||
|
{
|
||||||
|
return keep_cutbuffer;
|
||||||
|
}
|
||||||
|
|
||||||
/* If we aren't on the last line of the file, move all the text of the
|
/* If we aren't on the last line of the file, move all the text of the
|
||||||
* current line, plus the newline at the end, into the cutbuffer. If we
|
* current line, plus the newline at the end, into the cutbuffer. If we
|
||||||
* are, move all of the text of the current line into the cutbuffer. In
|
* are, move all of the text of the current line into the cutbuffer. In
|
||||||
|
@ -245,10 +251,20 @@ void do_cut_text_void(void)
|
||||||
|
|
||||||
#ifndef NANO_TINY
|
#ifndef NANO_TINY
|
||||||
/* Move text from the current filestruct into the cutbuffer, and copy it
|
/* Move text from the current filestruct into the cutbuffer, and copy it
|
||||||
* back into the filestruct afterward. */
|
* back into the filestruct afterward. If the mark is set or the cursor
|
||||||
|
* was moved, blow away previous contents of the cutbuffer. */
|
||||||
void do_copy_text(void)
|
void do_copy_text(void)
|
||||||
{
|
{
|
||||||
|
static struct filestruct *next_contiguous_line = NULL;
|
||||||
|
bool mark_set = openfile->mark_set;
|
||||||
|
|
||||||
|
if (mark_set || openfile->current != next_contiguous_line)
|
||||||
|
cutbuffer_reset();
|
||||||
|
|
||||||
do_cut_text(TRUE, FALSE, FALSE);
|
do_cut_text(TRUE, FALSE, FALSE);
|
||||||
|
|
||||||
|
/* If the mark was set, blow away the cutbuffer on the next copy. */
|
||||||
|
next_contiguous_line = (mark_set ? NULL : openfile->current);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Cut from the current cursor position to the end of the file. */
|
/* Cut from the current cursor position to the end of the file. */
|
||||||
|
|
|
@ -249,6 +249,7 @@ void color_update(void);
|
||||||
|
|
||||||
/* All functions in cut.c. */
|
/* All functions in cut.c. */
|
||||||
void cutbuffer_reset(void);
|
void cutbuffer_reset(void);
|
||||||
|
bool keeping_cutbuffer(void);
|
||||||
void cut_line(void);
|
void cut_line(void);
|
||||||
#ifndef NANO_TINY
|
#ifndef NANO_TINY
|
||||||
void cut_marked(void);
|
void cut_marked(void);
|
||||||
|
|
|
@ -854,7 +854,7 @@ void add_undo(undo_type current_action)
|
||||||
* on the same lineno, we need to abort here. */
|
* on the same lineno, we need to abort here. */
|
||||||
u = fs->current_undo;
|
u = fs->current_undo;
|
||||||
if (u && u->mark_begin_lineno == fs->current->lineno &&
|
if (u && u->mark_begin_lineno == fs->current->lineno &&
|
||||||
((current_action == CUT && u->type == CUT && !u->mark_set) ||
|
((current_action == CUT && u->type == CUT && !u->mark_set && keeping_cutbuffer()) ||
|
||||||
(current_action == ADD && u->type == ADD && u->mark_begin_x == fs->current_x)))
|
(current_action == ADD && u->type == ADD && u->mark_begin_x == fs->current_x)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -941,6 +941,7 @@ void add_undo(undo_type current_action)
|
||||||
case CUT_EOF:
|
case CUT_EOF:
|
||||||
u->to_end = TRUE;
|
u->to_end = TRUE;
|
||||||
case CUT:
|
case CUT:
|
||||||
|
cutbuffer_reset();
|
||||||
u->mark_set = openfile->mark_set;
|
u->mark_set = openfile->mark_set;
|
||||||
if (u->mark_set) {
|
if (u->mark_set) {
|
||||||
u->mark_begin_lineno = openfile->mark_begin->lineno;
|
u->mark_begin_lineno = openfile->mark_begin->lineno;
|
||||||
|
|
Loading…
Reference in New Issue