diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/drawscreen.c | 26 | ||||
-rw-r--r-- | src/nvim/ex_getln.c | 5 | ||||
-rw-r--r-- | src/nvim/normal.c | 4 | ||||
-rw-r--r-- | src/nvim/terminal.c | 1 |
4 files changed, 28 insertions, 8 deletions
diff --git a/src/nvim/drawscreen.c b/src/nvim/drawscreen.c index a939038603..0961aabf21 100644 --- a/src/nvim/drawscreen.c +++ b/src/nvim/drawscreen.c @@ -679,6 +679,10 @@ int update_screen(void) updating_screen = false; + if (need_maketitle) { + maketitle(); + } + // Clear or redraw the command line. Done last, because scrolling may // mess up the command line. 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 /// /// @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; } - if ((p_icon && (stl_syntax & STL_IN_ICON)) - || (p_title && (stl_syntax & STL_IN_TITLE))) { - need_maketitle = true; - } + redraw_custom_title_later(); } curwin->w_stl_cursor = curwin->w_cursor; @@ -2773,6 +2787,10 @@ void redraw_statuslines(void) if (redraw_tabline) { draw_tabline(); } + + if (need_maketitle) { + maketitle(); + } } /// Redraw all status lines at the bottom of frame "frp". diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index 2d9d4417dd..85fbdbd20a 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -847,6 +847,10 @@ static uint8_t *command_line_enter(int firstc, int count, int indent, bool clear found_one = true; } + if (redraw_custom_title_later()) { + found_one = true; + } + if (found_one) { redraw_statuslines(); } @@ -959,6 +963,7 @@ theend: msg_ext_clear_later(); } if (!cmd_silent) { + redraw_custom_title_later(); status_redraw_all(); // redraw to show mode change } diff --git a/src/nvim/normal.c b/src/nvim/normal.c index 92a6068c5a..4d2abf1c8c 100644 --- a/src/nvim/normal.c +++ b/src/nvim/normal.c @@ -1372,10 +1372,6 @@ static void normal_redraw(NormalState *s) } } - if (need_maketitle) { - maketitle(); - } - curbuf->b_last_used = time(NULL); // Display message after redraw. If an external message is still visible, diff --git a/src/nvim/terminal.c b/src/nvim/terminal.c index b4496d6758..6d4af0fc57 100644 --- a/src/nvim/terminal.c +++ b/src/nvim/terminal.c @@ -619,6 +619,7 @@ bool terminal_enter(void) invalidate_terminal(s->term, s->term->cursor.row, s->term->cursor.row + 1); showmode(); curwin->w_redr_status = true; // For mode() in statusline. #8323 + redraw_custom_title_later(); ui_busy_start(); apply_autocmds(EVENT_TERMENTER, NULL, NULL, false, curbuf); may_trigger_modechanged(); |