aboutsummaryrefslogtreecommitdiff
path: root/src/api/vim.c
diff options
context:
space:
mode:
authorThiago de Arruda <tpadilha84@gmail.com>2014-05-08 14:36:33 -0300
committerThiago de Arruda <tpadilha84@gmail.com>2014-05-13 09:33:40 -0300
commite07099cb7892a4786416c516eea29480e159b128 (patch)
tree04e420496f4a806e7bdbdfe487b066f807649cbd /src/api/vim.c
parentd8f8521915984a00623562d8606c04e247fa2967 (diff)
downloadrneovim-e07099cb7892a4786416c516eea29480e159b128.tar.gz
rneovim-e07099cb7892a4786416c516eea29480e159b128.tar.bz2
rneovim-e07099cb7892a4786416c516eea29480e159b128.zip
API: Implement vim_change_directory
Diffstat (limited to 'src/api/vim.c')
-rw-r--r--src/api/vim.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/api/vim.c b/src/api/vim.c
index 361a57218c..bc17772bc9 100644
--- a/src/api/vim.c
+++ b/src/api/vim.c
@@ -125,9 +125,25 @@ StringArray vim_list_runtime_paths(void)
return rv;
}
-void vim_change_directory(String dir)
+void vim_change_directory(String dir, Error *err)
{
- abort();
+ char string[dir.size + 1];
+ memcpy(string, dir.data, dir.size);
+ string[dir.size] = NUL;
+
+ try_start();
+
+ if (vim_chdir((char_u *)string)) {
+ if (!try_end(err)) {
+ char msg[] = "failed to change directory";
+ strncpy(err->msg, msg, sizeof(err->msg));
+ err->set = true;
+ }
+ return;
+ }
+
+ post_chdir(FALSE);
+ try_end(err);
}
String vim_get_current_line(void)