summaryrefslogtreecommitdiff
path: root/lua/aotrix/build.lua
blob: b5dc3bb0211ce8e003141fe8988fac52b5dcd331 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
local BUILD_COMMAND = ""

---@return nil
function createFloatingWindow()
    local max_height = vim.api.nvim_win_get_height(0)
    local max_width = vim.api.nvim_win_get_width(0)
    local window_height = math.floor(max_height / 2)
    local window_width = math.floor(max_width / 2)
    local window_buffer = vim.api.nvim_create_buf(false, true)
    vim.api.nvim_open_win(window_buffer, true, {
        border = "rounded",
        style = "minimal",
        relative = "editor",
        noautocmd = true,
        height = window_height,
        width = window_width,
        col = math.floor((max_width - window_width) / 2),
        row = math.floor((max_height - window_height) / 2)
    })
    return window_buffer
end

---@return nil
function createFloatingTerminal()
    createFloatingWindow()
    vim.cmd.term()
    vim.cmd.startinsert()
end

---@param command string
---@return nil
function executeCommandInTerminal(command)
    local channel = vim.bo.channel
    -- 'clear' is used to hide the command
    local exit_message = "\nPress enter to exit..."
    vim.api.nvim_chan_send(channel,
                           "clear && " .. command .. "; echo '" .. exit_message ..
                               "' && read -s && exit" .. "\n")
end

function setBuildCommand()
    BUILD_COMMAND = vim.fn.input("Enter compile command: ", BUILD_COMMAND)
end

function build()
    if string.len(BUILD_COMMAND) == 0 then setBuildCommand() end
    if string.len(BUILD_COMMAND) > 0 then
        createFloatingTerminal()
        executeCommandInTerminal(BUILD_COMMAND)
    end
end

vim.keymap.set("n", "mc", setBuildCommand)
vim.keymap.set("n", "mt", build)