aboutsummaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorrxi <rxi@users.noreply.github.com>2021-02-24 11:20:46 +0000
committerGitHub <noreply@github.com>2021-02-24 11:20:46 +0000
commit664d5f22585181d34ea5b83bbd4deb1aa3b008af (patch)
treedc8418ced5e8bb5fd0490eefd515ff9e54f6be18 /plugins
parent3ccbf30b858b3efc0a7e2e3d8b3f9fc8bd8ff8fa (diff)
parente5f2add58125aa62267232ae89bca5fac64a4358 (diff)
downloadlite-xl-plugins-664d5f22585181d34ea5b83bbd4deb1aa3b008af.tar.gz
lite-xl-plugins-664d5f22585181d34ea5b83bbd4deb1aa3b008af.zip
Merge pull request #121 from chekoopa/cv-confirm
add CloseConfirmX
Diffstat (limited to 'plugins')
-rw-r--r--plugins/closeconfirmx.lua54
1 files changed, 54 insertions, 0 deletions
diff --git a/plugins/closeconfirmx.lua b/plugins/closeconfirmx.lua
new file mode 100644
index 0000000..805fe3b
--- /dev/null
+++ b/plugins/closeconfirmx.lua
@@ -0,0 +1,54 @@
+-- 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
+