fix(api): use changedir_func() in nvim_set_current_dir()

Co-Authored-By: smolck <46855713+smolck@users.noreply.github.com>
This commit is contained in:
zeertzjq 2022-02-10 09:41:25 +08:00
parent dba1df6359
commit 23c3f7f572
2 changed files with 28 additions and 3 deletions

View File

@ -31,6 +31,7 @@
#include "nvim/file_search.h" #include "nvim/file_search.h"
#include "nvim/fileio.h" #include "nvim/fileio.h"
#include "nvim/getchar.h" #include "nvim/getchar.h"
#include "nvim/globals.h"
#include "nvim/highlight.h" #include "nvim/highlight.h"
#include "nvim/highlight_defs.h" #include "nvim/highlight_defs.h"
#include "nvim/lua/executor.h" #include "nvim/lua/executor.h"
@ -545,20 +546,19 @@ void nvim_set_current_dir(String dir, Error *err)
return; return;
} }
char string[MAXPATHL]; char_u string[MAXPATHL];
memcpy(string, dir.data, dir.size); memcpy(string, dir.data, dir.size);
string[dir.size] = NUL; string[dir.size] = NUL;
try_start(); try_start();
if (vim_chdir((char_u *)string)) { if (!changedir_func(string, kCdScopeGlobal)) {
if (!try_end(err)) { if (!try_end(err)) {
api_set_error(err, kErrorTypeException, "Failed to change directory"); api_set_error(err, kErrorTypeException, "Failed to change directory");
} }
return; return;
} }
post_chdir(kCdScopeGlobal, true);
try_end(err); try_end(err);
} }

View File

@ -536,6 +536,31 @@ describe('API', function()
end) end)
end) end)
describe('nvim_set_current_dir', function()
local start_dir
before_each(function()
clear()
funcs.mkdir("Xtestdir")
start_dir = funcs.getcwd()
end)
after_each(function()
helpers.rmdir("Xtestdir")
end)
it('works', function()
meths.set_current_dir("Xtestdir")
eq(funcs.getcwd(), start_dir .. helpers.get_pathsep() .. "Xtestdir")
end)
it('sets previous directory', function()
meths.set_current_dir("Xtestdir")
meths.exec('cd -', false)
eq(funcs.getcwd(), start_dir)
end)
end)
describe('nvim_exec_lua', function() describe('nvim_exec_lua', function()
it('works', function() it('works', function()
meths.exec_lua('vim.api.nvim_set_var("test", 3)', {}) meths.exec_lua('vim.api.nvim_set_var("test", 3)', {})