diff --git a/runtime/doc/news.txt b/runtime/doc/news.txt index 81df75ad6c..4af8dd6716 100644 --- a/runtime/doc/news.txt +++ b/runtime/doc/news.txt @@ -394,6 +394,8 @@ TUI sequence. • The TUI now renders the SGR dim (faint), blink, conceal, and overline attributes. +• The TUI will re-query the terminal's background color when resuming from + a suspended state, and Nvim will update 'background' accordingly. UI diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c index 1cdcf59fec..8eea4fb5b5 100644 --- a/src/nvim/tui/tui.c +++ b/src/nvim/tui/tui.c @@ -337,14 +337,20 @@ static void tui_reset_key_encoding(TUIData *tui) } } +static void tui_query_bg_color_noflush(TUIData *tui) + FUNC_ATTR_NONNULL_ALL +{ + out(tui, S_LEN("\x1b]11;?\x07\x1b[5n")); +} + /// Write the OSC 11 + DSR sequence to the terminal emulator to query the current -/// background color. +/// background color, and flush the terminal. /// /// Response will be handled by the TermResponse handler in _core/defaults.lua. void tui_query_bg_color(TUIData *tui) FUNC_ATTR_NONNULL_ALL { - out(tui, S_LEN("\x1b]11;?\x07\x1b[5n")); + tui_query_bg_color_noflush(tui); flush_buf(tui); } @@ -483,6 +489,11 @@ static void terminfo_start(TUIData *tui) // Query the terminal to see if it supports Kitty's keyboard protocol tui_query_kitty_keyboard(tui); + // Query the terminal's background color. We normally get it via continuous reporting (set via + // `kTermModeThemeUpdates` above), but if we were backgrounded while the light/dark mode changed, + // we won't have received the report, so we also query it on resume. + tui_query_bg_color_noflush(tui); + int ret; uv_loop_init(&tui->write_loop); if (tui->out_isatty) {