mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge pull request #22590 from bfredl/status2
refactor(redraw): make cursor position use the "redraw later" pattern
This commit is contained in:
commit
e5f4394eb7
@ -728,19 +728,15 @@ static void win_redr_border(win_T *wp)
|
|||||||
/// 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.
|
||||||
void show_cursor_info(bool always)
|
void show_cursor_info_later(bool force)
|
||||||
{
|
{
|
||||||
if (!always && !redrawing()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int state = get_real_state();
|
int state = get_real_state();
|
||||||
int empty_line = (State & MODE_INSERT) == 0
|
int empty_line = (State & MODE_INSERT) == 0
|
||||||
&& *ml_get_buf(curwin->w_buffer, curwin->w_cursor.lnum, false) == NUL;
|
&& *ml_get_buf(curwin->w_buffer, curwin->w_cursor.lnum, false) == NUL;
|
||||||
|
|
||||||
// Only draw when something changed.
|
// Only draw when something changed.
|
||||||
validate_virtcol_win(curwin);
|
validate_virtcol_win(curwin);
|
||||||
if (always
|
if (force
|
||||||
|| curwin->w_cursor.lnum != curwin->w_stl_cursor.lnum
|
|| curwin->w_cursor.lnum != curwin->w_stl_cursor.lnum
|
||||||
|| curwin->w_cursor.col != curwin->w_stl_cursor.col
|
|| curwin->w_cursor.col != curwin->w_stl_cursor.col
|
||||||
|| curwin->w_virtcol != curwin->w_stl_virtcol
|
|| curwin->w_virtcol != curwin->w_stl_virtcol
|
||||||
@ -750,27 +746,19 @@ void show_cursor_info(bool always)
|
|||||||
|| curwin->w_topfill != curwin->w_stl_topfill
|
|| curwin->w_topfill != curwin->w_stl_topfill
|
||||||
|| empty_line != curwin->w_stl_empty
|
|| empty_line != curwin->w_stl_empty
|
||||||
|| state != curwin->w_stl_state) {
|
|| state != curwin->w_stl_state) {
|
||||||
win_check_ns_hl(curwin);
|
if ((curwin->w_status_height || global_stl_height())) {
|
||||||
if ((*p_stl != NUL || *curwin->w_p_stl != NUL)
|
curwin->w_redr_status = true;
|
||||||
&& (curwin->w_status_height || global_stl_height())) {
|
|
||||||
redraw_custom_statusline(curwin);
|
|
||||||
} else {
|
} else {
|
||||||
win_redr_ruler(curwin);
|
redraw_cmdline = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*p_wbr != NUL || *curwin->w_p_wbr != NUL) {
|
if (*p_wbr != NUL || *curwin->w_p_wbr != NUL) {
|
||||||
win_redr_winbar(curwin);
|
curwin->w_redr_status = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (need_maketitle
|
if ((p_icon && (stl_syntax & STL_IN_ICON))
|
||||||
|| (p_icon && (stl_syntax & STL_IN_ICON))
|
|
||||||
|| (p_title && (stl_syntax & STL_IN_TITLE))) {
|
|| (p_title && (stl_syntax & STL_IN_TITLE))) {
|
||||||
maketitle();
|
need_maketitle = true;
|
||||||
}
|
|
||||||
|
|
||||||
win_check_ns_hl(NULL);
|
|
||||||
// Redraw the tab pages line if needed.
|
|
||||||
if (redraw_tabline) {
|
|
||||||
draw_tabline();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2136,7 +2124,7 @@ void status_redraw_all(void)
|
|||||||
bool is_stl_global = global_stl_height() != 0;
|
bool is_stl_global = global_stl_height() != 0;
|
||||||
|
|
||||||
FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
|
FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
|
||||||
if ((!is_stl_global && wp->w_status_height) || (is_stl_global && wp == curwin)
|
if ((!is_stl_global && wp->w_status_height) || wp == curwin
|
||||||
|| wp->w_winbar_height) {
|
|| wp->w_winbar_height) {
|
||||||
wp->w_redr_status = true;
|
wp->w_redr_status = true;
|
||||||
redraw_later(wp, UPD_VALID);
|
redraw_later(wp, UPD_VALID);
|
||||||
|
@ -1350,12 +1350,15 @@ void ins_redraw(bool ready)
|
|||||||
}
|
}
|
||||||
|
|
||||||
pum_check_clear();
|
pum_check_clear();
|
||||||
|
show_cursor_info_later(false);
|
||||||
if (must_redraw) {
|
if (must_redraw) {
|
||||||
update_screen();
|
update_screen();
|
||||||
} else if (clear_cmdline || redraw_cmdline) {
|
} else {
|
||||||
showmode(); // clear cmdline and show mode
|
redraw_statuslines();
|
||||||
|
if (clear_cmdline || redraw_cmdline || redraw_mode) {
|
||||||
|
showmode(); // clear cmdline and show mode
|
||||||
|
}
|
||||||
}
|
}
|
||||||
show_cursor_info(false);
|
|
||||||
setcursor();
|
setcursor();
|
||||||
emsg_on_display = false; // may remove error message now
|
emsg_on_display = false; // may remove error message now
|
||||||
}
|
}
|
||||||
|
@ -3747,6 +3747,7 @@ static int do_sub(exarg_T *eap, proftime_T timeout, long cmdpreview_ns, handle_T
|
|||||||
update_topline(curwin);
|
update_topline(curwin);
|
||||||
validate_cursor();
|
validate_cursor();
|
||||||
redraw_later(curwin, UPD_SOME_VALID);
|
redraw_later(curwin, UPD_SOME_VALID);
|
||||||
|
show_cursor_info_later(true);
|
||||||
update_screen();
|
update_screen();
|
||||||
highlight_match = false;
|
highlight_match = false;
|
||||||
redraw_later(curwin, UPD_SOME_VALID);
|
redraw_later(curwin, UPD_SOME_VALID);
|
||||||
@ -3765,7 +3766,6 @@ static int do_sub(exarg_T *eap, proftime_T timeout, long cmdpreview_ns, handle_T
|
|||||||
_("replace with %s (y/n/a/q/l/^E/^Y)?"), sub);
|
_("replace with %s (y/n/a/q/l/^E/^Y)?"), sub);
|
||||||
msg_no_more = false;
|
msg_no_more = false;
|
||||||
msg_scroll = (int)i;
|
msg_scroll = (int)i;
|
||||||
show_cursor_info(true);
|
|
||||||
if (!ui_has(kUIMessages)) {
|
if (!ui_has(kUIMessages)) {
|
||||||
ui_cursor_goto(msg_row, msg_col);
|
ui_cursor_goto(msg_row, msg_col);
|
||||||
}
|
}
|
||||||
|
@ -1306,16 +1306,20 @@ static void normal_redraw(NormalState *s)
|
|||||||
update_topline(curwin);
|
update_topline(curwin);
|
||||||
validate_cursor();
|
validate_cursor();
|
||||||
|
|
||||||
|
show_cursor_info_later(false);
|
||||||
|
|
||||||
if (VIsual_active) {
|
if (VIsual_active) {
|
||||||
redraw_curbuf_later(UPD_INVERTED); // update inverted part
|
redraw_curbuf_later(UPD_INVERTED); // update inverted part
|
||||||
update_screen();
|
|
||||||
} else if (must_redraw) {
|
|
||||||
update_screen();
|
|
||||||
} else if (redraw_cmdline || clear_cmdline || redraw_mode) {
|
|
||||||
showmode();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
redraw_statuslines();
|
if (must_redraw) {
|
||||||
|
update_screen();
|
||||||
|
} else {
|
||||||
|
redraw_statuslines();
|
||||||
|
if (redraw_cmdline || clear_cmdline || redraw_mode) {
|
||||||
|
showmode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (need_maketitle) {
|
if (need_maketitle) {
|
||||||
maketitle();
|
maketitle();
|
||||||
@ -1348,7 +1352,6 @@ static void normal_redraw(NormalState *s)
|
|||||||
did_emsg = false;
|
did_emsg = false;
|
||||||
msg_didany = false; // reset lines_left in msg_start()
|
msg_didany = false; // reset lines_left in msg_start()
|
||||||
may_clear_sb_text(); // clear scroll-back text on next msg
|
may_clear_sb_text(); // clear scroll-back text on next msg
|
||||||
show_cursor_info(false);
|
|
||||||
|
|
||||||
setcursor();
|
setcursor();
|
||||||
}
|
}
|
||||||
|
@ -2255,9 +2255,6 @@ static char *set_bool_option(const int opt_idx, char *const varp, const int valu
|
|||||||
if ((int *)varp == &p_ru || (int *)varp == &p_sc) {
|
if ((int *)varp == &p_ru || (int *)varp == &p_sc) {
|
||||||
// in case 'ruler' or 'showcmd' changed
|
// in case 'ruler' or 'showcmd' changed
|
||||||
comp_col();
|
comp_col();
|
||||||
if ((int *)varp == &p_ru) {
|
|
||||||
win_redr_ruler(curwin);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (curwin->w_curswant != MAXCOL
|
if (curwin->w_curswant != MAXCOL
|
||||||
&& (options[opt_idx].flags & (P_CURSWANT | P_RALL)) != 0) {
|
&& (options[opt_idx].flags & (P_CURSWANT | P_RALL)) != 0) {
|
||||||
|
@ -1221,7 +1221,6 @@ static void did_set_statusline(win_T *win, char **varp, char **gvarp, char **err
|
|||||||
}
|
}
|
||||||
if (varp == &p_ruf && *errmsg == NULL) {
|
if (varp == &p_ruf && *errmsg == NULL) {
|
||||||
comp_col();
|
comp_col();
|
||||||
win_redr_ruler(curwin);
|
|
||||||
}
|
}
|
||||||
// add / remove window bars for 'winbar'
|
// add / remove window bars for 'winbar'
|
||||||
if (gvarp == &p_wbr) {
|
if (gvarp == &p_wbr) {
|
||||||
|
@ -2340,7 +2340,6 @@ void showmatch(int c)
|
|||||||
dollar_vcol = -1;
|
dollar_vcol = -1;
|
||||||
}
|
}
|
||||||
curwin->w_virtcol++; // do display ')' just before "$"
|
curwin->w_virtcol++; // do display ')' just before "$"
|
||||||
update_screen(); // show the new char first
|
|
||||||
|
|
||||||
colnr_T save_dollar_vcol = dollar_vcol;
|
colnr_T save_dollar_vcol = dollar_vcol;
|
||||||
int save_state = State;
|
int save_state = State;
|
||||||
@ -2349,7 +2348,8 @@ void showmatch(int c)
|
|||||||
curwin->w_cursor = mpos; // move to matching char
|
curwin->w_cursor = mpos; // move to matching char
|
||||||
*so = 0; // don't use 'scrolloff' here
|
*so = 0; // don't use 'scrolloff' here
|
||||||
*siso = 0; // don't use 'sidescrolloff' here
|
*siso = 0; // don't use 'sidescrolloff' here
|
||||||
show_cursor_info(false);
|
show_cursor_info_later(false);
|
||||||
|
update_screen(); // show the new char
|
||||||
setcursor();
|
setcursor();
|
||||||
ui_flush();
|
ui_flush();
|
||||||
// Restore dollar_vcol(), because setcursor() may call curs_rows()
|
// Restore dollar_vcol(), because setcursor() may call curs_rows()
|
||||||
|
@ -152,7 +152,7 @@ describe('Screen', function()
|
|||||||
~ |
|
~ |
|
||||||
~ |
|
~ |
|
||||||
~ |
|
~ |
|
||||||
> |
|
-- INSERT -- |
|
||||||
]])
|
]])
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
@ -474,8 +474,7 @@ describe('ui/ext_messages', function()
|
|||||||
]], msg_history={{
|
]], msg_history={{
|
||||||
content = {{ "stuff" }},
|
content = {{ "stuff" }},
|
||||||
kind = "echomsg",
|
kind = "echomsg",
|
||||||
}}, showmode={{ "-- INSERT --", 3 }},
|
}}, messages={{
|
||||||
messages={{
|
|
||||||
content = {{ "Press ENTER or type command to continue", 4}},
|
content = {{ "Press ENTER or type command to continue", 4}},
|
||||||
kind = "return_prompt"
|
kind = "return_prompt"
|
||||||
}}}
|
}}}
|
||||||
|
Loading…
Reference in New Issue
Block a user