aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2019-11-30 15:29:01 -0500
committerJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2019-11-30 16:21:33 -0500
commit5b60023a8c19fd77c426b0070057b95cae89cd42 (patch)
tree7df89eb001a9c394cb5ca695b9c9d1ce6666da16
parent6c6afbcddd05336b7a6d98e5025c9c8206d4f903 (diff)
downloadrneovim-5b60023a8c19fd77c426b0070057b95cae89cd42.tar.gz
rneovim-5b60023a8c19fd77c426b0070057b95cae89cd42.tar.bz2
rneovim-5b60023a8c19fd77c426b0070057b95cae89cd42.zip
vim-patch:8.1.2363: ml_get error when accessing Visual area in 'statusline'
Problem: ml_get error when accessing Visual area in 'statusline'. Solution: Disable Visual mode when using another window. (closes vim/vim#5278) https://github.com/vim/vim/commit/dee50a518007b3a59f54b8ad018b6a83993593e7
-rw-r--r--src/nvim/buffer.c6
-rw-r--r--src/nvim/testdir/test_statusline.vim22
2 files changed, 28 insertions, 0 deletions
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c
index e3b8e9cc6d..33ffff39f6 100644
--- a/src/nvim/buffer.c
+++ b/src/nvim/buffer.c
@@ -3801,14 +3801,20 @@ int build_stl_str_hl(
buf_T *const save_curbuf = curbuf;
win_T *const save_curwin = curwin;
+ const int save_VIsual_active = VIsual_active;
curwin = wp;
curbuf = wp->w_buffer;
+ // Visual mode is only valid in the current window.
+ if (curwin != save_curwin) {
+ VIsual_active = false;
+ }
// Note: The result stored in `t` is unused.
str = eval_to_string_safe(out_p, &t, use_sandbox);
curwin = save_curwin;
curbuf = save_curbuf;
+ VIsual_active = save_VIsual_active;
// Remove the variable we just stored
do_unlet(S_LEN("g:actual_curbuf"), true);
diff --git a/src/nvim/testdir/test_statusline.vim b/src/nvim/testdir/test_statusline.vim
index b86340a23a..48ec777ffd 100644
--- a/src/nvim/testdir/test_statusline.vim
+++ b/src/nvim/testdir/test_statusline.vim
@@ -347,3 +347,25 @@ func Test_statusline()
set laststatus&
set splitbelow&
endfunc
+
+func Test_statusline_visual()
+ func CallWordcount()
+ call wordcount()
+ endfunc
+ new x1
+ setl statusline=count=%{CallWordcount()}
+ " buffer must not be empty
+ call setline(1, 'hello')
+
+ " window with more lines than x1
+ new x2
+ call setline(1, range(10))
+ $
+ " Visual mode in line below liast line in x1 should not give ml_get error
+ call feedkeys("\<C-V>", "xt")
+ redraw
+
+ delfunc CallWordcount
+ bwipe! x1
+ bwipe! x2
+endfunc