diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2024-02-29 16:38:35 +0100 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2024-02-29 17:00:46 +0100 |
| commit | 055cbe24255be0b376d840a92948c830c46e3adc (patch) | |
| tree | 84c044003f8e49fdd45d451f3537537e3fcf5ed2 /config/vis/plugins/vis-build/init.lua | |
| parent | fa90804d713d68831e850d960c211bd0d656a736 (diff) | |
| download | dotfiles-055cbe24255be0b376d840a92948c830c46e3adc.tar.gz dotfiles-055cbe24255be0b376d840a92948c830c46e3adc.zip | |
[vis] add simple plugin to asynchronously run build commands
Diffstat (limited to 'config/vis/plugins/vis-build/init.lua')
| -rw-r--r-- | config/vis/plugins/vis-build/init.lua | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/config/vis/plugins/vis-build/init.lua b/config/vis/plugins/vis-build/init.lua new file mode 100644 index 0000000..0558c39 --- /dev/null +++ b/config/vis/plugins/vis-build/init.lua @@ -0,0 +1,52 @@ +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:info(name .. ' done') + 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, '<M-b>', function() + vis:command('build') + return 0 +end, 'Asynchronously build the current file or project') + +return M |
