forked from aniani/vim
patch 8.2.2074: Vim9: using :normal from Vim9 script can't handle range
Problem: Vim9: using :normal from Vim9 script can't handle range. Solution: Execute a :normal command in legacy script context. (closes #7401)
This commit is contained in:
@@ -7994,10 +7994,12 @@ save_current_state(save_state_T *sst)
|
|||||||
sst->save_finish_op = finish_op;
|
sst->save_finish_op = finish_op;
|
||||||
sst->save_opcount = opcount;
|
sst->save_opcount = opcount;
|
||||||
sst->save_reg_executing = reg_executing;
|
sst->save_reg_executing = reg_executing;
|
||||||
|
sst->save_script_version = current_sctx.sc_version;
|
||||||
|
|
||||||
msg_scroll = FALSE; // no msg scrolling in Normal mode
|
msg_scroll = FALSE; // no msg scrolling in Normal mode
|
||||||
restart_edit = 0; // don't go to Insert mode
|
restart_edit = 0; // don't go to Insert mode
|
||||||
p_im = FALSE; // don't use 'insertmode'
|
p_im = FALSE; // don't use 'insertmode'
|
||||||
|
current_sctx.sc_version = 1; // not in Vim9 script
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Save the current typeahead. This is required to allow using ":normal"
|
* Save the current typeahead. This is required to allow using ":normal"
|
||||||
@@ -8021,6 +8023,7 @@ restore_current_state(save_state_T *sst)
|
|||||||
opcount = sst->save_opcount;
|
opcount = sst->save_opcount;
|
||||||
reg_executing = sst->save_reg_executing;
|
reg_executing = sst->save_reg_executing;
|
||||||
msg_didout |= sst->save_msg_didout; // don't reset msg_didout now
|
msg_didout |= sst->save_msg_didout; // don't reset msg_didout now
|
||||||
|
current_sctx.sc_version = sst->save_script_version;
|
||||||
|
|
||||||
// Restore the state (needed when called from a function executed for
|
// Restore the state (needed when called from a function executed for
|
||||||
// 'indentexpr'). Update the mouse and cursor, they may have changed.
|
// 'indentexpr'). Update the mouse and cursor, they may have changed.
|
||||||
|
@@ -4155,6 +4155,7 @@ typedef struct {
|
|||||||
int save_finish_op;
|
int save_finish_op;
|
||||||
int save_opcount;
|
int save_opcount;
|
||||||
int save_reg_executing;
|
int save_reg_executing;
|
||||||
|
int save_script_version;
|
||||||
tasave_T tabuf;
|
tasave_T tabuf;
|
||||||
} save_state_T;
|
} save_state_T;
|
||||||
|
|
||||||
|
@@ -2958,6 +2958,19 @@ def Test_put_with_linebreak()
|
|||||||
bwipe!
|
bwipe!
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
|
def InvokeNormal()
|
||||||
|
exe "norm! :m+1\r"
|
||||||
|
enddef
|
||||||
|
|
||||||
|
def Test_invoke_normal_in_visual_mode()
|
||||||
|
xnoremap <F3> <Cmd>call <SID>InvokeNormal()<CR>
|
||||||
|
new
|
||||||
|
setline(1, ['aaa', 'bbb'])
|
||||||
|
feedkeys("V\<F3>", 'xt')
|
||||||
|
assert_equal(['bbb', 'aaa'], getline(1, 2))
|
||||||
|
xunmap <F3>
|
||||||
|
enddef
|
||||||
|
|
||||||
" Keep this last, it messes up highlighting.
|
" Keep this last, it messes up highlighting.
|
||||||
def Test_substitute_cmd()
|
def Test_substitute_cmd()
|
||||||
new
|
new
|
||||||
|
@@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
2074,
|
||||||
/**/
|
/**/
|
||||||
2073,
|
2073,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user