74 lines
2 KiB
Lua
74 lines
2 KiB
Lua
-- mod-version:3
|
|
local core = require "core"
|
|
local config = require "core.config"
|
|
local Doc = require "core.doc"
|
|
local command = require "core.command"
|
|
local common = require "core.common"
|
|
-- this is used to detect the wait time
|
|
local last_keypress = os.time()
|
|
-- this exists so that we don't end up with multiple copies of the loop running at once
|
|
local looping = false
|
|
local on_text_change = Doc.on_text_change
|
|
|
|
config.plugins.autosave = common.merge({
|
|
enabled = true,
|
|
-- the approximate amount of time, in seconds, that it takes to trigger an autosave
|
|
timeout = 1,
|
|
-- The config specification used by the settings gui
|
|
config_spec = {
|
|
name = "Auto Save",
|
|
{
|
|
label = "Enable",
|
|
description = "Enable or disable the auto save feature.",
|
|
path = "enabled",
|
|
type = "toggle",
|
|
default = true
|
|
},
|
|
{
|
|
label = "Timeout",
|
|
description = "Approximate amount of time in seconds it takes to trigger an autosave.",
|
|
path = "timeout",
|
|
type = "number",
|
|
default = 1,
|
|
min = 1,
|
|
max = 30
|
|
}
|
|
}
|
|
}, config.plugins.autosave)
|
|
|
|
|
|
local function loop_for_save()
|
|
while looping do
|
|
if os.difftime(os.time(), last_keypress) >= config.plugins.autosave.timeout then
|
|
command.perform "doc:save"
|
|
-- stop loop
|
|
looping = false
|
|
end
|
|
-- wait the timeout. may cause timeout to be slightly imprescise
|
|
coroutine.yield(config.plugins.autosave.timeout)
|
|
end
|
|
end
|
|
|
|
|
|
local function updatepress()
|
|
-- set last keypress time to now
|
|
last_keypress = os.time()
|
|
-- put loop in coroutine so it doesn't lag out this script
|
|
if not looping then
|
|
looping = true
|
|
core.add_thread(loop_for_save)
|
|
end
|
|
end
|
|
|
|
|
|
function Doc:on_text_change(type)
|
|
-- check if file is saved
|
|
if config.plugins.autosave.enabled and self.filename
|
|
and self.abs_filename ~= system.absolute_path(USERDIR .. PATHSEP .. "init.lua")
|
|
and self.abs_filename ~= system.absolute_path(".lite_project.lua")
|
|
then
|
|
updatepress()
|
|
end
|
|
return on_text_change(self, type)
|
|
end
|
|
|