commit e6a92b14067de0638429ec8fc58cd6934641f09f
parent ab14df074fb374d43584a01ff5ab20b71e9e16cb
Author: Benno Schulenberg <bensberg@telfort.nl>
Date: Sun, 12 Nov 2017 12:20:49 +0100
painting: evade an ncurses bug by adding the A_PROTECT attribute
Adding the obscure A_PROTECT attribute to every color prevents an
occasional miscoloring of the first few rows on the screen -- when
ncurses is version 6.0 and dates from before October 17, 2015.
Original-idea-by: Brand Huntsman <alpha@qzx.com>
Tested-by: Brand Huntsman <alpha@qzx.com>
This fixes https://savannah.gnu.org/bugs/?52182.
Diffstat:
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/src/color.c b/src/color.c
@@ -30,6 +30,15 @@
#ifdef ENABLE_COLOR
+/* For early versions of ncurses-6.0, use an additional A_PROTECT attribute
+ * for all colors, in order to work around an ncurses miscoloring bug. */
+#if defined(NCURSES_VERSION_MAJOR) && (NCURSES_VERSION_MAJOR == 6) && \
+ (NCURSES_VERSION_MINOR == 0) && (NCURSES_VERSION_PATCH < 20151017)
+#define A_BANDAID A_PROTECT
+#else
+#define A_BANDAID A_NORMAL
+#endif
+
/* Initialize the colors for nano's interface, and assign pair numbers
* for the colors in each syntax. */
void set_colorpairs(void)
@@ -59,8 +68,8 @@ void set_colorpairs(void)
if (background == -1 && !using_defaults)
background = COLOR_BLACK;
init_pair(i + 1, foreground, background);
- interface_color_pair[i] =
- COLOR_PAIR(i + 1) | (bright ? A_BOLD : A_NORMAL);
+ interface_color_pair[i] = COLOR_PAIR(i + 1) | A_BANDAID |
+ (bright ? A_BOLD : A_NORMAL);
} else {
if (i != FUNCTION_TAG)
interface_color_pair[i] = hilite_attribute;
@@ -91,7 +100,7 @@ void set_colorpairs(void)
else
ink->pairnum = new_number++;
- ink->attributes = COLOR_PAIR(ink->pairnum) |
+ ink->attributes = COLOR_PAIR(ink->pairnum) | A_BANDAID |
(ink->bright ? A_BOLD : A_NORMAL);
}
}