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:
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