From: Yegappan Lakshmanan Date: Wed, 3 Dec 2025 19:22:13 +0000 (+0000) Subject: patch 9.1.1949: :stag does not use 'swichtbuf' option X-Git-Tag: v9.1.1949^0 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=efc7509be2ba38ca6d226cf59bad67e7888a537d;p=thirdparty%2Fvim.git patch 9.1.1949: :stag does not use 'swichtbuf' option Problem: :stag does not use 'swichtbuf' option, though the documentation states differently (Christian Brabandt) Solution: Respect 'switchbuf' option (Yegappan Lakshmanan). related: #18845 closes: #18856 Signed-off-by: Yegappan Lakshmanan Signed-off-by: Christian Brabandt --- diff --git a/runtime/doc/windows.txt b/runtime/doc/windows.txt index 5b77055a65..7b82486558 100644 --- a/runtime/doc/windows.txt +++ b/runtime/doc/windows.txt @@ -1,4 +1,4 @@ -*windows.txt* For Vim version 9.1. Last change: 2025 Nov 11 +*windows.txt* For Vim version 9.1. Last change: 2025 Dec 03 VIM REFERENCE MANUAL by Bram Moolenaar @@ -878,13 +878,15 @@ the buffer. The result is that all buffers will use the 'encoding' encoding *:sta* *:stag* :sta[g][!] [tagname] Does ":tag[!] [tagname]" and splits the window for the found - tag. See also |:tag|. + tag. Refer to 'switchbuf' to jump to a tag in a vertically + split window or a new tab page. See also |:tag|. CTRL-W ] *CTRL-W_]* *CTRL-W_CTRL-]* CTRL-W CTRL-] Split current window in two. Use identifier under cursor as a tag and jump to it in the new upper window. In Visual mode uses the Visually selected text as a tag. - Make new window N high. + Make new window N high. Refer to 'switchbuf' to jump to a tag + in a vertically split window or a new tab page. *CTRL-W_g]* CTRL-W g ] Split current window in two. Use identifier under cursor as a diff --git a/src/tag.c b/src/tag.c index 23573fe88d..60b38d156d 100644 --- a/src/tag.c +++ b/src/tag.c @@ -3850,6 +3850,15 @@ jumpto_tag( if (getfile_result == GETFILE_UNUSED && (postponed_split || cmdmod.cmod_tab != 0)) { + if (swb_flags & SWB_VSPLIT) + // If 'switchbuf' contains 'vsplit', then use a new vertically + // split window. + cmdmod.cmod_split |= WSP_VERT; + + if (swb_flags & SWB_NEWTAB) + // If 'switchbuf' contains 'newtab', then use a new tabpage + cmdmod.cmod_tab = tabpage_index(curtab) + 1; + if (win_split(postponed_split > 0 ? postponed_split : 0, postponed_split_flags) == FAIL) { diff --git a/src/testdir/test_tagjump.vim b/src/testdir/test_tagjump.vim index 47618d0774..5ddaaadc27 100644 --- a/src/testdir/test_tagjump.vim +++ b/src/testdir/test_tagjump.vim @@ -144,6 +144,24 @@ func Test_tagjump_switchbuf() 1tabnext | stag third call assert_equal(2, tabpagenr('$')) call assert_equal(3, line('.')) + tabonly + + " use a vertically split window + enew | only + set switchbuf=vsplit + stag third + call assert_equal(2, winnr('$')) + call assert_equal(1, winnr()) + call assert_equal(3, line('.')) + call assert_equal(['row', [['leaf', win_getid(1)], ['leaf', win_getid(2)]]], winlayout()) + + " jump to a tag in a new tabpage + enew | only + set switchbuf=newtab + stag second + call assert_equal(2, tabpagenr('$')) + call assert_equal(2, tabpagenr()) + call assert_equal(2, line('.')) tabclose! enew | only diff --git a/src/version.c b/src/version.c index b9c5409dc6..186cddf80e 100644 --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1949, /**/ 1948, /**/