aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/drawscreen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/drawscreen.c')
-rw-r--r--src/nvim/drawscreen.c32
1 files changed, 19 insertions, 13 deletions
diff --git a/src/nvim/drawscreen.c b/src/nvim/drawscreen.c
index ea6be5d6d3..1fb42af786 100644
--- a/src/nvim/drawscreen.c
+++ b/src/nvim/drawscreen.c
@@ -421,7 +421,14 @@ bool redrawing(void)
/// and redraw_all_later() to mark parts of the screen as needing a redraw.
int update_screen(void)
{
- static bool did_intro = false;
+ static bool still_may_intro = true;
+ if (still_may_intro) {
+ if (!may_show_intro()) {
+ must_redraw = UPD_NOT_VALID;
+ still_may_intro = false;
+ }
+ }
+
bool is_stl_global = global_stl_height() > 0;
// Don't do anything if the screen structures are (not yet) valid.
@@ -673,10 +680,9 @@ int update_screen(void)
}
// May put up an introductory message when not editing a file
- if (!did_intro) {
- maybe_intro_message();
+ if (still_may_intro) {
+ intro_message(false);
}
- did_intro = true;
decor_providers_invoke_end();
@@ -823,7 +829,7 @@ void setcursor(void)
void setcursor_mayforce(bool force)
{
if (force || redrawing()) {
- validate_cursor();
+ validate_cursor(curwin);
ScreenGrid *grid = &curwin->w_grid;
int row = curwin->w_wrow;
@@ -851,7 +857,7 @@ void show_cursor_info_later(bool force)
&& *ml_get_buf(curwin->w_buffer, curwin->w_cursor.lnum) == NUL;
// Only draw when something changed.
- validate_virtcol_win(curwin);
+ validate_virtcol(curwin);
if (force
|| curwin->w_cursor.lnum != curwin->w_stl_cursor.lnum
|| curwin->w_cursor.col != curwin->w_stl_cursor.col
@@ -1178,7 +1184,7 @@ void comp_col(void)
sc_col = ru_col;
}
}
- if (p_sc) {
+ if (p_sc && *p_sloc == 'l') {
sc_col += SHOWCMD_COLS;
if (!p_ru || last_has_status) { // no need for separating space
sc_col++;
@@ -1513,7 +1519,7 @@ static void win_update(win_T *wp)
// Make sure skipcol is valid, it depends on various options and the window
// width.
- if (wp->w_skipcol > 0) {
+ if (wp->w_skipcol > 0 && wp->w_width_inner > win_col_off(wp)) {
int w = 0;
int width1 = wp->w_width_inner - win_col_off(wp);
int width2 = width1 + win_col_off2(wp);
@@ -1611,14 +1617,14 @@ static void win_update(win_T *wp)
}
}
- hasFoldingWin(wp, mod_top, &mod_top, NULL, true, NULL);
+ hasFolding(wp, mod_top, &mod_top, NULL);
if (mod_top > lnumt) {
mod_top = lnumt;
}
// Now do the same for the bottom line (one above mod_bot).
mod_bot--;
- hasFoldingWin(wp, mod_bot, NULL, &mod_bot, true, NULL);
+ hasFolding(wp, mod_bot, NULL, &mod_bot);
mod_bot++;
if (mod_bot < lnumb) {
mod_bot = lnumb;
@@ -1691,7 +1697,7 @@ static void win_update(win_T *wp)
if (j >= wp->w_grid.rows - 2) {
break;
}
- hasFoldingWin(wp, ln, NULL, &ln, true, NULL);
+ hasFolding(wp, ln, NULL, &ln);
}
} else {
j = wp->w_lines[0].wl_lnum - wp->w_topline;
@@ -1903,7 +1909,7 @@ static void win_update(win_T *wp)
// Highlight to the end of the line, unless 'virtualedit' has
// "block".
if (curwin->w_curswant == MAXCOL) {
- if (get_ve_flags() & VE_BLOCK) {
+ if (get_ve_flags(curwin) & VE_BLOCK) {
pos_T pos;
int cursor_above = curwin->w_cursor.lnum < VIsual.lnum;
@@ -2148,7 +2154,7 @@ static void win_update(win_T *wp)
// rows, and may insert/delete lines
int j = idx;
for (l = lnum; l < mod_bot; l++) {
- if (hasFoldingWin(wp, l, NULL, &l, true, NULL)) {
+ if (hasFolding(wp, l, NULL, &l)) {
new_rows++;
} else if (l == wp->w_topline) {
int n = plines_win_nofill(wp, l, false) + wp->w_topfill;