summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Vink <ivi@vinkies.net>2025-02-21 22:35:42 +0100
committerMike Vink <ivi@vinkies.net>2025-02-21 22:35:42 +0100
commit77b2a080d4c571e68d5a61a95da7c968014f1827 (patch)
tree343f886c84dfb90e4312dd0ea8d61ca41480ab93
parent27635281407220cf3cb73a6d27b3f308b7dcf7bc (diff)
add first version of compile win
-rw-r--r--.config/vis/vis-compile-win/init.lua62
1 files changed, 62 insertions, 0 deletions
diff --git a/.config/vis/vis-compile-win/init.lua b/.config/vis/vis-compile-win/init.lua
new file mode 100644
index 0000000..02fc3dd
--- /dev/null
+++ b/.config/vis/vis-compile-win/init.lua
@@ -0,0 +1,62 @@
+require('vis')
+local process_name = "vis-compile-win"
+
+local buf
+
+local M = {}
+
+local function append_to_win(win, buffer)
+ local file = win.file
+ local pos = win.selection.pos
+ local result = file:insert(file.size, buffer)
+ file.modified = false
+ win.selection.pos = pos
+end
+
+function M:compile(cmd, callback)
+ vis:command"new"
+ self.callback = callback
+ self.win = vis.win
+ self.buf = [[Compilation started at ]]..os.date("%a %b %d %X")..[[
+
+
+]]..cmd..[[
+
+]]
+ append_to_win(self.win, self.buf)
+ self.fd = vis:communicate(process_name, cmd)
+ return true
+end
+
+function M:recv_data(buffer)
+ local data = buffer or ""
+ self.buf = self.buf..data
+ append_to_win(self.win, data)
+ return true
+end
+
+function M:finish_compilation(event, code, buffer)
+ local footer = [[
+
+Compilation finished at ]]..os.date("%a %b %d %X")
+ self.buf = self.buf..footer
+ append_to_win(self.win, footer)
+ return self:callback()
+end
+
+vis:command_register("Compile", function(argv, force, win, selection, range)
+ return M:compile(table.concat(argv, " "))
+end)
+
+vis.events.subscribe(vis.events.PROCESS_RESPONSE, function(name, event, code, buffer)
+ if name ~= process_name then end
+
+ if event == 'EXIT' or event == 'SIGNAL' then
+ M:finish_compilation(event, code, buffer)
+ return
+ end
+
+ M:recv_data(buffer)
+end)
+
+return M