--[[
Based on https://gitlab.com/muhq/vis-build
Changes made:
- stylua format
- print build messages on success
--]]
-- Copyright (c) 2024 Florian Fischer. All rights reserved.
--
-- vis-build is free software: you can redistribute it and/or modify it under
-- the terms of the GNU General Public License as published by the Free Software
-- Foundation, either version 3 of the License, or (at your option) any later
-- version.
--
-- vis-build is distributed in the hope that it will be useful, but WITHOUT
-- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License along with
-- vis-build found in the LICENSE file.
-- If not, see .
local M = {}
M.get_default_build_cmd = function()
return "make"
end
local build_id = 0
local builds = {}
M.new_build = function(cmd)
build_id = build_id + 1
local build_name = "build" .. build_id
local build_fd = vis:communicate(build_name, cmd)
local build = { fd = build_fd, out = "", err = "", cmd = cmd }
builds[build_name] = build
end
vis.events.subscribe(vis.events.PROCESS_RESPONSE, function(name, event, code, msg)
local build = builds[name]
if not build then
return
end
if event == "EXIT" or event == "SIGNAL" then
if code ~= 0 then
vis:message("build: " .. name .. " cmd: " .. build.cmd)
if event == "EXIT" then
vis:message("failed with: " .. code)
else
vis:message("got signal: " .. code)
end
vis:message("stdout:\n" .. build.out)
vis:message("stderr:\n" .. build.err)
else
vis:message(name .. ":\n" .. build.out)
end
builds[name] = nil
end
if event == "STDOUT" then
build.out = build.out .. msg
elseif event == "STDERR" then
build.err = build.err .. msg
end
end)
vis:command_register("build", function(argv)
M.new_build(argv[1] or M.get_default_build_cmd())
end, "Asynchronously build the current file or project")
vis:map(vis.modes.NORMAL, "", function()
vis:command("build")
return 0
end, "Asynchronously build the current file or project")
return M