From 0d7fa4b63c8448a2939b4fb5172e01c149c41b24 Mon Sep 17 00:00:00 2001 From: rxi Date: Sat, 16 May 2020 10:02:52 +0100 Subject: Added plugin `exec` --- plugins/exec.lua | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 plugins/exec.lua (limited to 'plugins/exec.lua') diff --git a/plugins/exec.lua b/plugins/exec.lua new file mode 100644 index 0000000..e3decfd --- /dev/null +++ b/plugins/exec.lua @@ -0,0 +1,40 @@ +local core = require "core" +local command = require "core.command" + + +local function exec(cmd, keep_newline) + local fp = io.popen(cmd, "r") + local res = fp:read("*a") + fp:close() + return keep_newline and res or res:gsub("%\n$", "") +end + + +local function printfb_quote(str) + local sub = { + ["\\"] = "\\\\", + [string.char(0)] = "\\0000", + ["'"] = "'\\''", + } + return "'" .. str:gsub(".", sub) .. "'" +end + + +command.add("core.docview", { + ["exec:insert"] = function() + core.command_view:enter("Insert Result Of Command", function(cmd) + core.active_view.doc:text_input(exec(cmd)) + end) + end, + + ["exec:replace"] = function() + core.command_view:enter("Replace With Result Of Command", function(cmd) + core.active_view.doc:replace(function(str) + return exec( + "printf %b " .. printfb_quote(str:gsub("%\n$", "") .. "\n") .. " | " .. cmd, + str:find("%\n$") + ) + end) + end) + end, +}) -- cgit v1.2.3