# HG changeset patch # User Bram Moolenaar # Date 1575123304 -3600 # Node ID 64eea864dff6fe7432e2263b7b88f508d9d258c9 # Parent 9752ce174299b606f1dc0399b16dc2ac6f41e211 patch 8.1.2363: ml_get error when accessing Visual area in 'statusline' Commit: https://github.com/vim/vim/commit/dee50a518007b3a59f54b8ad018b6a83993593e7 Author: Bram Moolenaar Date: Sat Nov 30 15:05:22 2019 +0100 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 https://github.com/vim/vim/issues/5278) diff --git a/src/buffer.c b/src/buffer.c --- 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 --- 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("\", "xt") + redraw + + delfunc CallWordcount + bwipe! x1 + bwipe! x2 +endfunc diff --git a/src/version.c b/src/version.c --- 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,