From e07099cb7892a4786416c516eea29480e159b128 Mon Sep 17 00:00:00 2001 From: Thiago de Arruda Date: Thu, 8 May 2014 14:36:33 -0300 Subject: [PATCH] API: Implement vim_change_directory --- src/api/vim.c | 20 ++++++++++++++++++-- src/api/vim.h | 3 ++- 2 files changed, 20 insertions(+), 3 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) diff --git a/src/api/vim.h b/src/api/vim.h index cc373e1cc2..8cc7650410 100644 --- a/src/api/vim.h +++ b/src/api/vim.h @@ -44,7 +44,8 @@ StringArray vim_list_runtime_paths(void); /// Changes vim working directory /// /// @param dir The new working directory -void vim_change_directory(String dir); +/// @param[out] err Details of an error that may have occurred +void vim_change_directory(String dir, Error *err); /// Return the current line ///