From: Richard Russon Date: Fri, 27 Sep 2019 23:09:17 +0000 (+0100) Subject: refactor: clearok() to mutt_window_clear_screen() X-Git-Tag: 2019-10-25~30^2~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=82e89dcefaa2689fa469f313f398c8bccc214140;p=neomutt refactor: clearok() to mutt_window_clear_screen() Encapsulate a curses function to reduce dependencies. --- diff --git a/curs_lib.c b/curs_lib.c index 714268112..797323fc3 100644 --- a/curs_lib.c +++ b/curs_lib.c @@ -127,7 +127,7 @@ void mutt_refresh(void) void mutt_need_hard_redraw(void) { keypad(stdscr, true); - clearok(stdscr, true); + mutt_window_clear_screen(); mutt_menu_set_current_redraw_full(); } @@ -268,7 +268,7 @@ int mutt_get_field_full(const char *field, char *buf, size_t buflen, CompletionF { SigWinch = 0; mutt_resize_screen(); - clearok(stdscr, true); + mutt_window_clear_screen(); mutt_menu_current_redraw(); } mutt_window_clearline(MuttMessageWindow, 0); @@ -329,7 +329,7 @@ void mutt_edit_file(const char *editor, const char *file) /* the terminal may have been resized while the editor owned it */ mutt_resize_screen(); keypad(stdscr, true); - clearok(stdscr, true); + mutt_window_clear_screen(); mutt_buffer_pool_release(&cmd); } @@ -381,7 +381,7 @@ enum QuadOption mutt_yesorno(const char *msg, enum QuadOption def) { SigWinch = 0; mutt_resize_screen(); - clearok(stdscr, true); + mutt_window_clear_screen(); mutt_menu_current_redraw(); } if (MuttMessageWindow->cols) @@ -845,7 +845,7 @@ int mutt_multi_choice(const char *prompt, const char *letters) { SigWinch = 0; mutt_resize_screen(); - clearok(stdscr, true); + mutt_window_clear_screen(); mutt_menu_current_redraw(); } if (MuttMessageWindow->cols) diff --git a/enter.c b/enter.c index 175080106..0c86de0e8 100644 --- a/enter.c +++ b/enter.c @@ -153,7 +153,7 @@ int mutt_enter_string(char *buf, size_t buflen, int col, CompletionFlags flags) { SigWinch = 0; mutt_resize_screen(); - clearok(stdscr, true); + mutt_window_clear_screen(); } rc = mutt_enter_string_full(buf, buflen, col, flags, false, NULL, NULL, es); } while (rc == 1); diff --git a/index.c b/index.c index c59d2a51e..226c0cb4f 100644 --- a/index.c +++ b/index.c @@ -851,6 +851,9 @@ int index_color(int line) */ void mutt_draw_statusline(int cols, const char *buf, size_t buflen) { + if (!buf) + return; + size_t i = 0; size_t offset = 0; bool found = false; @@ -864,9 +867,6 @@ void mutt_draw_statusline(int cols, const char *buf, size_t buflen) int last; } *syntax = NULL; - if (!buf || !stdscr) - return; - do { struct ColorLine *cl = NULL; @@ -1239,7 +1239,7 @@ int mutt_index_menu(void) menu->top = 0; /* so we scroll the right amount */ /* force a real complete redraw. clrtobot() doesn't seem to be able * to handle every case without this. */ - clearok(stdscr, true); + mutt_window_clear_screen(); continue; } @@ -1745,7 +1745,7 @@ int mutt_index_menu(void) break; case OP_REDRAW: - clearok(stdscr, true); + mutt_window_clear_screen(); menu->redraw = REDRAW_FULL; break; diff --git a/menu.c b/menu.c index 397a02160..822b484d5 100644 --- a/menu.c +++ b/menu.c @@ -358,9 +358,7 @@ static void menu_pad_string(struct Menu *menu, char *buf, size_t buflen) void menu_redraw_full(struct Menu *menu) { mutt_curses_set_color(MT_COLOR_NORMAL); - /* clear() doesn't optimize screen redraws */ - mutt_window_move_abs(0, 0); - mutt_window_clrtobot(); + mutt_window_clear_screen(); if (C_Help) { @@ -1082,8 +1080,7 @@ void mutt_menu_pop_current(struct Menu *menu) else { CurrentMenu = MENU_MAIN; - mutt_window_move_abs(0, 0); - mutt_window_clrtobot(); + mutt_window_clear_screen(); } } @@ -1435,7 +1432,7 @@ int mutt_menu_loop(struct Menu *menu) { mutt_resize_screen(); SigWinch = 0; - clearok(stdscr, true); /* force complete redraw */ + mutt_window_clear_screen(); } if (i < 0) @@ -1571,7 +1568,7 @@ int mutt_menu_loop(struct Menu *menu) break; case OP_REDRAW: - clearok(stdscr, true); + mutt_window_clear_screen(); menu->redraw = REDRAW_FULL; break; diff --git a/mutt_window.c b/mutt_window.c index e0e4c3c20..909aaf8c0 100644 --- a/mutt_window.c +++ b/mutt_window.c @@ -28,6 +28,7 @@ #include "config.h" #include +#include #include #include "mutt/mutt.h" #include "mutt_window.h" @@ -431,3 +432,11 @@ int mutt_window_printf(const char *fmt, ...) return rc; } + +/** + * mutt_window_clear_screen - Clear the entire screen + */ +void mutt_window_clear_screen(void) +{ + clearok(stdscr, true); +} diff --git a/mutt_window.h b/mutt_window.h index ac3c0e6ee..05345164f 100644 --- a/mutt_window.h +++ b/mutt_window.h @@ -61,6 +61,7 @@ int mutt_window_wrap_cols (int width, short wrap); int mutt_window_addch (int ch); int mutt_window_addnstr (const char *str, int num); int mutt_window_addstr (const char *str); +void mutt_window_clear_screen(void); void mutt_window_clearline(struct MuttWindow *win, int row); void mutt_window_clrtobot (void); void mutt_window_clrtoeol (struct MuttWindow *win); diff --git a/pager.c b/pager.c index 5c63186ed..fd9770731 100644 --- a/pager.c +++ b/pager.c @@ -1942,9 +1942,7 @@ static void pager_custom_redraw(struct Menu *pager_menu) if (pager_menu->redraw & REDRAW_FULL) { mutt_curses_set_color(MT_COLOR_NORMAL); - /* clear() doesn't optimize screen redraws */ - mutt_window_move_abs(0, 0); - mutt_window_clrtobot(); + mutt_window_clear_screen(); if (IsEmail(rd->extra) && Context && ((Context->mailbox->vcount + 1) < C_PagerIndexLines)) rd->indexlen = Context->mailbox->vcount + 1; @@ -2460,7 +2458,7 @@ int mutt_pager(const char *banner, const char *fname, PagerFlags flags, struct P { SigWinch = 0; mutt_resize_screen(); - clearok(stdscr, true); /* force complete redraw */ + mutt_window_clear_screen(); if (flags & MUTT_PAGER_RETWINCH) { @@ -2929,7 +2927,7 @@ int mutt_pager(const char *banner, const char *fname, PagerFlags flags, struct P break; case OP_REDRAW: - clearok(stdscr, true); + mutt_window_clear_screen(); pager_menu->redraw = REDRAW_FULL; break;