From 440a128d25ce87b2f8004411df7f62b224c6dc18 Mon Sep 17 00:00:00 2001 From: Benno Schulenberg Date: Sun, 24 Dec 2017 12:26:55 +0100 Subject: [PATCH] indenting: keep affecting last line of marked region if it was at first When unindenting/uncommenting affected the bottom line of the marked region, keep affecting this line also during subsequent consecutive indenting/commenting. This fixes https://savannah.gnu.org/bugs/?52718. --- src/global.c | 4 +++- src/nano.c | 17 ++++++++++------- src/proto.h | 2 ++ src/utils.c | 4 +++- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/global.c b/src/global.c index ce89eb71..07976e50 100644 --- a/src/global.c +++ b/src/global.c @@ -67,7 +67,9 @@ char *title = NULL; bool more_than_one = FALSE; /* Whether more than one buffer is or has been open. */ - +bool also_the_last = FALSE; + /* Whether indenting/commenting should include the last line of + * the marked region. */ int didfind = 0; /* Whether the last search found something. */ diff --git a/src/nano.c b/src/nano.c index de4d7a7a..451d03ee 100644 --- a/src/nano.c +++ b/src/nano.c @@ -1698,13 +1698,16 @@ int do_input(bool allow_funcs) /* Execute the function of the shortcut. */ s->scfunc(); #ifndef NANO_TINY - /* If Shiftless movement occurred, discard a soft mark. */ - if (!shift_held && openfile->mark && - openfile->kind_of_mark == SOFTMARK && - (openfile->current_x != was_x || - openfile->current != was_current)) { - openfile->mark = NULL; - refresh_needed = TRUE; + /* When the marked region changes without Shift being held, + * discard a soft mark. And when the marked region covers a + * different set of lines, reset the "last line too" flag. */ + if (openfile->mark && (openfile->current != was_current || + openfile->current_x != was_x)) { + if (!shift_held && openfile->kind_of_mark == SOFTMARK) { + openfile->mark = NULL; + refresh_needed = TRUE; + } else if (openfile->current != was_current) + also_the_last = FALSE; } #endif #ifdef ENABLE_WRAPPING diff --git a/src/proto.h b/src/proto.h index 0a7106d8..e5414c06 100644 --- a/src/proto.h +++ b/src/proto.h @@ -54,6 +54,8 @@ extern char *title; extern bool more_than_one; +extern bool also_the_last; + extern int didfind; extern int controlleft; diff --git a/src/utils.c b/src/utils.c index 771f58ae..4ae36f4f 100644 --- a/src/utils.c +++ b/src/utils.c @@ -541,8 +541,10 @@ void get_range(const filestruct **top, const filestruct **bot) mark_order(top, &top_x, bot, &bot_x, NULL); - if (bot_x == 0 && *bot != *top) + if (bot_x == 0 && *bot != *top && !also_the_last) *bot = (*bot)->prev; + else + also_the_last = TRUE; } }