case CUTTOEND:
undidmsg = _("text cut");
cutbuffer = copy_filestruct(u->cutbuffer);
+
+ /* Compute cutbottom for the uncut using out copy */
for (cutbottom = cutbuffer; cutbottom->next != NULL; cutbottom = cutbottom->next)
;
+
+ /* Get to where we need to uncut from */
if (u->mark_set && u->mark_begin_lineno < u->lineno)
do_gotolinecolumn(u->mark_begin_lineno, u->mark_begin_x+1, FALSE, FALSE, FALSE, FALSE);
else
do_gotolinecolumn(u->lineno, u->begin+1, FALSE, FALSE, FALSE, FALSE);
+
do_uncut_text();
free_filestruct(cutbuffer);
cutbuffer = NULL;
undidmsg = _("line cut");
do_gotolinecolumn(u->lineno, u->begin+1, FALSE, FALSE, FALSE, FALSE);
openfile->mark_set = u->mark_set;
- t = cutbuffer;
+ if (cutbuffer)
+ free(cutbuffer);
cutbuffer = NULL;
+
+ /* Move ahead the same # lines we had if a marked cut */
if (u->mark_set) {
for (i = 1, t = openfile->fileage; i != u->mark_begin_lineno; i++)
t = t->next;
openfile->mark_begin = t;
+ } else if (!u->to_end) {
+ /* Here we have a regular old potentially multi-line ^K cut. We'll
+ need to trick nano into thinking it's a marked cut to cut more
+ than one line again */
+#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++) {
+
+#ifdef DEBUG
+ fprintf(stderr, "Advancing, lineno = %d, data = \"%s\"\n", t->lineno, t->data);
+#endif
+ t = t->next;
+ }
+ openfile->mark_begin = t;
+ openfile->mark_begin_x = 0;
+ openfile->mark_set = TRUE;
}
+
openfile->mark_begin_x = u->mark_begin_x;
do_cut_text(FALSE, u->to_end, TRUE);
openfile->mark_set = FALSE;
openfile->mark_begin = NULL;
openfile->mark_begin_x = 0;
- cutbuffer = t;
edit_refresh();
break;
default:
u->strdata = NULL;
u->cutbuffer = NULL;
u->cutbottom = NULL;
+ u->mark_begin_lineno = 0;
+ u->mark_begin_x = 0;
+ u->linescut = 0;
u->xflags = 0;
switch (u->type) {
free(u->cutbuffer);
u->cutbuffer = copy_filestruct(cutbuffer);
u->cutbottom = cutbottom;
+ u->linescut++;
break;
case SPLIT:
case UNSPLIT: