diff options
-rw-r--r-- | src/nvim/window.c | 3 | ||||
-rw-r--r-- | test/functional/ex_cmds/cd_spec.lua | 21 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/nvim/window.c b/src/nvim/window.c index ee99dd5d68..2e97cb2c3e 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -2978,6 +2978,9 @@ int win_new_tabpage(int after, char_u *filename) xfree(newtp); return FAIL; } + + newtp->localdir = tp->localdir ? vim_strsave(tp->localdir) : NULL; + curtab = newtp; /* Create a new empty window. */ diff --git a/test/functional/ex_cmds/cd_spec.lua b/test/functional/ex_cmds/cd_spec.lua index 3cf83cdb3b..74432dbe00 100644 --- a/test/functional/ex_cmds/cd_spec.lua +++ b/test/functional/ex_cmds/cd_spec.lua @@ -140,6 +140,27 @@ for _, cmd in ipairs {'cd', 'chdir'} do end) end) + describe('Local directory gets inherited', function() + it('by tabs', function() + local globalDir = directories.start + + -- Create a new tab and change directory + execute('tabnew') + execute('silent t' .. cmd .. ' ' .. directories.tab) + eq(globalDir .. '/' .. directories.tab, tcwd()) + + -- Create a new tab and verify it has inherited the directory + execute('tabnew') + eq(globalDir .. '/' .. directories.tab, tcwd()) + + -- Change tab and change back, verify that directories are correct + execute('tabnext') + eq(globalDir, tcwd()) + execute('tabprevious') + eq(globalDir .. '/' .. directories.tab, tcwd()) + end) + end) + it('works', function() local globalDir = directories.start -- Create a new tab first and verify that is has the same working dir |