diff options
author | André Twupack <atwupack@mailbox.org> | 2014-09-11 20:43:47 +0200 |
---|---|---|
committer | André Twupack <atwupack@mailbox.org> | 2014-09-11 20:46:10 +0200 |
commit | 12ca4f582e317f805a8dedbb6106ecb9d33b1f70 (patch) | |
tree | 755c8ee3ddc4e9b3dd74f4481162f2e62eea7542 | |
parent | ba4acce341d7c289ca84a7e5422c4a4d5fca2ed2 (diff) | |
download | rneovim-12ca4f582e317f805a8dedbb6106ecb9d33b1f70.tar.gz rneovim-12ca4f582e317f805a8dedbb6106ecb9d33b1f70.tar.bz2 rneovim-12ca4f582e317f805a8dedbb6106ecb9d33b1f70.zip |
vim-patch:7.4.349
Problem: When there are matches to highlight the whole window is redrawn,
which is slow.
Solution: Only redraw everything when lines were inserted or deleted.
Reset b_mod_xlines when needed. (Alexey Radkov)
https://code.google.com/p/vim/source/detail?r=v7-4-349
-rw-r--r-- | src/nvim/screen.c | 5 | ||||
-rw-r--r-- | src/nvim/version.c | 2 | ||||
-rw-r--r-- | src/nvim/window.c | 6 |
3 files changed, 8 insertions, 5 deletions
diff --git a/src/nvim/screen.c b/src/nvim/screen.c index a84d3490f0..29e5af5cee 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -1356,8 +1356,9 @@ static void win_update(win_T *wp) (foldmethodIsSyntax(wp) && hasAnyFolding(wp)) || syntax_check_changed(lnum))) - /* match in fixed position might need redraw */ - || wp->w_match_head != NULL + // match in fixed position might need redraw + // if lines were inserted or deleted + || (wp->w_match_head != NULL && buf->b_mod_xlines != 0) ))))) { if (lnum == mod_top) top_to_mod = FALSE; diff --git a/src/nvim/version.c b/src/nvim/version.c index dccd47846e..dfcf086e87 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -246,7 +246,7 @@ static int included_patches[] = { 352, //351, //350, - //349, + 349, 348, //347, 346, diff --git a/src/nvim/window.c b/src/nvim/window.c index 0693e50bda..b9714ce690 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -5323,12 +5323,13 @@ int match_add(win_T *wp, char_u *grp, char_u *pat, int prio, int id, list_T *pos wp->w_buffer->b_mod_bot = botlnum; } } else { + wp->w_buffer->b_mod_set = TRUE; wp->w_buffer->b_mod_top = toplnum; wp->w_buffer->b_mod_bot = botlnum; + wp->w_buffer->b_mod_xlines = 0; } m->pos.toplnum = toplnum; m->pos.botlnum = botlnum; - wp->w_buffer->b_mod_set = TRUE; rtype = VALID; } } @@ -5396,10 +5397,11 @@ int match_delete(win_T *wp, int id, int perr) wp->w_buffer->b_mod_bot = cur->pos.botlnum; } } else { + wp->w_buffer->b_mod_set = TRUE; wp->w_buffer->b_mod_top = cur->pos.toplnum; wp->w_buffer->b_mod_bot = cur->pos.botlnum; + wp->w_buffer->b_mod_xlines = 0; } - wp->w_buffer->b_mod_set = TRUE; rtype = VALID; } free(cur); |