nano

nano with my custom patches
git clone git://bsandro.tech/nano
Log | Files | Refs | README | LICENSE

commit ca8317e82058c30b2d18f28b00d099a6dee04098
parent 1bd17c44b086a21629b587c418609e18a38463af
Author: Benno Schulenberg <bensberg@telfort.nl>
Date:   Wed,  4 Oct 2017 21:46:33 +0200

tweaks: reduce a bit of code duplication

This also removes a call of ungetch(), as it does not seem to be
needed any more: nano does not lose a character when waking from
suspension.

Diffstat:
Msrc/winio.c | 37+++++++++++++------------------------
1 file changed, 13 insertions(+), 24 deletions(-)

diff --git a/src/winio.c b/src/winio.c @@ -111,7 +111,7 @@ static bool reveal_cursor = FALSE; * buffer is empty. */ void get_key_buffer(WINDOW *win) { - int input; + int input = ERR; size_t errcount = 0; /* If the keystroke buffer isn't empty, get out. */ @@ -125,38 +125,27 @@ void get_key_buffer(WINDOW *win) if (reveal_cursor) curs_set(1); - /* Read in the first character using whatever mode we're in. */ - input = wgetch(win); + /* Read in the first keystroke using whatever mode we're in. */ + while (input == ERR) { + input = wgetch(win); #ifndef NANO_TINY - if (the_window_resized) { - ungetch(input); - regenerate_screen(); - input = KEY_WINCH; - } + if (the_window_resized) { + regenerate_screen(); + input = KEY_WINCH; + } #endif + if (input == ERR && !waiting_mode) { + curs_set(0); + return; + } - if (input == ERR && !waiting_mode) { - curs_set(0); - return; - } - - while (input == ERR) { /* If we've failed to get a character MAX_BUF_SIZE times in a row, * assume our input source is gone and die gracefully. We could * check if errno is set to EIO ("Input/output error") and die in * that case, but it's not always set properly. Argh. */ - if (++errcount == MAX_BUF_SIZE) + if (input == ERR && ++errcount == MAX_BUF_SIZE) die(_("Too many errors from stdin")); - -#ifndef NANO_TINY - if (the_window_resized) { - regenerate_screen(); - input = KEY_WINCH; - break; - } -#endif - input = wgetch(win); } curs_set(0);