aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-06-07 09:29:12 +0800
committerzeertzjq <zeertzjq@outlook.com>2023-06-07 09:49:17 +0800
commitdd24ea819507e3a5da04df55df7dda5240e5b57f (patch)
tree3c4cd503d1e881b68feaa5c235906f6f9ca7949b
parent971049f3189d4769db5e9896cd19b555719b3d09 (diff)
downloadrneovim-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.c1
-rw-r--r--src/nvim/path.c10
-rw-r--r--test/functional/api/autocmd_spec.lua28
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()