From 287f78a26b83ae35bba0f74c547a3edc28b3cf34 Mon Sep 17 00:00:00 2001 From: Benno Schulenberg Date: Tue, 23 Feb 2016 12:07:58 +0000 Subject: [PATCH] Not moving the cursor when copying a backwardly marked region. This fixes Savannah bug #46980. git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5671 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 2 ++ src/cut.c | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/ChangeLog b/ChangeLog index 31f62a7b..2a0f0adb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,8 @@ 2016-02-23 Benno Schulenberg * src/prompt.c (do_statusbar_output, do_statusbar_delete): Rename a variable, for contrast and correctness. + * src/cut.c (do_copy_text): Don't move the cursor when copying a + backwardly marked region. This fixes Savannah bug #46980. 2016-02-22 Chris Allegretta * Add ability to kill the trailing spaces when justifying diff --git a/src/cut.c b/src/cut.c index fffd7bfb..4a6b7b99 100644 --- a/src/cut.c +++ b/src/cut.c @@ -237,6 +237,11 @@ void do_copy_text(void) static struct filestruct *next_contiguous_line = NULL; bool mark_set = openfile->mark_set; + /* Remember the current view port and cursor position. */ + ssize_t is_edittop_lineno = openfile->edittop->lineno; + ssize_t is_current_lineno = openfile->current->lineno; + size_t is_current_x = openfile->current_x; + if (mark_set || openfile->current != next_contiguous_line) cutbuffer_reset(); @@ -244,6 +249,13 @@ void do_copy_text(void) /* If the mark was set, blow away the cutbuffer on the next copy. */ next_contiguous_line = (mark_set ? NULL : openfile->current); + + if (mark_set) { + /* Restore the view port and cursor position. */ + openfile->edittop = fsfromline(is_edittop_lineno); + openfile->current = fsfromline(is_current_lineno); + openfile->current_x = is_current_x; + } } /* Cut from the current cursor position to the end of the file. */ -- 2.39.5