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)
dee50a5180
This commit is contained in:
Jan Edmund Lazo
2019-11-30 15:29:01 -05:00
parent 6c6afbcddd
commit 5b60023a8c
2 changed files with 28 additions and 0 deletions

View File

@@ -3801,14 +3801,20 @@ int build_stl_str_hl(
buf_T *const save_curbuf = curbuf; buf_T *const save_curbuf = curbuf;
win_T *const save_curwin = curwin; win_T *const save_curwin = curwin;
const int save_VIsual_active = VIsual_active;
curwin = wp; curwin = wp;
curbuf = wp->w_buffer; 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. // Note: The result stored in `t` is unused.
str = eval_to_string_safe(out_p, &t, use_sandbox); str = eval_to_string_safe(out_p, &t, use_sandbox);
curwin = save_curwin; curwin = save_curwin;
curbuf = save_curbuf; curbuf = save_curbuf;
VIsual_active = save_VIsual_active;
// Remove the variable we just stored // Remove the variable we just stored
do_unlet(S_LEN("g:actual_curbuf"), true); do_unlet(S_LEN("g:actual_curbuf"), true);

View File

@@ -347,3 +347,25 @@ func Test_statusline()
set laststatus& set laststatus&
set splitbelow& set splitbelow&
endfunc 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