mirror of
https://github.com/neovim/neovim.git
synced 2026-04-26 17:24:18 +00:00
fix(buffer): switching buffer should respect jumpoptions+=view (#36969)
Also add missing change to buflist_findfmark() from #19224.
(cherry picked from commit 2700f6642a)
This commit is contained in:
committed by
github-actions[bot]
parent
45cda1bcf4
commit
6f84ea7c66
@@ -2219,7 +2219,8 @@ int buflist_getfile(int n, linenr_T lnum, int options, int forceit)
|
|||||||
/// Go to the last known line number for the current buffer.
|
/// Go to the last known line number for the current buffer.
|
||||||
void buflist_getfpos(void)
|
void buflist_getfpos(void)
|
||||||
{
|
{
|
||||||
pos_T *fpos = &buflist_findfmark(curbuf)->mark;
|
fmark_T *fm = buflist_findfmark(curbuf);
|
||||||
|
const pos_T *fpos = &fm->mark;
|
||||||
|
|
||||||
curwin->w_cursor.lnum = fpos->lnum;
|
curwin->w_cursor.lnum = fpos->lnum;
|
||||||
check_cursor_lnum(curwin);
|
check_cursor_lnum(curwin);
|
||||||
@@ -2232,6 +2233,10 @@ void buflist_getfpos(void)
|
|||||||
curwin->w_cursor.coladd = 0;
|
curwin->w_cursor.coladd = 0;
|
||||||
curwin->w_set_curswant = true;
|
curwin->w_set_curswant = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (jop_flags & kOptJopFlagView) {
|
||||||
|
mark_view_restore(fm);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Find file in buffer list by name (it has to be for the current window).
|
/// Find file in buffer list by name (it has to be for the current window).
|
||||||
@@ -2812,7 +2817,7 @@ void get_winopts(buf_T *buf)
|
|||||||
fmark_T *buflist_findfmark(buf_T *buf)
|
fmark_T *buflist_findfmark(buf_T *buf)
|
||||||
FUNC_ATTR_PURE
|
FUNC_ATTR_PURE
|
||||||
{
|
{
|
||||||
static fmark_T no_position = { { 1, 0, 0 }, 0, 0, { 0 }, NULL };
|
static fmark_T no_position = { { 1, 0, 0 }, 0, 0, INIT_FMARKV, NULL };
|
||||||
|
|
||||||
WinInfo *const wip = find_wininfo(buf, false, false);
|
WinInfo *const wip = find_wininfo(buf, false, false);
|
||||||
return (wip == NULL) ? &no_position : &(wip->wi_mark);
|
return (wip == NULL) ? &no_position : &(wip->wi_mark);
|
||||||
|
|||||||
@@ -423,27 +423,36 @@ describe('jumpoptions=view', function()
|
|||||||
]])
|
]])
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('restores the view across files with <C-^>', function()
|
it('restores the view across files with <C-^>/:bprevious/:bnext', function()
|
||||||
local screen = Screen.new(5, 5)
|
local screen = Screen.new(5, 5)
|
||||||
command('args ' .. file1 .. ' ' .. file2)
|
command('args ' .. file1 .. ' ' .. file2)
|
||||||
feed('12Gzt')
|
feed('12Gzt')
|
||||||
command('next')
|
local s1 = [[
|
||||||
feed('G')
|
|
||||||
screen:expect([[
|
|
||||||
27 line |
|
|
||||||
28 line |
|
|
||||||
29 line |
|
|
||||||
^30 line |
|
|
||||||
|
|
|
||||||
]])
|
|
||||||
feed('<C-^>')
|
|
||||||
screen:expect([[
|
|
||||||
^12 line |
|
^12 line |
|
||||||
13 line |
|
13 line |
|
||||||
14 line |
|
14 line |
|
||||||
15 line |
|
15 line |
|
||||||
|
|
|
|
||||||
]])
|
]]
|
||||||
|
screen:expect(s1)
|
||||||
|
command('next')
|
||||||
|
feed('G')
|
||||||
|
local s2 = [[
|
||||||
|
27 line |
|
||||||
|
28 line |
|
||||||
|
29 line |
|
||||||
|
^30 line |
|
||||||
|
|
|
||||||
|
]]
|
||||||
|
screen:expect(s2)
|
||||||
|
feed('<C-^>')
|
||||||
|
screen:expect(s1)
|
||||||
|
feed('<C-^>')
|
||||||
|
screen:expect(s2)
|
||||||
|
command('bprevious')
|
||||||
|
screen:expect(s1)
|
||||||
|
command('bnext')
|
||||||
|
screen:expect(s2)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it("falls back to standard behavior when view can't be recovered", function()
|
it("falls back to standard behavior when view can't be recovered", function()
|
||||||
|
|||||||
Reference in New Issue
Block a user