From e19a16f0e6abcf49104e907897c70a7310c372dc Mon Sep 17 00:00:00 2001
From: Benno Schulenberg <bensberg@justemail.net>
Date: Sun, 29 Nov 2015 12:31:49 +0000
Subject: [PATCH] Always setting the multidata to CBEGINBEFORE when an end is
 found, also when the coloured part is horizontally scrolled off.

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5451 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
---
 ChangeLog   |  3 +++
 src/winio.c | 10 ++++++++--
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index f7e98f97..c9169455 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,9 @@
 	the multidata cache.  This fixes Savannah bug #46543.
 	* src/color.c (reset_multis): Reset the multidata a bit less often.
 	* src/color.c (reset_multis): Adjust whitespace and comments.
+	* src/winio.c (edit_draw): When an end is found but nothing is painted
+	(because the coloured part is horizontally scrolled off), nevertheless
+	set the multidata to CBEGINBEFORE.  This fixes Savannah bug #46545.
 
 2015-11-28  Benno Schulenberg  <bensberg@justemail.net>
 	* src/nano.c (main): Allow the user full control over the values of
diff --git a/src/winio.c b/src/winio.c
index 225ca722..93f868b8 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -2585,6 +2585,9 @@ void edit_draw(filestruct *fileptr, const char *converted, int
 		    goto end_of_loop;
 		} else if (md == CBEGINBEFORE) {
 		    regexec(tmpcolor->end, fileptr->data, 1, &endmatch, 0);
+		    /* If the coloured part is scrolled off, skip it. */
+		    if (endmatch.rm_eo <= startpos)
+			goto end_of_loop;
 		    paintlen = actual_x(converted, strnlenpt(fileptr->data,
 			endmatch.rm_eo) - start);
 		    mvwaddnstr(edit, line, 0, converted, paintlen);
@@ -2649,9 +2652,12 @@ void edit_draw(filestruct *fileptr, const char *converted, int
 			end_line = end_line->next;
 
 		    /* If no end was found, or it is too early, next step. */
-		    if (end_line == NULL || (end_line == fileptr &&
-			endmatch.rm_eo <= startpos))
+		    if (end_line == NULL)
+			goto step_two;
+		    if (end_line == fileptr && endmatch.rm_eo <= startpos) {
+			fileptr->multidata[tmpcolor->id] = CBEGINBEFORE;
 			goto step_two;
+		    }
 
 		    /* Now paint the start of fileptr.  If the start of
 		     * fileptr is on a different line from the end,
-- 
GitLab