diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2019-01-09 21:26:49 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-09 21:26:49 +0100 |
commit | 1ca2c8950fe33654f046183516a123fe0606b4e8 (patch) | |
tree | bbe7941a6f21569cace8fb414892299f0b60e277 | |
parent | 8510d5ff865f41e5025943a1c804d2d1e65f0663 (diff) | |
parent | d5d8deec06aa0afb6a27b231cf5b395296a76f24 (diff) | |
download | rneovim-1ca2c8950fe33654f046183516a123fe0606b4e8.tar.gz rneovim-1ca2c8950fe33654f046183516a123fe0606b4e8.tar.bz2 rneovim-1ca2c8950fe33654f046183516a123fe0606b4e8.zip |
Merge pull request #9479 from bfredl/redrawsign
screen: remove ad-hoc code path for redrawing signs.
-rw-r--r-- | src/nvim/buffer.c | 20 | ||||
-rw-r--r-- | src/nvim/edit.c | 6 | ||||
-rw-r--r-- | src/nvim/ex_cmds.c | 8 | ||||
-rw-r--r-- | src/nvim/move.c | 4 | ||||
-rw-r--r-- | src/nvim/screen.c | 75 |
5 files changed, 24 insertions, 89 deletions
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c index 8b107041b1..22c8a2bf05 100644 --- a/src/nvim/buffer.c +++ b/src/nvim/buffer.c @@ -5347,8 +5347,7 @@ int bufhl_add_hl(buf_T *buf, hlentry->stop = col_end; if (0 < lnum && lnum <= buf->b_ml.ml_line_count) { - changed_lines_buf(buf, lnum, lnum+1, 0); - redraw_buf_later(buf, VALID); + redraw_buf_line_later(buf, lnum); } return src_id; } @@ -5414,8 +5413,7 @@ int bufhl_add_virt_text(buf_T *buf, } if (0 < lnum && lnum <= buf->b_ml.ml_line_count) { - changed_lines_buf(buf, lnum, lnum+1, 0); - redraw_buf_later(buf, VALID); + redraw_buf_line_later(buf, lnum); } return src_id; } @@ -5440,8 +5438,6 @@ void bufhl_clear_line_range(buf_T *buf, linenr_T line_start, linenr_T line_end) { - linenr_T first_changed = MAXLNUM, last_changed = -1; - kbitr_t(bufhl) itr; BufhlLine *l, t = BUFHLLINE_INIT(line_start); if (!kb_itr_get(bufhl, &buf->b_bufhl_info, &t, &itr)) { @@ -5456,12 +5452,7 @@ void bufhl_clear_line_range(buf_T *buf, if (line_start <= line) { BufhlLineStatus status = bufhl_clear_line(l, src_id, line); if (status != kBLSUnchanged) { - if (line > last_changed) { - last_changed = line; - } - if (line < first_changed) { - first_changed = line; - } + redraw_buf_line_later(buf, line); } if (status == kBLSDeleted) { kb_del_itr(bufhl, &buf->b_bufhl_info, &itr); @@ -5469,11 +5460,6 @@ void bufhl_clear_line_range(buf_T *buf, } } } - - if (last_changed != -1) { - changed_lines_buf(buf, first_changed, last_changed+1, 0); - redraw_buf_later(buf, VALID); - } } /// Clear bufhl highlights from a given source group and given line diff --git a/src/nvim/edit.c b/src/nvim/edit.c index 5d918d8f69..50c28dbaad 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -1567,7 +1567,7 @@ void edit_unputchar(void) curwin->w_wcol++; } if (pc_status == PC_STATUS_RIGHT || pc_status == PC_STATUS_LEFT) { - redrawWinline(curwin, curwin->w_cursor.lnum, false); + redrawWinline(curwin, curwin->w_cursor.lnum); } else { grid_puts(&curwin->w_grid, pc_bytes, pc_row - msg_scrolled, pc_col, pc_attr); @@ -1608,7 +1608,7 @@ static void undisplay_dollar(void) { if (dollar_vcol >= 0) { dollar_vcol = -1; - redrawWinline(curwin, curwin->w_cursor.lnum, false); + redrawWinline(curwin, curwin->w_cursor.lnum); } } @@ -5980,7 +5980,7 @@ static void check_spell_redraw(void) linenr_T lnum = spell_redraw_lnum; spell_redraw_lnum = 0; - redrawWinline(curwin, lnum, false); + redrawWinline(curwin, lnum); } } diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c index 0067445b38..85844c37bd 100644 --- a/src/nvim/ex_cmds.c +++ b/src/nvim/ex_cmds.c @@ -5759,7 +5759,7 @@ void ex_sign(exarg_T *eap) id = buf_findsign_id(curwin->w_buffer, curwin->w_cursor.lnum); if (id > 0) { buf_delsign(curwin->w_buffer, id); - update_debug_sign(curwin->w_buffer, curwin->w_cursor.lnum); + redraw_buf_line_later(curwin->w_buffer, curwin->w_cursor.lnum); } else { EMSG(_("E159: Missing sign number")); } @@ -5788,7 +5788,7 @@ void ex_sign(exarg_T *eap) // ":sign unplace {id}": remove placed sign by number FOR_ALL_BUFFERS(buf) { if ((lnum = buf_delsign(buf, id)) != 0) { - update_debug_sign(buf, lnum); + redraw_buf_line_later(buf, lnum); } } return; @@ -5888,7 +5888,7 @@ void ex_sign(exarg_T *eap) } else { // ":sign unplace {id} file={fname}" lnum = buf_delsign(buf, id); - update_debug_sign(buf, lnum); + redraw_buf_line_later(buf, lnum); } } else if (sign_name != NULL) { // idx == SIGNCMD_PLACE @@ -5910,7 +5910,7 @@ void ex_sign(exarg_T *eap) lnum = buf_change_sign_type(buf, id, sp->sn_typenr); } if (lnum > 0) { - update_debug_sign(buf, lnum); + redraw_buf_line_later(buf, lnum); } else { EMSG2(_("E885: Not possible to change sign %s"), sign_name); } diff --git a/src/nvim/move.c b/src/nvim/move.c index b8225cc64c..f2c8996050 100644 --- a/src/nvim/move.c +++ b/src/nvim/move.c @@ -117,8 +117,8 @@ static void redraw_for_cursorline(win_T *wp) // "w_last_cursorline" may be outdated, worst case we redraw // too much. This is optimized for moving the cursor around in // the current window. - redrawWinline(wp, wp->w_last_cursorline, false); - redrawWinline(wp, wp->w_cursor.lnum, false); + redrawWinline(wp, wp->w_last_cursorline); + redrawWinline(wp, wp->w_cursor.lnum); redraw_win_later(wp, VALID); } else { redraw_win_later(wp, SOME_VALID); diff --git a/src/nvim/screen.c b/src/nvim/screen.c index fe3639c5e1..27d72ffbf7 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -214,6 +214,15 @@ void redraw_buf_later(buf_T *buf, int type) } } +void redraw_buf_line_later(buf_T *buf, linenr_T line) +{ + FOR_ALL_WINDOWS_IN_TAB(wp, curtab) { + if (wp->w_buffer == buf) { + redrawWinline(wp, line); + } + } +} + /* * Changed something in the current window, at buffer line "lnum", that * requires that line and possibly other lines to be redrawn. @@ -225,12 +234,11 @@ void redraw_buf_later(buf_T *buf, int type) void redrawWinline( win_T *wp, - linenr_T lnum, - int invalid /* window line height is invalid now */ + linenr_T lnum ) { - int i; - + if (lnum >= wp->w_topline + && lnum < wp->w_botline) { if (wp->w_redraw_top == 0 || wp->w_redraw_top > lnum) { wp->w_redraw_top = lnum; } @@ -238,13 +246,6 @@ redrawWinline( wp->w_redraw_bot = lnum; } redraw_win_later(wp, VALID); - - if (invalid) { - // A w_lines[] entry for this lnum has become invalid. - i = find_wl_entry(wp, lnum); - if (i >= 0) { - wp->w_lines[i].wl_valid = false; - } } } @@ -569,58 +570,6 @@ void update_single_line(win_T *wp, linenr_T lnum) need_cursor_line_redraw = false; } -void update_debug_sign(const buf_T *const buf, const linenr_T lnum) -{ - bool doit = false; - win_foldinfo.fi_level = 0; - - // update/delete a specific mark - FOR_ALL_WINDOWS_IN_TAB(wp, curtab) { - if (buf != NULL && lnum > 0) { - if (wp->w_buffer == buf && lnum >= wp->w_topline - && lnum < wp->w_botline) { - if (wp->w_redraw_top == 0 || wp->w_redraw_top > lnum) { - wp->w_redraw_top = lnum; - } - if (wp->w_redraw_bot == 0 || wp->w_redraw_bot < lnum) { - wp->w_redraw_bot = lnum; - } - redraw_win_later(wp, VALID); - } - } else { - redraw_win_later(wp, VALID); - } - if (wp->w_redr_type != 0) { - doit = true; - } - } - - // Return when there is nothing to do, screen updating is already - // happening (recursive call), messages on the screen or still starting up. - if (!doit - || updating_screen - || State == ASKMORE - || State == HITRETURN - || msg_scrolled - || starting) { - return; - } - - // update all windows that need updating - update_prepare(); - - FOR_ALL_WINDOWS_IN_TAB(wp, curtab) { - if (wp->w_redr_type != 0) { - update_window_hl(wp, wp->w_redr_type >= NOT_VALID); - win_update(wp); - } - if (wp->w_redr_status) { - win_redr_status(wp, false); - } - } - - update_finish(); -} /* * Update a single window. |