mirror of
https://github.com/zoriya/auto-save.nvim.git
synced 2025-12-06 06:36:11 +00:00
feat: GH-40 Add pattern to trigger_events (#42)
This commit is contained in:
19
README.md
19
README.md
@@ -119,9 +119,26 @@ EOF
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Trigger Events
|
||||||
|
|
||||||
|
The `trigger_events` field of the configuration allows the user to customize at which events **auto-save** saves.
|
||||||
|
While the default are very sane and should be enough for most usecases, finetuning for extended possibilities is supported.
|
||||||
|
|
||||||
|
It is also possible to pass a pattern to a trigger event, if you only want to execute the event on special file patterns:
|
||||||
|
|
||||||
|
``` lua
|
||||||
|
{
|
||||||
|
trigger_events = {
|
||||||
|
immediate_save = {
|
||||||
|
{ "BufLeave", pattern = {"*.c", "*.h"} }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### Condition
|
### Condition
|
||||||
|
|
||||||
The condition field of the configuration allows the user to exclude **auto-save** from saving specific buffers.
|
The `condition` field of the configuration allows the user to exclude **auto-save** from saving specific buffers.
|
||||||
|
|
||||||
Here is an example using a helper function from `auto-save.utils.data` that disables auto-save for specified file types:
|
Here is an example using a helper function from `auto-save.utils.data` that disables auto-save for specified file types:
|
||||||
|
|
||||||
|
|||||||
@@ -12,11 +12,11 @@ Config = {
|
|||||||
cleaning_interval = 1250, -- (milliseconds) automatically clean MsgArea after displaying `message`. See :h MsgArea
|
cleaning_interval = 1250, -- (milliseconds) automatically clean MsgArea after displaying `message`. See :h MsgArea
|
||||||
},
|
},
|
||||||
trigger_events = { -- See :h events
|
trigger_events = { -- See :h events
|
||||||
--- @type nil|string[]
|
--- @type TriggerEvent[]?
|
||||||
immediate_save = { "BufLeave", "FocusLost" }, -- vim events that trigger an immediate save
|
immediate_save = { "BufLeave", "FocusLost" }, -- vim events that trigger an immediate save
|
||||||
--- @type nil|string[]
|
--- @type TriggerEvent[]?
|
||||||
defer_save = { "InsertLeave", "TextChanged" }, -- vim events that trigger a deferred save (saves after `debounce_delay`)
|
defer_save = { "InsertLeave", "TextChanged" }, -- vim events that trigger a deferred save (saves after `debounce_delay`)
|
||||||
--- @type nil|string[]
|
--- @type TriggerEvent[]?
|
||||||
cancel_defered_save = { "InsertEnter" }, -- vim events that cancel a pending deferred save
|
cancel_defered_save = { "InsertEnter" }, -- vim events that cancel a pending deferred save
|
||||||
},
|
},
|
||||||
-- function that takes the buffer handle and determines whether to save the current buffer or not
|
-- function that takes the buffer handle and determines whether to save the current buffer or not
|
||||||
|
|||||||
@@ -117,40 +117,33 @@ function M.on()
|
|||||||
local augroup = autocmds.create_augroup({ clear = true })
|
local augroup = autocmds.create_augroup({ clear = true })
|
||||||
|
|
||||||
local events = cnf.opts.trigger_events
|
local events = cnf.opts.trigger_events
|
||||||
|
autocmds.create_autocmd_for_trigger_events(events.immediate_save, {
|
||||||
if events.immediate_save ~= nil and #events.immediate_save > 0 then
|
callback = function(opts)
|
||||||
api.nvim_create_autocmd(events.immediate_save, {
|
if should_be_saved(opts.buf) then
|
||||||
callback = function(opts)
|
immediate_save(opts.buf)
|
||||||
if should_be_saved(opts.buf) then
|
end
|
||||||
immediate_save(opts.buf)
|
end,
|
||||||
end
|
group = augroup,
|
||||||
end,
|
desc = "Immediately save a buffer",
|
||||||
group = augroup,
|
})
|
||||||
desc = "Immediately save a buffer",
|
autocmds.create_autocmd_for_trigger_events(events.defer_save, {
|
||||||
})
|
callback = function(opts)
|
||||||
end
|
if should_be_saved(opts.buf) then
|
||||||
if events.defer_save ~= nil and #events.defer_save > 0 then
|
defer_save(opts.buf)
|
||||||
api.nvim_create_autocmd(events.defer_save, {
|
end
|
||||||
callback = function(opts)
|
end,
|
||||||
if should_be_saved(opts.buf) then
|
group = augroup,
|
||||||
defer_save(opts.buf)
|
desc = "Save a buffer after the `debounce_delay`",
|
||||||
end
|
})
|
||||||
end,
|
autocmds.create_autocmd_for_trigger_events(events.cancel_defered_save, {
|
||||||
group = augroup,
|
callback = function(opts)
|
||||||
desc = "Save a buffer after the `debounce_delay`",
|
if should_be_saved(opts.buf) then
|
||||||
})
|
cancel_timer(opts.buf)
|
||||||
end
|
end
|
||||||
if events.cancel_defered_save ~= nil and #events.cancel_defered_save > 0 then
|
end,
|
||||||
api.nvim_create_autocmd(events.cancel_defered_save, {
|
group = augroup,
|
||||||
callback = function(opts)
|
desc = "Cancel a pending save timer for a buffer",
|
||||||
if should_be_saved(opts.buf) then
|
})
|
||||||
cancel_timer(opts.buf)
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
group = augroup,
|
|
||||||
desc = "Cancel a pending save timer for a buffer",
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
local function setup_dimming()
|
local function setup_dimming()
|
||||||
if cnf.opts.execution_message.enabled then
|
if cnf.opts.execution_message.enabled then
|
||||||
|
|||||||
4
lua/auto-save/types.lua
Normal file
4
lua/auto-save/types.lua
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
--- @meta
|
||||||
|
|
||||||
|
--- @alias VerboseTriggerEvent { [1]: string, pattern?: string }
|
||||||
|
--- @alias TriggerEvent string | VerboseTriggerEvent
|
||||||
@@ -3,6 +3,15 @@ local M = {}
|
|||||||
local api = vim.api
|
local api = vim.api
|
||||||
local augroup_name = "AutoSave"
|
local augroup_name = "AutoSave"
|
||||||
|
|
||||||
|
--- @param event TriggerEvent
|
||||||
|
--- @return VerboseTriggerEvent
|
||||||
|
local function parse_trigger_event(event)
|
||||||
|
if type(event) == "string" then
|
||||||
|
return { event }
|
||||||
|
end
|
||||||
|
return event
|
||||||
|
end
|
||||||
|
|
||||||
--- @param opts? table
|
--- @param opts? table
|
||||||
--- @return number
|
--- @return number
|
||||||
M.create_augroup = function(opts)
|
M.create_augroup = function(opts)
|
||||||
@@ -16,4 +25,15 @@ M.exec_autocmd = function(pattern, saved_buffer)
|
|||||||
api.nvim_exec_autocmds("User", { pattern = pattern, data = { saved_buffer = saved_buffer } })
|
api.nvim_exec_autocmds("User", { pattern = pattern, data = { saved_buffer = saved_buffer } })
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--- @param trigger_events TriggerEvent[]?
|
||||||
|
M.create_autocmd_for_trigger_events = function(trigger_events, autocmd_opts)
|
||||||
|
if trigger_events ~= nil then
|
||||||
|
for _, event in pairs(trigger_events) do
|
||||||
|
local parsed_event = parse_trigger_event(event)
|
||||||
|
local autocmd_opts_with_pattern = vim.tbl_extend("force", autocmd_opts, { pattern = parsed_event.pattern })
|
||||||
|
api.nvim_create_autocmd(parsed_event[1], autocmd_opts_with_pattern)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|||||||
Reference in New Issue
Block a user