diff options
author | rxi <rxi@users.noreply.github.com> | 2021-02-24 11:20:46 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-24 11:20:46 +0000 |
commit | 664d5f22585181d34ea5b83bbd4deb1aa3b008af (patch) | |
tree | dc8418ced5e8bb5fd0490eefd515ff9e54f6be18 /plugins | |
parent | 3ccbf30b858b3efc0a7e2e3d8b3f9fc8bd8ff8fa (diff) | |
parent | e5f2add58125aa62267232ae89bca5fac64a4358 (diff) | |
download | lite-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.lua | 54 |
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 + |