diff --git a/src/winio.c b/src/winio.c
index f670e33f3ed9b45dd04db1c843eee96d6e20bc9e..9a3cea82da38e2c5e8421d3bdc9628eace6b239b 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -3076,9 +3076,18 @@ void edit_add(const filestruct *fileptr, const char *converted, int
 		    goto step_two;
 
 		/* Now paint the start of fileptr. */
-		paintlen = (end_line != fileptr) ? -1 :
-			actual_x(converted, strnlenpt(fileptr->data,
-			endmatch.rm_eo) - start);
+		if (end_line != fileptr)
+		    /* If the start of fileptr is on a different line
+		     * from the end, paintlen is -1, meaning that
+		     * everything on the line gets painted. */
+		    paintlen = -1;
+		else
+		    /* Otherwise, paintlen is the expanded location of
+		     * the end of the match minus the expanded location
+		     * of the beginning of the page. */
+		    paintlen = actual_x(converted,
+			strnlenpt(fileptr->data, endmatch.rm_eo) -
+			start);
 
 		mvwaddnstr(edit, yval, 0, converted, paintlen);