diff options
| author | Mike Vink <ivi@vinkies.net> | 2025-02-21 22:35:42 +0100 |
|---|---|---|
| committer | Mike Vink <ivi@vinkies.net> | 2025-02-21 22:35:42 +0100 |
| commit | 77b2a080d4c571e68d5a61a95da7c968014f1827 (patch) | |
| tree | 343f886c84dfb90e4312dd0ea8d61ca41480ab93 | |
| parent | 27635281407220cf3cb73a6d27b3f308b7dcf7bc (diff) | |
add first version of compile win
| -rw-r--r-- | .config/vis/vis-compile-win/init.lua | 62 |
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 |
