From 2789bb0813376caf59da7f80b83c3db28c0fc370 Mon Sep 17 00:00:00 2001 From: Benno Schulenberg <bensberg@justemail.net> Date: Fri, 21 Oct 2016 13:52:40 +0200 Subject: [PATCH] screen: repaint the edit window in a single place -- the main loop Instead of doing this in two places: after interpreting shortcuts, and after injecting characters. --- src/files.c | 3 +-- src/nano.c | 27 +++++++++++---------------- src/winio.c | 3 +++ 3 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/files.c b/src/files.c index 0f4a961f..f38cd984 100644 --- a/src/files.c +++ b/src/files.c @@ -567,8 +567,7 @@ void display_buffer(void) precalc_multicolorinfo(); #endif - /* Update the edit window. */ - edit_refresh(); + refresh_needed = TRUE; } #ifndef DISABLE_MULTIBUFFER diff --git a/src/nano.c b/src/nano.c index a4f43c42..8944909d 100644 --- a/src/nano.c +++ b/src/nano.c @@ -1428,7 +1428,7 @@ void do_toggle(int flag) case LINE_NUMBERS: #endif case SOFTWRAP: - edit_refresh(); + refresh_needed = TRUE; break; } @@ -1733,13 +1733,7 @@ int do_input(bool allow_funcs) if (f && !f->viewok) reset_multis(openfile->current, FALSE); #endif - if (refresh_needed) { -#ifdef DEBUG - fprintf(stderr, "running edit_refresh() as refresh_needed is true\n"); -#endif - edit_refresh(); - refresh_needed = FALSE; - } else if (s->scfunc == do_delete || s->scfunc == do_backspace) + if (!refresh_needed && (s->scfunc == do_delete || s->scfunc == do_backspace)) update_line(openfile->current, openfile->current_x); } } @@ -1956,10 +1950,7 @@ void do_output(char *output, size_t output_len, bool allow_cntrls) reset_multis(openfile->current, FALSE); #endif - if (refresh_needed == TRUE) { - edit_refresh(); - refresh_needed = FALSE; - } else + if (!refresh_needed) update_line(openfile->current, openfile->current_x); } @@ -2718,10 +2709,14 @@ int main(int argc, char **argv) /* Forget any earlier statusbar x position. */ reinit_statusbar_x(); - /* Place the cursor in the edit window and make it visible. */ - reset_cursor(); - curs_set(1); - wnoutrefresh(edit); + /* Refresh either the entire edit window or just the cursor. */ + if (refresh_needed) + edit_refresh(); + else { + reset_cursor(); + curs_set(1); + wnoutrefresh(edit); + } /* Read in and interpret keystrokes. */ do_input(TRUE); diff --git a/src/winio.c b/src/winio.c index 73c367c0..61681f4e 100644 --- a/src/winio.c +++ b/src/winio.c @@ -2978,7 +2978,10 @@ void edit_refresh(void) blank_line(edit, nlines, 0, COLS); reset_cursor(); + curs_set(1); wnoutrefresh(edit); + + refresh_needed = FALSE; } /* Move edittop so that current is on the screen. manner says how it -- GitLab