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