54 lines
1.4 KiB
Lua
54 lines
1.4 KiB
Lua
|
-- CloseConfirmX plugin for lite text editor
|
||
|
-- implementation by chekoopa
|
||
|
|
||
|
local core = require "core"
|
||
|
local config = require "core.config"
|
||
|
|
||
|
config.closeconfirmx_use_legacy = false
|
||
|
config.closeconfirmx_use_short_name = true
|
||
|
|
||
|
local legacy_confirm = core.confirm_close_all
|
||
|
|
||
|
local function commandful_confirm()
|
||
|
local dirty_count = 0
|
||
|
local dirty_name
|
||
|
for _, doc in ipairs(core.docs) do
|
||
|
if doc:is_dirty() then
|
||
|
dirty_count = dirty_count + 1
|
||
|
dirty_name = doc:get_name()
|
||
|
end
|
||
|
end
|
||
|
if dirty_count > 0 then
|
||
|
local text
|
||
|
if dirty_count == 1 then
|
||
|
if config.closeconfirmx_use_short_name then
|
||
|
dirty_name = dirty_name:match("[^/%\\]*$")
|
||
|
end
|
||
|
text = string.format("Unsaved changes in \"%s\"; Confirm Exit", dirty_name)
|
||
|
else
|
||
|
text = string.format("Unsaved changes in %d docs; Confirm Exit", dirty_count)
|
||
|
end
|
||
|
core.command_view:enter(text, function(_, item)
|
||
|
if item.text:match("^[cC]") then
|
||
|
core.quit(true)
|
||
|
end
|
||
|
end, function(text)
|
||
|
local items = {}
|
||
|
if not text:find("^[^sS]") then table.insert(items, "Stay here") end
|
||
|
if not text:find("^[^cC]") then table.insert(items, "Close Without Saving") end
|
||
|
return items
|
||
|
end)
|
||
|
-- as we delegate a choice inside the callback,
|
||
|
return false
|
||
|
end
|
||
|
return true
|
||
|
end
|
||
|
|
||
|
function core.confirm_close_all()
|
||
|
if config.closeconfirmx_use_legacy then
|
||
|
return legacy_confirm()
|
||
|
else
|
||
|
return commandful_confirm()
|
||
|
end
|
||
|
end
|