fix(tui): make disabling title restore old title from stack

This makes setting 'notitle' in Nvim behave more like Vim in terminals
that support title stacking.

(cherry picked from commit c0bce603d3)
This commit is contained in:
zeertzjq
2023-05-11 13:04:25 +08:00
committed by github-actions[bot]
parent 59e63b455b
commit 3ea6c5e7ba

View File

@@ -106,6 +106,7 @@ struct TUIData {
bool bce; bool bce;
bool mouse_enabled; bool mouse_enabled;
bool mouse_move_enabled; bool mouse_move_enabled;
bool title_enabled;
bool busy, is_invisible, want_invisible; bool busy, is_invisible, want_invisible;
bool cork, overflow; bool cork, overflow;
bool set_cursor_color_as_str; bool set_cursor_color_as_str;
@@ -325,8 +326,6 @@ static void terminfo_start(TUIData *tui)
// Enter alternate screen, save title, and clear. // Enter alternate screen, save title, and clear.
// NOTE: Do this *before* changing terminal settings. #6433 // NOTE: Do this *before* changing terminal settings. #6433
unibi_out(tui, unibi_enter_ca_mode); 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_keypad_xmit);
unibi_out(tui, unibi_clear_screen); unibi_out(tui, unibi_clear_screen);
// Ask the terminal to send us the background color. // 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. // Disable extended keys before exiting alternate screen.
unibi_out_ext(tui, tui->unibi_ext.disable_extended_keys); unibi_out_ext(tui, tui->unibi_ext.disable_extended_keys);
unibi_out(tui, unibi_exit_ca_mode); unibi_out(tui, unibi_exit_ca_mode);
// Restore title/icon from the "stack". #4063 tui_set_title(tui, (String)STRING_INIT);
unibi_out_ext(tui, tui->unibi_ext.restore_title);
if (tui->cursor_color_changed) { if (tui->cursor_color_changed) {
unibi_out_ext(tui, tui->unibi_ext.reset_cursor_color); 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) 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))) { && unibi_get_str(tui->ut, unibi_from_status_line))) {
return; return;
} }
unibi_out(tui, unibi_to_status_line); if (title.size > 0) {
out(tui, title.data, title.size); if (!tui->title_enabled) {
unibi_out(tui, unibi_from_status_line); // 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) void tui_set_icon(TUIData *tui, String icon)