nano

nano with my custom patches
git clone git://bsandro.tech/nano
Log | Files | Refs | README | LICENSE

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:
Msrc/color.c | 15++++++++++++---
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); } }