From 9ec546d293b26df92f6495e0417693e9af07ed02 Mon Sep 17 00:00:00 2001
From: Benno Schulenberg <bensberg@justemail.net>
Date: Mon, 13 Feb 2017 19:11:04 +0100
Subject: [PATCH] tweaks: rename a function, and drop an unneeded parameter

When replacements are made, nothing needs to be reset any more
(it was done insufficiently anyway).  Just make sure the screen
is refreshed when all is done -- this may be superfluous when
doing interactive replacements, but not when replacing all.
---
 src/color.c  | 20 +++++++++-----------
 src/cut.c    |  4 ++--
 src/nano.c   |  4 ++--
 src/proto.h  |  2 +-
 src/search.c | 11 ++++-------
 5 files changed, 18 insertions(+), 23 deletions(-)

diff --git a/src/color.c b/src/color.c
index ec6458d8..2227fc5c 100644
--- a/src/color.c
+++ b/src/color.c
@@ -292,7 +292,7 @@ void color_update(void)
 
 /* Determine whether the matches of multiline regexes are still the same,
  * and if not, schedule a screen refresh, so things will be repainted. */
-void reset_multis(filestruct *fileptr, bool force)
+void check_the_multis(filestruct *line)
 {
     const colortype *ink;
     int nobegin = 0, noend = 0;
@@ -307,27 +307,25 @@ void reset_multis(filestruct *fileptr, bool force)
 	if (ink->end == NULL)
 	    continue;
 
-	alloc_multidata_if_needed(fileptr);
+	alloc_multidata_if_needed(line);
 
-	if (force == FALSE) {
 	    /* Check whether the multidata still matches the current situation. */
-	    nobegin = regexec(ink->start, fileptr->data, 1, &startmatch, 0);
-	    noend = regexec(ink->end, fileptr->data, 1, &endmatch, 0);
-	    if (fileptr->multidata[ink->id] == CNONE ||
-			fileptr->multidata[ink->id] == CWHOLELINE) {
+	    nobegin = regexec(ink->start, line->data, 1, &startmatch, 0);
+	    noend = regexec(ink->end, line->data, 1, &endmatch, 0);
+	    if (line->multidata[ink->id] == CNONE ||
+			line->multidata[ink->id] == CWHOLELINE) {
 		if (nobegin && noend)
 		    continue;
-	    } else if (fileptr->multidata[ink->id] == CSTARTENDHERE) {
+	    } else if (line->multidata[ink->id] == CSTARTENDHERE) {
 		if (!nobegin && !noend && startmatch.rm_so < endmatch.rm_so)
 		    continue;
-	    } else if (fileptr->multidata[ink->id] == CBEGINBEFORE) {
+	    } else if (line->multidata[ink->id] == CBEGINBEFORE) {
 		if (nobegin && !noend)
 		    continue;
-	    } else if (fileptr->multidata[ink->id] == CENDAFTER) {
+	    } else if (line->multidata[ink->id] == CENDAFTER) {
 		if (!nobegin && noend)
 		    continue;
 	    }
-	}
 
 	refresh_needed = TRUE;
 	return;
diff --git a/src/cut.c b/src/cut.c
index 871ebab3..a64f2bd1 100644
--- a/src/cut.c
+++ b/src/cut.c
@@ -194,7 +194,7 @@ void do_cut_text(bool copy_text, bool cut_till_eof)
     refresh_needed = TRUE;
 
 #ifndef DISABLE_COLOR
-    reset_multis(openfile->current, FALSE);
+    check_the_multis(openfile->current);
 #endif
 
 #ifdef DEBUG
@@ -291,7 +291,7 @@ void do_uncut_text(void)
     refresh_needed = TRUE;
 
 #ifndef DISABLE_COLOR
-    reset_multis(openfile->current, FALSE);
+    check_the_multis(openfile->current);
 #endif
 
 #ifdef DEBUG
diff --git a/src/nano.c b/src/nano.c
index 9285c98f..855b9773 100644
--- a/src/nano.c
+++ b/src/nano.c
@@ -1690,7 +1690,7 @@ int do_input(bool allow_funcs)
 #endif
 #ifndef DISABLE_COLOR
 	    if (f && !f->viewok)
-		reset_multis(openfile->current, FALSE);
+		check_the_multis(openfile->current);
 #endif
 	    if (!refresh_needed && (s->scfunc == do_delete || s->scfunc == do_backspace))
 		update_line(openfile->current, openfile->current_x);
@@ -1891,7 +1891,7 @@ void do_output(char *output, size_t output_len, bool allow_cntrls)
     openfile->placewewant = xplustabs();
 
 #ifndef DISABLE_COLOR
-    reset_multis(openfile->current, FALSE);
+    check_the_multis(openfile->current);
 #endif
 
     if (!refresh_needed)
diff --git a/src/proto.h b/src/proto.h
index 3945f073..3642ae31 100644
--- a/src/proto.h
+++ b/src/proto.h
@@ -266,7 +266,7 @@ bool is_valid_mbstring(const char *s);
 void set_colorpairs(void);
 void color_init(void);
 void color_update(void);
-void reset_multis(filestruct *fileptr, bool force);
+void check_the_multis(filestruct *line);
 void alloc_multidata_if_needed(filestruct *fileptr);
 void precalc_multicolorinfo(void);
 #endif
diff --git a/src/search.c b/src/search.c
index 5a69c334..a8840822 100644
--- a/src/search.c
+++ b/src/search.c
@@ -719,13 +719,6 @@ ssize_t do_replace_loop(const char *needle, bool whole_word_only,
 	    free(openfile->current->data);
 	    openfile->current->data = copy;
 
-#ifndef DISABLE_COLOR
-	    /* Reset the precalculated multiline-regex hints only when
-	     * the first replacement has been made. */
-	    if (numreplaced == 0)
-		reset_multis(openfile->current, TRUE);
-#endif
-
 	    if (!replaceall) {
 #ifndef DISABLE_COLOR
 		/* When doing syntax coloring, the replacement might require
@@ -745,6 +738,10 @@ ssize_t do_replace_loop(const char *needle, bool whole_word_only,
 
     if (numreplaced == -1)
 	not_found_msg(needle);
+#ifndef DISABLE_COLOR
+    else if (numreplaced > 0)
+	refresh_needed = TRUE;
+#endif
 
 #ifndef NANO_TINY
     if (mark_was_set)
-- 
GitLab