diff options
author | Marco Hinz <mh.codebro@gmail.com> | 2017-01-11 00:51:31 +0100 |
---|---|---|
committer | Marco Hinz <mh.codebro@gmail.com> | 2017-01-13 15:29:00 +0100 |
commit | bd8025727cc1ca4389af8fc690b467e2e25a3903 (patch) | |
tree | 33825f5fd609d9032d6c849d1669ada708c1f88c | |
parent | f68663542037aaa4ae954aacae7adf2e88b151d5 (diff) | |
download | rneovim-bd8025727cc1ca4389af8fc690b467e2e25a3903.tar.gz rneovim-bd8025727cc1ca4389af8fc690b467e2e25a3903.tar.bz2 rneovim-bd8025727cc1ca4389af8fc690b467e2e25a3903.zip |
New event: DirChanged
-rw-r--r-- | src/nvim/auevents.lua | 2 | ||||
-rw-r--r-- | src/nvim/ex_docmd.c | 37 |
2 files changed, 35 insertions, 4 deletions
diff --git a/src/nvim/auevents.lua b/src/nvim/auevents.lua index 8d891effae..6c62748aae 100644 --- a/src/nvim/auevents.lua +++ b/src/nvim/auevents.lua @@ -28,6 +28,7 @@ return { 'CursorHoldI', -- idem, in Insert mode 'CursorMoved', -- cursor was moved 'CursorMovedI', -- cursor was moved in Insert mode + 'DirChanged', -- directory changed 'EncodingChanged', -- after changing the 'encoding' option 'FileAppendCmd', -- append to a file using command 'FileAppendPost', -- after appending to a file @@ -101,6 +102,7 @@ return { -- List of neovim-specific events or aliases for the purpose of generating -- syntax file neovim_specific = { + DirChanged=true, TabClosed=true, TabNew=true, TabNewEntered=true, diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index 5ff79bcfef..e5c05a2498 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -6949,6 +6949,35 @@ void free_cd_dir(void) #endif +static void apply_autocmd_dirchanged(char_u *new_dir, CdScope scope) +{ + dict_T *dict = get_vim_var_dict(VV_EVENT); + char buf[8]; + + switch (scope) { + case kCdScopeGlobal: + snprintf(buf, sizeof(buf), "global"); + break; + case kCdScopeTab: + snprintf(buf, sizeof(buf), "tab"); + break; + case kCdScopeWindow: + snprintf(buf, sizeof(buf), "window"); + break; + case kCdScopeInvalid: + // Should never happen. + assert(false); + } + + dict_add_nr_str(dict, "scope", 0L, (char_u *)buf); + dict_add_nr_str(dict, "cwd", 0L, new_dir); + dict_set_keys_readonly(dict); + + apply_autocmds(EVENT_DIRCHANGED, NULL, new_dir, false, NULL); + + dict_clear(dict); +} + /// Deal with the side effects of changing the current directory. /// /// @param scope Scope of the function call (global, tab or window). @@ -6972,6 +7001,8 @@ void post_chdir(CdScope scope) } } + apply_autocmd_dirchanged(new_dir, scope); + switch (scope) { case kCdScopeGlobal: // We are now in the global directory, no need to remember its name. @@ -6998,8 +7029,6 @@ void post_chdir(CdScope scope) shorten_fnames(TRUE); } - - /// `:cd`, `:tcd`, `:lcd`, `:chdir`, `:tchdir` and `:lchdir`. void ex_cd(exarg_T *eap) { @@ -7061,8 +7090,8 @@ void ex_cd(exarg_T *eap) post_chdir(scope); - /* Echo the new current directory if the command was typed. */ - if (KeyTyped || p_verbose >= 5) + // Echo the new current directory if the command was typed. + if (KeyTyped || p_verbose >= 5) { ex_pwd(eap); } xfree(tofree); |