mirror of
https://github.com/vim/vim.git
synced 2025-09-28 04:24:06 -04:00
patch 8.2.4785: Visual mode not stopped if win_gotoid() goes to other buffer
Problem: Visual mode not stopped early enough if win_gotoid() goes to another buffer. (Sergey Vlasov) Solution: Stop Visual mode before jumping to another buffer. (closes #10217)
This commit is contained in:
@@ -817,6 +817,9 @@ f_win_gotoid(typval_T *argvars, typval_T *rettv)
|
|||||||
FOR_ALL_TAB_WINDOWS(tp, wp)
|
FOR_ALL_TAB_WINDOWS(tp, wp)
|
||||||
if (wp->w_id == id)
|
if (wp->w_id == id)
|
||||||
{
|
{
|
||||||
|
// When jumping to another buffer stop Visual mode.
|
||||||
|
if (VIsual_active && wp->w_buffer != curbuf)
|
||||||
|
end_visual_mode();
|
||||||
goto_tabpage_win(tp, wp);
|
goto_tabpage_win(tp, wp);
|
||||||
rettv->vval.v_number = 1;
|
rettv->vval.v_number = 1;
|
||||||
return;
|
return;
|
||||||
|
15
src/testdir/dumps/Test_win_gotoid_1.dump
Normal file
15
src/testdir/dumps/Test_win_gotoid_1.dump
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
|0+0&#ffffff0| @73
|
||||||
|
|1| @73
|
||||||
|
|2| @73
|
||||||
|
|3| @73
|
||||||
|
|4| @73
|
||||||
|
|[+1&&|N|o| |N|a|m|e|]| @47|1|,|1| @11|T|o|p
|
||||||
|
>2+0&&|1| @72
|
||||||
|
|2@1| @72
|
||||||
|
|2|3| @72
|
||||||
|
|2|4| @72
|
||||||
|
|2|5| @72
|
||||||
|
|2|6| @72
|
||||||
|
|[+3&&|N|o| |N|a|m|e|]| @47|1|,|1| @11|T|o|p
|
||||||
|
|r+0&&|e|g| |=| |"|f|o@1|"| @63
|
||||||
|
@75
|
15
src/testdir/dumps/Test_win_gotoid_2.dump
Normal file
15
src/testdir/dumps/Test_win_gotoid_2.dump
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
|0+0&#ffffff0| @73
|
||||||
|
|1| @73
|
||||||
|
|2| @73
|
||||||
|
|3| @73
|
||||||
|
|4| @73
|
||||||
|
|[+1&&|N|o| |N|a|m|e|]| @47|1|,|1| @11|T|o|p
|
||||||
|
|2+0&&|1| @72
|
||||||
|
|2@1| @72
|
||||||
|
|2+0&#e0e0e08>3+0&#ffffff0| @72
|
||||||
|
|2|4| @72
|
||||||
|
|2|5| @72
|
||||||
|
|2|6| @72
|
||||||
|
|[+3&&|N|o| |N|a|m|e|]| @47|3|,|2| @11|T|o|p
|
||||||
|
|r+0&&|e|g| |=| |"|2|3|"| @64
|
||||||
|
|-+2&&@1| |V|I|S|U|A|L| |-@1| +0&&@51|2| @9
|
15
src/testdir/dumps/Test_win_gotoid_3.dump
Normal file
15
src/testdir/dumps/Test_win_gotoid_3.dump
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
|0+0&#ffffff0| @73
|
||||||
|
|1| @73
|
||||||
|
>2| @73
|
||||||
|
|3| @73
|
||||||
|
|4| @73
|
||||||
|
|[+3&&|N|o| |N|a|m|e|]| @47|3|,|1| @11|T|o|p
|
||||||
|
|2+0&&|1| @72
|
||||||
|
|2@1| @72
|
||||||
|
|2|3| @72
|
||||||
|
|2|4| @72
|
||||||
|
|2|5| @72
|
||||||
|
|2|6| @72
|
||||||
|
|[+1&&|N|o| |N|a|m|e|]| @47|3|,|1| @11|T|o|p
|
||||||
|
|r+0&&|e|g| |=| |"|2|3|"| @64
|
||||||
|
@75
|
@@ -1,6 +1,7 @@
|
|||||||
" Test using builtin functions in the Vim9 script language.
|
" Test using builtin functions in the Vim9 script language.
|
||||||
|
|
||||||
source check.vim
|
source check.vim
|
||||||
|
source screendump.vim
|
||||||
import './vim9.vim' as v9
|
import './vim9.vim' as v9
|
||||||
|
|
||||||
" Test for passing too many or too few arguments to builtin functions
|
" Test for passing too many or too few arguments to builtin functions
|
||||||
@@ -4493,6 +4494,46 @@ def Test_win_gotoid()
|
|||||||
v9.CheckDefAndScriptFailure(['win_gotoid("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
|
v9.CheckDefAndScriptFailure(['win_gotoid("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
|
func Test_win_gotoid_in_mapping()
|
||||||
|
CheckScreendump
|
||||||
|
|
||||||
|
if has('clipboard_working')
|
||||||
|
let @* = 'foo'
|
||||||
|
let lines =<< trim END
|
||||||
|
set cmdheight=2
|
||||||
|
func On_click()
|
||||||
|
call win_gotoid(getmousepos().winid)
|
||||||
|
execute "norm! \<LeftMouse>"
|
||||||
|
endfunc
|
||||||
|
noremap <LeftMouse> <Cmd>call On_click()<CR>
|
||||||
|
|
||||||
|
autocmd SafeState * echo 'reg = "' .. @* .. '"'
|
||||||
|
|
||||||
|
call setline(1, range(20))
|
||||||
|
set nomodified
|
||||||
|
botright new
|
||||||
|
call setline(1, range(21, 40))
|
||||||
|
set nomodified
|
||||||
|
|
||||||
|
func Click()
|
||||||
|
map <silent> <F3> :call test_setmouse(3, 1)<CR>
|
||||||
|
call feedkeys("\<F3>\<LeftMouse>\<LeftRelease>", "xt")
|
||||||
|
endfunc
|
||||||
|
END
|
||||||
|
call writefile(lines, 'Xgotoscript')
|
||||||
|
let buf = RunVimInTerminal('-S Xgotoscript', #{rows: 15, wait_for_ruler: 0})
|
||||||
|
call VerifyScreenDump(buf, 'Test_win_gotoid_1', {})
|
||||||
|
call term_sendkeys(buf, "3Gvl")
|
||||||
|
call VerifyScreenDump(buf, 'Test_win_gotoid_2', {})
|
||||||
|
|
||||||
|
call term_sendkeys(buf, ":call Click()\<CR>")
|
||||||
|
call VerifyScreenDump(buf, 'Test_win_gotoid_3', {})
|
||||||
|
|
||||||
|
call StopVimInTerminal(buf)
|
||||||
|
call delete('Xgotoscript')
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
def Test_win_id2tabwin()
|
def Test_win_id2tabwin()
|
||||||
v9.CheckDefAndScriptFailure(['win_id2tabwin("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
|
v9.CheckDefAndScriptFailure(['win_id2tabwin("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
|
||||||
enddef
|
enddef
|
||||||
|
@@ -746,6 +746,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 */
|
||||||
|
/**/
|
||||||
|
4785,
|
||||||
/**/
|
/**/
|
||||||
4784,
|
4784,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user