aboutsummaryrefslogtreecommitdiff
path: root/plugins/lfautoinsert.lua
diff options
context:
space:
mode:
authorrxi <rxi@users.noreply.github.com>2020-05-05 20:28:58 +0100
committerrxi <rxi@users.noreply.github.com>2020-05-05 20:29:24 +0100
commit9f21c411a3ddc5afddcf3dd05b85f6cc92a48858 (patch)
tree471f4bef12eac7c4bb32c77a9f95fad15e9447b7 /plugins/lfautoinsert.lua
parente6e350b74dae1257e68e7069e9b82935bc31d6e4 (diff)
downloadlite-xl-plugins-9f21c411a3ddc5afddcf3dd05b85f6cc92a48858.tar.gz
lite-xl-plugins-9f21c411a3ddc5afddcf3dd05b85f6cc92a48858.zip
Added plugins `gitstatus` and `lfautoinsert`
Diffstat (limited to 'plugins/lfautoinsert.lua')
-rw-r--r--plugins/lfautoinsert.lua54
1 files changed, 54 insertions, 0 deletions
diff --git a/plugins/lfautoinsert.lua b/plugins/lfautoinsert.lua
new file mode 100644
index 0000000..64006b9
--- /dev/null
+++ b/plugins/lfautoinsert.lua
@@ -0,0 +1,54 @@
+local core = require "core"
+local command = require "core.command"
+local config = require "core.config"
+local keymap = require "core.keymap"
+
+config.autoinsert_map = {
+ ["{\n"] = "}",
+ ["%(\n"] = ")",
+ ["%f[[]%[\n"] = "]",
+ ["%[%[\n"] = "]]",
+ ["=\n"] = false,
+ [":\n"] = false,
+ ["^#if"] = "#endif",
+ ["^#else"] = "#endif",
+ ["%f[%w]do\n"] = "end",
+ ["%f[%w]then\n"] = "end",
+ ["%f[%w]else\n"] = "end",
+ ["%f[%w]repeat\n"] = "until",
+ ["%f[%w]function.*%)\n"] = "end",
+}
+
+
+local function indent_size(doc, line)
+ local text = doc.lines[line] or ""
+ local s, e = text:find("^[\t ]*")
+ return e - s
+end
+
+command.add("core.docview", {
+ ["autoinsert:newline"] = function()
+ command.perform("doc:newline")
+
+ local doc = core.active_view.doc
+ local line = doc:get_selection()
+ local text = doc.lines[line - 1]
+
+ for ptn, close in pairs(config.autoinsert_map) do
+ if text:find(ptn) then
+ if close
+ and indent_size(doc, line + 1) <= indent_size(doc, line - 1)
+ then
+ command.perform("doc:newline")
+ core.active_view:on_text_input(close)
+ command.perform("doc:move-to-previous-line")
+ end
+ command.perform("doc:indent")
+ end
+ end
+ end
+})
+
+keymap.add {
+ ["return"] = { "command:submit", "autoinsert:newline" }
+}