summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/buffer.c6
-rw-r--r--src/testdir/test_statusline.vim22
-rw-r--r--src/version.c2
3 files changed, 30 insertions, 0 deletions
diff --git a/src/buffer.c b/src/buffer.c
index cba84c629..3b50c8937 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -3979,6 +3979,7 @@ build_stl_str_hl(
#ifdef FEAT_EVAL
win_T *save_curwin;
buf_T *save_curbuf;
+ int save_VIsual_active;
#endif
int empty_line;
colnr_T virtcol;
@@ -4368,13 +4369,18 @@ build_stl_str_hl(
save_curbuf = curbuf;
save_curwin = curwin;
+ 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;
str = eval_to_string_safe(p, &t, use_sandbox);
curwin = save_curwin;
curbuf = save_curbuf;
+ VIsual_active = save_VIsual_active;
do_unlet((char_u *)"g:actual_curbuf", TRUE);
do_unlet((char_u *)"g:actual_curwin", TRUE);
diff --git a/src/testdir/test_statusline.vim b/src/testdir/test_statusline.vim
index e1830d08b..af05be58e 100644
--- a/src/testdir/test_statusline.vim
+++ b/src/testdir/test_statusline.vim
@@ -368,3 +368,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
diff --git a/src/version.c b/src/version.c
index 5833f3824..1bb77a1b1 100644
--- a/src/version.c
+++ b/src/version.c
@@ -738,6 +738,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2363,
+/**/
2362,
/**/
2361,