Skip output synchronization query when explicitly disabled

Some terminals misbehave when queried for output synchronization support,
such as Windows Terminal as reported in

  https://github.com/mawww/kakoune/issues/5032

The relatively long response from a terminal which does support output-sync
is also prone to getting torn over a slow link such as a serial console,
causing stray input to the editor.

In ui_options, the terminal_synchronized option controls the use of this
feature, but unfortunately the query is unconditionally sent at startup
even when this is set false.

Skip the query at startup when terminal_synchronized is explicitly false.

We query at most once per terminal in set_ui_options so the behaviour
is correct both when kakoune is started with terminal_synchronized unset
and when it is started with terminal_synchronized set false but this is
later unset.
This commit is contained in:
Chris Webb 2023-11-24 12:55:45 +00:00
parent 990e92a5f3
commit 32680e5d65
2 changed files with 5 additions and 1 deletions

View File

@ -1472,7 +1472,6 @@ void TerminalUI::setup_terminal()
"\033[22t" // save the current window title "\033[22t" // save the current window title
"\033[?25l" // hide cursor "\033[?25l" // hide cursor
"\033=" // set application keypad mode, so the keypad keys send unique codes "\033=" // set application keypad mode, so the keypad keys send unique codes
"\033[?2026$p" // query support for synchronize output
"\033[?2004h" // force enable bracketed-paste events "\033[?2004h" // force enable bracketed-paste events
); );
} }
@ -1542,6 +1541,10 @@ void TerminalUI::set_ui_options(const Options& options)
auto synchronized = find("terminal_synchronized").map(to_bool); auto synchronized = find("terminal_synchronized").map(to_bool);
m_synchronized.set = (bool)synchronized; m_synchronized.set = (bool)synchronized;
m_synchronized.requested = synchronized.value_or(false); m_synchronized.requested = synchronized.value_or(false);
if (not m_synchronized.queried and not m_synchronized.set) {
write(STDOUT_FILENO, "\033[?2026$p");
m_synchronized.queried = true;
}
m_shift_function_key = find("terminal_shift_function_key").map(str_to_int_ifp).value_or(default_shift_function_key); m_shift_function_key = find("terminal_shift_function_key").map(str_to_int_ifp).value_or(default_shift_function_key);

View File

@ -157,6 +157,7 @@ private:
struct Synchronized struct Synchronized
{ {
bool queried : 1;
bool supported : 1; bool supported : 1;
bool set : 1; bool set : 1;
bool requested : 1; bool requested : 1;