summaryrefslogtreecommitdiff
path: root/lua/aotrix/build.lua
blob: 96a7f75d96302f5382ba82956560529c56d0c849 (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
55
56
local CURRENT_COMMAND = nil

---@param command string|nil
---@return nil
function executeCommandInTerminal(command)
    if (command ~= nil) then
        vim.cmd.term()
        vim.cmd.startinsert()
        local channel = vim.bo.channel
        -- 'clear' is used to hide the command
        local exitMessage = "\nPress enter to exit..."
        local commandString = command()
        vim.api.nvim_chan_send(channel,
                               "clear && " .. commandString .. "; echo '" ..
                                   exitMessage .. "' && read -s && exit" .. "\n")
    end
end

local COMMANDS = {}
local personalCommands = require("aotrix.personal_commands")

COMMANDS.AddTempCommand = {
    command = function() return personalCommands.createCommand(COMMANDS) end,
    description = function() return "Add temporary command" end
}

function selectCommand(listOfCommands, callback)
    vim.ui.select(vim.tbl_keys(listOfCommands), {
        prompt = "Select your command.",
        format_item = function(item)
            return listOfCommands[item].description()
        end
    }, function(choice)
        if (choice ~= nil) then
            CURRENT_COMMAND = listOfCommands[choice].command
            callback()
        end
    end)
end

function executeCommand(listOfCommands)
    if (CURRENT_COMMAND == nil) then
        selectCommand(listOfCommands,
                      function()
            executeCommandInTerminal(CURRENT_COMMAND)
        end)
    else
        executeCommandInTerminal(CURRENT_COMMAND)
    end
end

vim.keymap.set("n", "mc", function() executeCommand(COMMANDS) end)
vim.keymap.set("n", "mC", function()
    selectCommand(COMMANDS,
                  function() executeCommandInTerminal(CURRENT_COMMAND) end)
end)