mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 8.1.0840: getchar(0) never returns a character in the terminal
Problem: getchar(0) never returns a character in the terminal. Solution: Call wait_func() at least once.
This commit is contained in:
8
src/ui.c
8
src/ui.c
@@ -272,6 +272,7 @@ inchar_loop(
|
||||
{
|
||||
int len;
|
||||
int interrupted = FALSE;
|
||||
int did_call_wait_func = FALSE;
|
||||
int did_start_blocking = FALSE;
|
||||
long wait_time;
|
||||
long elapsed_time = 0;
|
||||
@@ -313,7 +314,11 @@ inchar_loop(
|
||||
elapsed_time = ELAPSED_FUNC(start_tv);
|
||||
#endif
|
||||
wait_time -= elapsed_time;
|
||||
if (wait_time <= 0)
|
||||
|
||||
// If the waiting time is now zero or less, we timed out. However,
|
||||
// loop at least once to check for characters and events. Matters
|
||||
// when "wtime" is zero.
|
||||
if (wait_time <= 0 && did_call_wait_func)
|
||||
{
|
||||
if (wtime >= 0)
|
||||
// no character available within "wtime"
|
||||
@@ -374,6 +379,7 @@ inchar_loop(
|
||||
|
||||
// Wait for a character to be typed or another event, such as the winch
|
||||
// signal or an event on the monitored file descriptors.
|
||||
did_call_wait_func = TRUE;
|
||||
if (wait_func(wait_time, &interrupted, FALSE))
|
||||
{
|
||||
// If input was put directly in typeahead buffer bail out here.
|
||||
|
Reference in New Issue
Block a user