diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-05-19 07:30:22 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-19 07:30:22 +0800 |
commit | 3ae62c470634e30c55d822c452af135fee50ddd5 (patch) | |
tree | eb6e3597d857e35401c955efdb1502e788b50980 | |
parent | 24b60b0f71e0ffbd09c827230ecb5a37e833cade (diff) | |
download | rneovim-3ae62c470634e30c55d822c452af135fee50ddd5.tar.gz rneovim-3ae62c470634e30c55d822c452af135fee50ddd5.tar.bz2 rneovim-3ae62c470634e30c55d822c452af135fee50ddd5.zip |
fix(tui): make disabling title restore old title from stack (#23585)
This makes setting 'notitle' in Nvim behave more like Vim in terminals
that support title stacking.
-rw-r--r-- | src/nvim/tui/tui.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c index 2de1467511..6a9769e351 100644 --- a/src/nvim/tui/tui.c +++ b/src/nvim/tui/tui.c @@ -106,6 +106,7 @@ struct TUIData { bool bce; bool mouse_enabled; bool mouse_move_enabled; + bool title_enabled; bool busy, is_invisible, want_invisible; bool cork, overflow; bool set_cursor_color_as_str; @@ -325,8 +326,6 @@ static void terminfo_start(TUIData *tui) // Enter alternate screen, save title, and clear. // NOTE: Do this *before* changing terminal settings. #6433 unibi_out(tui, unibi_enter_ca_mode); - // Save title/icon to the "stack". #4063 - unibi_out_ext(tui, tui->unibi_ext.save_title); unibi_out(tui, unibi_keypad_xmit); unibi_out(tui, unibi_clear_screen); // Ask the terminal to send us the background color. @@ -383,8 +382,7 @@ static void terminfo_stop(TUIData *tui) // Disable extended keys before exiting alternate screen. unibi_out_ext(tui, tui->unibi_ext.disable_extended_keys); unibi_out(tui, unibi_exit_ca_mode); - // Restore title/icon from the "stack". #4063 - unibi_out_ext(tui, tui->unibi_ext.restore_title); + tui_set_title(tui, (String)STRING_INIT); if (tui->cursor_color_changed) { unibi_out_ext(tui, tui->unibi_ext.reset_cursor_color); } @@ -1361,13 +1359,24 @@ void tui_suspend(TUIData *tui) void tui_set_title(TUIData *tui, String title) { - if (!(title.data && unibi_get_str(tui->ut, unibi_to_status_line) + if (!(unibi_get_str(tui->ut, unibi_to_status_line) && unibi_get_str(tui->ut, unibi_from_status_line))) { return; } - unibi_out(tui, unibi_to_status_line); - out(tui, title.data, title.size); - unibi_out(tui, unibi_from_status_line); + if (title.size > 0) { + if (!tui->title_enabled) { + // Save title/icon to the "stack". #4063 + unibi_out_ext(tui, tui->unibi_ext.save_title); + tui->title_enabled = true; + } + unibi_out(tui, unibi_to_status_line); + out(tui, title.data, title.size); + unibi_out(tui, unibi_from_status_line); + } else if (tui->title_enabled) { + // Restore title/icon from the "stack". #4063 + unibi_out_ext(tui, tui->unibi_ext.restore_title); + tui->title_enabled = false; + } } void tui_set_icon(TUIData *tui, String icon) |