diff options
author | rxi <rxi@users.noreply.github.com> | 2020-05-05 20:28:58 +0100 |
---|---|---|
committer | rxi <rxi@users.noreply.github.com> | 2020-05-05 20:29:24 +0100 |
commit | 9f21c411a3ddc5afddcf3dd05b85f6cc92a48858 (patch) | |
tree | 471f4bef12eac7c4bb32c77a9f95fad15e9447b7 /plugins/lfautoinsert.lua | |
parent | e6e350b74dae1257e68e7069e9b82935bc31d6e4 (diff) | |
download | lite-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.lua | 54 |
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" } +} |