nano-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Nano-devel] [PATCH] display: initialize the colors only when starting t


From: Benno Schulenberg
Subject: [Nano-devel] [PATCH] display: initialize the colors only when starting to draw the content
Date: Thu, 27 Apr 2017 21:58:52 +0200

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.
---
 src/color.c  | 2 ++
 src/files.c  | 6 ++----
 src/global.c | 5 +++++
 src/proto.h  | 4 ++++
 src/winio.c  | 6 ++++++
 5 files changed, 19 insertions(+), 4 deletions(-)

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..821beda6 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 = TRUE;
+       /* 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 e6c39cee..e9f63f24 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 9d747b49..972ad565 100644
--- a/src/winio.c
+++ b/src/winio.c
@@ -3064,6 +3064,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
-- 
2.12.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]