nano

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

commit 3275c4e514d8bd634116cf57387af68cabe2ab68
parent 395c8e9e256b5d1308d6fbe98676523fb5934ee4
Author: Benno Schulenberg <bensberg@justemail.net>
Date:   Thu, 27 Apr 2017 21:42:36 +0200

display: initialize the colors only when starting to draw the content

This avoids https://savannah.gnu.org/bugs/?49912 while at the same time
avoiding to draw the edit window twice in a row -- the first drawing
would use a wrong margin, which results in a visible and irritating
shift left or right of the content upon the second drawing.

This fixes https://savannah.gnu.org/bugs/?50877.

Diffstat:
Msrc/color.c | 2++
Msrc/files.c | 6++----
Msrc/global.c | 5+++++
Msrc/proto.h | 4++++
Msrc/winio.c | 6++++++
5 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/src/color.c b/src/color.c @@ -132,6 +132,8 @@ void color_init(void) fprintf(stderr, "init_pair(): fg = %hd, bg = %hd\n", foreground, background); #endif } + + have_palette = TRUE; } /* Try to match the given shibboleth string with one of the regexes in diff --git a/src/files.c b/src/files.c @@ -589,8 +589,7 @@ void display_buffer(void) titlebar(NULL); #ifndef DISABLE_COLOR - /* Make sure we're using the buffer's associated colors. */ - color_init(); + have_palette = FALSE; /* If there are multiline coloring regexes, and there is no * multiline cache data yet, precalculate it now. */ @@ -599,8 +598,7 @@ void display_buffer(void) precalc_multicolorinfo(); #endif - /* Update the content of the edit window straightaway. */ - edit_refresh(); + refresh_needed = TRUE; } #ifndef DISABLE_MULTIBUFFER diff --git a/src/global.c b/src/global.c @@ -52,6 +52,11 @@ int margin = 0; int editwincols = -1; /* The number of usable columns in the edit window: COLS - margin. */ +#ifndef DISABLE_COLOR +bool have_palette = FALSE; + /* Whether the colors for the current syntax have been initialized. */ +#endif + message_type lastmessage = HUSH; /* Messages of type HUSH should not overwrite type MILD nor ALERT. */ diff --git a/src/proto.h b/src/proto.h @@ -43,6 +43,10 @@ extern bool as_an_at; extern int margin; extern int editwincols; +#ifndef DISABLE_COLOR +extern bool have_palette; +#endif + extern message_type lastmessage; extern filestruct *pletion_line; diff --git a/src/winio.c b/src/winio.c @@ -3054,6 +3054,12 @@ void edit_refresh(void) filestruct *line; int row = 0; +#ifndef DISABLE_COLOR + /* When needed, initialize the colors for the current syntax. */ + if (!have_palette) + color_init(); +#endif + /* If the current line is out of view, get it back on screen. */ if (current_is_offscreen()) { #ifdef DEBUG