vim-patch:8.1.2124: ruler is not updated if win_execute() moves cursor

Problem:    Ruler is not updated if win_execute() moves cursor.
Solution:   Update the status line. (closes vim/vim#5022)
345f28df54
This commit is contained in:
jing
2021-05-01 10:31:15 +08:00
parent 73154bbae0
commit ec3524da29
2 changed files with 26 additions and 0 deletions

View File

@@ -2047,12 +2047,18 @@ static void f_win_execute(typval_T *argvars, typval_T *rettv, FunPtr fptr)
tabpage_T *save_curtab; tabpage_T *save_curtab;
if (wp != NULL && tp != NULL) { if (wp != NULL && tp != NULL) {
pos_T curpos = wp->w_cursor;
if (switch_win_noblock(&save_curwin, &save_curtab, wp, tp, true) == if (switch_win_noblock(&save_curwin, &save_curtab, wp, tp, true) ==
OK) { OK) {
check_cursor(); check_cursor();
execute_common(argvars, rettv, fptr, 1); execute_common(argvars, rettv, fptr, 1);
} }
restore_win_noblock(save_curwin, save_curtab, true); restore_win_noblock(save_curwin, save_curtab, true);
// Update the status line if the cursor moved.
if (win_valid(wp) && !equalpos(curpos, wp->w_cursor)) {
wp->w_redr_status = true;
}
} }
} }

View File

@@ -1,5 +1,7 @@
" test execute() " test execute()
source view_util.vim
func NestedEval() func NestedEval()
let nested = execute('echo "nested\nlines"') let nested = execute('echo "nested\nlines"')
echo 'got: "' . nested . '"' echo 'got: "' . nested . '"'
@@ -105,6 +107,24 @@ func Test_win_execute()
bwipe! bwipe!
endfunc endfunc
func Test_win_execute_update_ruler()
enew
call setline(1, range(500))
20
split
let winid = win_getid()
set ruler
wincmd w
let height = winheight(winid)
redraw
call assert_match('20,1', Screenline(height + 1))
let line = win_execute(winid, 'call cursor(100, 1)')
redraw
call assert_match('100,1', Screenline(height + 1))
bwipe!
endfunc
func Test_win_execute_other_tab() func Test_win_execute_other_tab()
let thiswin = win_getid() let thiswin = win_getid()
tabnew tabnew