aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Hahler <git@thequod.de>2019-10-03 08:04:24 +0200
committerGitHub <noreply@github.com>2019-10-03 08:04:24 +0200
commitf96d1e6bc416fe0d1d11321234637695ff0e514e (patch)
treec9cf04d21a9fe8872dcda6e6256f455004e88872 /src
parent30479417e808eac338025dbbfbd3724e158fb344 (diff)
downloadrneovim-f96d1e6bc416fe0d1d11321234637695ff0e514e.tar.gz
rneovim-f96d1e6bc416fe0d1d11321234637695ff0e514e.tar.bz2
rneovim-f96d1e6bc416fe0d1d11321234637695ff0e514e.zip
tui: fix handling of bg response after suspend (#11145)
`tui_terminal_after_startup` gets called right after resuming from suspending (via `Ctrl-z`) already (not delayed as with the startup itself), and would set `waiting_for_bg_response` to false then directly. This results in the terminal response not being processed then anymore, and leaking into Neovim itself. This changes it to try 5 times always, which means that it typically would stop after a few characters of input from the user typically, e.g. with tmux, which does not send a reply. While it might be better to have something based on the time (e.g. only wait for max 1s), this appears to be easier to do. Fixes regression in 8a4ae3d.
Diffstat (limited to 'src')
-rw-r--r--src/nvim/tui/input.c10
-rw-r--r--src/nvim/tui/input.h2
-rw-r--r--src/nvim/tui/tui.c7
3 files changed, 9 insertions, 10 deletions
diff --git a/src/nvim/tui/input.c b/src/nvim/tui/input.c
index 876f00e03e..844bc0db40 100644
--- a/src/nvim/tui/input.c
+++ b/src/nvim/tui/input.c
@@ -27,7 +27,7 @@ void tinput_init(TermInput *input, Loop *loop)
input->loop = loop;
input->paste = 0;
input->in_fd = 0;
- input->waiting_for_bg_response = false;
+ input->waiting_for_bg_response = 0;
input->key_buffer = rbuffer_new(KEY_BUFFER_SIZE);
uv_mutex_init(&input->key_buffer_mutex);
uv_cond_init(&input->key_buffer_cond);
@@ -444,7 +444,7 @@ static void set_bg_deferred(void **argv)
// [1] https://en.wikipedia.org/wiki/Luma_%28video%29
static bool handle_background_color(TermInput *input)
{
- if (!input->waiting_for_bg_response) {
+ if (input->waiting_for_bg_response <= 0) {
return false;
}
size_t count = 0;
@@ -465,9 +465,13 @@ static bool handle_background_color(TermInput *input)
header_size = 10;
num_components = 4;
} else {
+ input->waiting_for_bg_response--;
+ if (input->waiting_for_bg_response == 0) {
+ DLOG("did not get a response for terminal background query");
+ }
return false;
}
- input->waiting_for_bg_response = false;
+ input->waiting_for_bg_response = 0;
rbuffer_consumed(input->read_stream.buffer, header_size);
RBUFFER_EACH(input->read_stream.buffer, c, i) {
count = i + 1;
diff --git a/src/nvim/tui/input.h b/src/nvim/tui/input.h
index 49ae32f00e..77bd6fa132 100644
--- a/src/nvim/tui/input.h
+++ b/src/nvim/tui/input.h
@@ -12,7 +12,7 @@ typedef struct term_input {
// Phases: -1=all 0=disabled 1=first-chunk 2=continue 3=last-chunk
int8_t paste;
bool waiting;
- bool waiting_for_bg_response;
+ int8_t waiting_for_bg_response;
TermKey *tk;
#if TERMKEY_VERSION_MAJOR > 0 || TERMKEY_VERSION_MINOR > 18
TermKey_Terminfo_Getstr_Hook *tk_ti_hook_fn; ///< libtermkey terminfo hook
diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c
index 956d4eb9da..150862bb18 100644
--- a/src/nvim/tui/tui.c
+++ b/src/nvim/tui/tui.c
@@ -296,7 +296,7 @@ static void terminfo_start(UI *ui)
unibi_out(ui, unibi_keypad_xmit);
unibi_out(ui, unibi_clear_screen);
// Ask the terminal to send us the background color.
- data->input.waiting_for_bg_response = true;
+ data->input.waiting_for_bg_response = 5;
unibi_out_ext(ui, data->unibi_ext.get_bg);
// Enable bracketed paste
unibi_out_ext(ui, data->unibi_ext.enable_bracketed_paste);
@@ -366,11 +366,6 @@ static void tui_terminal_after_startup(UI *ui)
// 2.3 bug(?) which caused slow drawing during startup. #7649
unibi_out_ext(ui, data->unibi_ext.enable_focus_reporting);
flush_buf(ui);
-
- if (data->input.waiting_for_bg_response) {
- DLOG("did not get a response for terminal background query");
- data->input.waiting_for_bg_response = false;
- }
}
static void tui_terminal_stop(UI *ui)