diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-06-07 09:29:12 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2023-06-07 09:49:17 +0800 |
commit | dd24ea819507e3a5da04df55df7dda5240e5b57f (patch) | |
tree | 3c4cd503d1e881b68feaa5c235906f6f9ca7949b | |
parent | 971049f3189d4769db5e9896cd19b555719b3d09 (diff) | |
download | rneovim-dd24ea819507e3a5da04df55df7dda5240e5b57f.tar.gz rneovim-dd24ea819507e3a5da04df55df7dda5240e5b57f.tar.bz2 rneovim-dd24ea819507e3a5da04df55df7dda5240e5b57f.zip |
fix(events): don't expand non-file as file name
-rw-r--r-- | src/nvim/autocmd.c | 1 | ||||
-rw-r--r-- | src/nvim/path.c | 10 | ||||
-rw-r--r-- | test/functional/api/autocmd_spec.lua | 28 |
3 files changed, 21 insertions, 18 deletions
diff --git a/src/nvim/autocmd.c b/src/nvim/autocmd.c index 564a7b4f87..427bce0e80 100644 --- a/src/nvim/autocmd.c +++ b/src/nvim/autocmd.c @@ -1676,6 +1676,7 @@ bool apply_autocmds_group(event_T event, char *fname, char *fname_io, bool force || event == EVENT_USER || event == EVENT_WINCLOSED || event == EVENT_WINRESIZED || event == EVENT_WINSCROLLED) { fname = xstrdup(fname); + autocmd_fname_full = true; // don't expand it later } else { fname = FullName_save(fname, false); } diff --git a/src/nvim/path.c b/src/nvim/path.c index 21a3a67e24..ea0d5a8be1 100644 --- a/src/nvim/path.c +++ b/src/nvim/path.c @@ -2087,17 +2087,17 @@ char *path_shorten_fname(char *full_path, char *dir_name) assert(dir_name != NULL); size_t len = strlen(dir_name); - // If dir_name is a path head, full_path can always be made relative. - if (len == (size_t)path_head_length() && is_path_head(dir_name)) { - return full_path + len; - } - // If full_path and dir_name do not match, it's impossible to make one // relative to the other. if (path_fnamencmp(dir_name, full_path, len) != 0) { return NULL; } + // If dir_name is a path head, full_path can always be made relative. + if (len == (size_t)path_head_length() && is_path_head(dir_name)) { + return full_path + len; + } + char *p = full_path + len; // If *p is not pointing to a path separator, this means that full_path's diff --git a/test/functional/api/autocmd_spec.lua b/test/functional/api/autocmd_spec.lua index 57390519de..4cfe8672b1 100644 --- a/test/functional/api/autocmd_spec.lua +++ b/test/functional/api/autocmd_spec.lua @@ -228,23 +228,28 @@ describe('autocmd api', function() end) it('receives an args table', function() - local res = exec_lua [[ - local group_id = vim.api.nvim_create_augroup("TestGroup", {}) - local autocmd_id = vim.api.nvim_create_autocmd("User", { + local group_id = meths.create_augroup("TestGroup", {}) + -- Having an existing autocmd calling expand("<afile>") shouldn't change args #18964 + meths.create_autocmd('User', { + group = 'TestGroup', + pattern = 'Te*', + command = 'call expand("<afile>")', + }) + + local autocmd_id = exec_lua [[ + return vim.api.nvim_create_autocmd("User", { group = "TestGroup", pattern = "Te*", callback = function(args) vim.g.autocmd_args = args end, }) - - return {group_id, autocmd_id} ]] meths.exec_autocmds("User", {pattern = "Test pattern"}) eq({ - id = res[2], - group = res[1], + id = autocmd_id, + group = group_id, event = "User", match = "Test pattern", file = "Test pattern", @@ -252,27 +257,24 @@ describe('autocmd api', function() }, meths.get_var("autocmd_args")) -- Test without a group - res = exec_lua [[ - local autocmd_id = vim.api.nvim_create_autocmd("User", { + autocmd_id = exec_lua [[ + return vim.api.nvim_create_autocmd("User", { pattern = "*", callback = function(args) vim.g.autocmd_args = args end, }) - - return {autocmd_id} ]] meths.exec_autocmds("User", {pattern = "some_pat"}) eq({ - id = res[1], + id = autocmd_id, group = nil, event = "User", match = "some_pat", file = "some_pat", buf = 1, }, meths.get_var("autocmd_args")) - end) it('can receive arbitrary data', function() |