diff --git a/src/color.c b/src/color.c index 30cab76c..3eb41141 100644 --- 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 index bfa74d9d..624771c5 100644 --- 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 index db57654f..87a5c554 100644 --- 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 index c18f8422..57e180ac 100644 --- 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 index d9ef0d09..b5187547 100644 --- 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