feat: emit \CanolaFileCreated\ autocmd on file creation

Problem: no way to hook into individual file creation to populate
initial contents, without a plugin-specific config callback.

Solution: fire \`User CanolaFileCreated\` with \`data.path\` after each
successful \`fs.touch\` in the files adapter. Users listen with
\`nvim_create_autocmd\` and write to the path however they like.
This commit is contained in:
Barrett Ruth 2026-03-06 15:46:00 -05:00
parent c7a55fd787
commit 75eaf3994d
Signed by: barrett
GPG key ID: A6C96C9349D2FC81
3 changed files with 1260 additions and 1 deletions

View file

@ -1135,6 +1135,22 @@ CanolaMutationComplete *CanolaMutationComp
additional data fields. Use this event for post-mutation side effects such
as refreshing external status indicators.
CanolaFileCreated *CanolaFileCreated*
Fired after a new file is successfully created on the local filesystem.
The `args.data.path` field contains the absolute path of the created file.
Use this event to populate initial file contents, run formatters, or
perform any other setup on newly created files. >lua
vim.api.nvim_create_autocmd("User", {
pattern = "CanolaFileCreated",
callback = function(args)
local path = args.data.path
if path:match("%.sh$") then
vim.fn.writefile({ "#!/usr/bin/env bash" }, path)
end
end,
})
<
--------------------------------------------------------------------------------
TRASH *canola-trash*

1231
doc/upstream.html Normal file

File diff suppressed because it is too large Load diff

View file

@ -600,7 +600,19 @@ M.perform_action = function(action, cb)
---@diagnostic disable-next-line: param-type-mismatch
uv.fs_symlink(target, path, flags, cb)
else
fs.touch(path, config.new_file_mode, cb)
fs.touch(
path,
config.new_file_mode,
vim.schedule_wrap(function(err)
if not err then
vim.api.nvim_exec_autocmds(
'User',
{ pattern = 'CanolaFileCreated', modeline = false, data = { path = path } }
)
end
cb(err)
end)
)
end
elseif action.type == 'delete' then
local _, path = util.parse_url(action.url)