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.
This commit is contained in:
zeertzjq
2023-05-11 13:04:25 +08:00
parent c9f47fca8b
commit c0bce603d3

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;
} }
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); unibi_out(tui, unibi_to_status_line);
out(tui, title.data, title.size); out(tui, title.data, title.size);
unibi_out(tui, unibi_from_status_line); 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)