mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
fix(ui): update title in more cases (#31508)
This commit is contained in:
parent
98694c3675
commit
d1fd674df3
@ -679,6 +679,10 @@ int update_screen(void)
|
|||||||
|
|
||||||
updating_screen = false;
|
updating_screen = false;
|
||||||
|
|
||||||
|
if (need_maketitle) {
|
||||||
|
maketitle();
|
||||||
|
}
|
||||||
|
|
||||||
// Clear or redraw the command line. Done last, because scrolling may
|
// Clear or redraw the command line. Done last, because scrolling may
|
||||||
// mess up the command line.
|
// mess up the command line.
|
||||||
if (clear_cmdline || redraw_cmdline || redraw_mode) {
|
if (clear_cmdline || redraw_cmdline || redraw_mode) {
|
||||||
@ -856,6 +860,19 @@ void setcursor_mayforce(win_T *wp, bool force)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Mark the title and icon for redraw if either of them uses statusline format.
|
||||||
|
///
|
||||||
|
/// @return whether either title or icon uses statusline format.
|
||||||
|
bool redraw_custom_title_later(void)
|
||||||
|
{
|
||||||
|
if ((p_icon && (stl_syntax & STL_IN_ICON))
|
||||||
|
|| (p_title && (stl_syntax & STL_IN_TITLE))) {
|
||||||
|
need_maketitle = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/// Show current cursor info in ruler and various other places
|
/// Show current cursor info in ruler and various other places
|
||||||
///
|
///
|
||||||
/// @param always if false, only show ruler if position has changed.
|
/// @param always if false, only show ruler if position has changed.
|
||||||
@ -889,10 +906,7 @@ void show_cursor_info_later(bool force)
|
|||||||
curwin->w_redr_status = true;
|
curwin->w_redr_status = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((p_icon && (stl_syntax & STL_IN_ICON))
|
redraw_custom_title_later();
|
||||||
|| (p_title && (stl_syntax & STL_IN_TITLE))) {
|
|
||||||
need_maketitle = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
curwin->w_stl_cursor = curwin->w_cursor;
|
curwin->w_stl_cursor = curwin->w_cursor;
|
||||||
@ -2773,6 +2787,10 @@ void redraw_statuslines(void)
|
|||||||
if (redraw_tabline) {
|
if (redraw_tabline) {
|
||||||
draw_tabline();
|
draw_tabline();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (need_maketitle) {
|
||||||
|
maketitle();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Redraw all status lines at the bottom of frame "frp".
|
/// Redraw all status lines at the bottom of frame "frp".
|
||||||
|
@ -847,6 +847,10 @@ static uint8_t *command_line_enter(int firstc, int count, int indent, bool clear
|
|||||||
found_one = true;
|
found_one = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (redraw_custom_title_later()) {
|
||||||
|
found_one = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (found_one) {
|
if (found_one) {
|
||||||
redraw_statuslines();
|
redraw_statuslines();
|
||||||
}
|
}
|
||||||
@ -959,6 +963,7 @@ theend:
|
|||||||
msg_ext_clear_later();
|
msg_ext_clear_later();
|
||||||
}
|
}
|
||||||
if (!cmd_silent) {
|
if (!cmd_silent) {
|
||||||
|
redraw_custom_title_later();
|
||||||
status_redraw_all(); // redraw to show mode change
|
status_redraw_all(); // redraw to show mode change
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1372,10 +1372,6 @@ static void normal_redraw(NormalState *s)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (need_maketitle) {
|
|
||||||
maketitle();
|
|
||||||
}
|
|
||||||
|
|
||||||
curbuf->b_last_used = time(NULL);
|
curbuf->b_last_used = time(NULL);
|
||||||
|
|
||||||
// Display message after redraw. If an external message is still visible,
|
// Display message after redraw. If an external message is still visible,
|
||||||
|
@ -619,6 +619,7 @@ bool terminal_enter(void)
|
|||||||
invalidate_terminal(s->term, s->term->cursor.row, s->term->cursor.row + 1);
|
invalidate_terminal(s->term, s->term->cursor.row, s->term->cursor.row + 1);
|
||||||
showmode();
|
showmode();
|
||||||
curwin->w_redr_status = true; // For mode() in statusline. #8323
|
curwin->w_redr_status = true; // For mode() in statusline. #8323
|
||||||
|
redraw_custom_title_later();
|
||||||
ui_busy_start();
|
ui_busy_start();
|
||||||
apply_autocmds(EVENT_TERMENTER, NULL, NULL, false, curbuf);
|
apply_autocmds(EVENT_TERMENTER, NULL, NULL, false, curbuf);
|
||||||
may_trigger_modechanged();
|
may_trigger_modechanged();
|
||||||
|
@ -37,6 +37,63 @@ describe('title', function()
|
|||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('is updated in Insert mode', function()
|
||||||
|
api.nvim_set_option_value('title', true, {})
|
||||||
|
screen:expect(function()
|
||||||
|
eq('[No Name] - Nvim', screen.title)
|
||||||
|
end)
|
||||||
|
feed('ifoo')
|
||||||
|
screen:expect(function()
|
||||||
|
eq('[No Name] + - Nvim', screen.title)
|
||||||
|
end)
|
||||||
|
feed('<Esc>')
|
||||||
|
api.nvim_set_option_value('titlestring', '%m %f (%{mode(1)}) | nvim', {})
|
||||||
|
screen:expect(function()
|
||||||
|
eq('[+] [No Name] (n) | nvim', screen.title)
|
||||||
|
end)
|
||||||
|
feed('i')
|
||||||
|
screen:expect(function()
|
||||||
|
eq('[+] [No Name] (i) | nvim', screen.title)
|
||||||
|
end)
|
||||||
|
feed('<Esc>')
|
||||||
|
screen:expect(function()
|
||||||
|
eq('[+] [No Name] (n) | nvim', screen.title)
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('is updated in Cmdline mode', function()
|
||||||
|
api.nvim_set_option_value('title', true, {})
|
||||||
|
api.nvim_set_option_value('titlestring', '%f (%{mode(1)}) | nvim', {})
|
||||||
|
screen:expect(function()
|
||||||
|
eq('[No Name] (n) | nvim', screen.title)
|
||||||
|
end)
|
||||||
|
feed(':')
|
||||||
|
screen:expect(function()
|
||||||
|
eq('[No Name] (c) | nvim', screen.title)
|
||||||
|
end)
|
||||||
|
feed('<Esc>')
|
||||||
|
screen:expect(function()
|
||||||
|
eq('[No Name] (n) | nvim', screen.title)
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('is updated in Terminal mode', function()
|
||||||
|
api.nvim_set_option_value('title', true, {})
|
||||||
|
api.nvim_set_option_value('titlestring', '(%{mode(1)}) | nvim', {})
|
||||||
|
fn.termopen({ n.testprg('shell-test'), 'INTERACT' })
|
||||||
|
screen:expect(function()
|
||||||
|
eq('(nt) | nvim', screen.title)
|
||||||
|
end)
|
||||||
|
feed('i')
|
||||||
|
screen:expect(function()
|
||||||
|
eq('(t) | nvim', screen.title)
|
||||||
|
end)
|
||||||
|
feed([[<C-\><C-N>]])
|
||||||
|
screen:expect(function()
|
||||||
|
eq('(nt) | nvim', screen.title)
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
|
||||||
describe('is not changed by', function()
|
describe('is not changed by', function()
|
||||||
local file1 = is_os('win') and 'C:\\mydir\\myfile1' or '/mydir/myfile1'
|
local file1 = is_os('win') and 'C:\\mydir\\myfile1' or '/mydir/myfile1'
|
||||||
local file2 = is_os('win') and 'C:\\mydir\\myfile2' or '/mydir/myfile2'
|
local file2 = is_os('win') and 'C:\\mydir\\myfile2' or '/mydir/myfile2'
|
||||||
|
Loading…
Reference in New Issue
Block a user