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.AddCommand = { command = function() CURRENT_COMMAND = personalCommands.createCommand(COMMANDS).command encoded_json = vim.json.encode({first_element = 1, second_element = 2}) print(encoded_json) return CURRENT_COMMAND() 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)