diff options
Diffstat (limited to 'lua/aotrix')
| -rw-r--r-- | lua/aotrix/build.lua | 164 | ||||
| -rw-r--r-- | lua/aotrix/personal_commands.lua | 11 | ||||
| -rw-r--r-- | lua/aotrix/plugins/build.lua | 224 |
3 files changed, 224 insertions, 175 deletions
diff --git a/lua/aotrix/build.lua b/lua/aotrix/build.lua deleted file mode 100644 index 933c0ce..0000000 --- a/lua/aotrix/build.lua +++ /dev/null @@ -1,164 +0,0 @@ -local COMMANDS = {} -local CURRENT_COMMAND = nil -local data_path = vim.fn.stdpath("data") -local personalCommands = require("aotrix.personal_commands") -local PERSONAL_COMMAND_JSON_PATH = data_path .. "/personal_commands.json" - ----@param command string|nil ----@return nil -local executeCommandInTerminal = function(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 readJsonFromFile = function(filePath) - local file, error = io.open(filePath, 'r') - if file ~= nil then - local content = file:read("*a") - local decoded_json = vim.json.decode(content) - return decoded_json - else - print("Error in readJsonFromFile: " .. error) - end - return nil -end - -local addCommandToJsonFile = function(commandBlock, commandsFilePath, directory) - local current_json = readJsonFromFile(commandsFilePath) - if current_json ~= nil then - if current_json[directory] == nil then - current_json[directory] = {} - end - -- FIXME: duplicates - table.insert(current_json[directory], { - command = tostring(commandBlock.command()), - description = tostring(commandBlock.description()) - }) - end - local file, error = io.open(commandsFilePath, 'w') - if file then - local indent = vim.bo.expandtab and (' '):rep(vim.o.shiftwidth) or '\t' - file:write(vim.json.encode(current_json, {indent = indent})) - file:close() - else - print("Error in writeTableToJsonFile: " .. error) - end -end - -local updateJsonFile = function(listOfCommands, commandsFilePath, directory) - local current_json = readJsonFromFile(commandsFilePath) - current_json[directory] = {} - for _, value in pairs(listOfCommands) do - table.insert(current_json[directory], { - command = tostring(value.command()), - description = tostring(value.description()) - }) - end - - local file, error = io.open(commandsFilePath, 'w') - if file then - local indent = vim.bo.expandtab and (' '):rep(vim.o.shiftwidth) or '\t' - file:write(vim.json.encode(current_json, {indent = indent})) - file:close() - else - print("Error in updateJsonFile: " .. error) - end -end - -local appendCommandsFromFile = function(commands, commandsFilePath, directory) - local current_list_of_commands_json = readJsonFromFile(commandsFilePath) - if current_list_of_commands_json ~= nil and - current_list_of_commands_json[directory] ~= nil then - for _, block in pairs(current_list_of_commands_json[directory]) do - local new_command_name = block["description"] - commands[new_command_name] = { - command = function() return block["command"] end, - description = function() return new_command_name end - } - end - end -end - -local selectCommand = function(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(choice) - end - end) -end - -local addCommand = function() - local created_command = personalCommands.createCommand(COMMANDS) - addCommandToJsonFile(created_command, PERSONAL_COMMAND_JSON_PATH, - vim.fn.getcwd()) - CURRENT_COMMAND = created_command.command - executeCommandInTerminal(CURRENT_COMMAND) -end - -local deleteCommand = function() - local previous_command = CURRENT_COMMAND - selectCommand(COMMANDS, function(choice) - local index = 0 - for key, _ in pairs(COMMANDS) do - index = index + 1 - if key == choice then - COMMANDS[key] = nil - updateJsonFile(COMMANDS, PERSONAL_COMMAND_JSON_PATH, - vim.fn.getcwd()) - break - end - end - CURRENT_COMMAND = previous_command - end) -end - -vim.api.nvim_create_user_command("AddCommand", addCommand, {}) - -vim.api.nvim_create_user_command("DeleteCommand", deleteCommand, {}) - -vim.api.nvim_create_autocmd({'BufEnter', 'BufWinEnter', 'DirChanged'}, { - callback = function() - COMMANDS = {} - local current_json = readJsonFromFile(PERSONAL_COMMAND_JSON_PATH) - local current_path = vim.fn.getcwd() - if current_json ~= nil then - for existing_directory, _ in pairs(current_json) do - if (string.find(current_path, existing_directory) == 1) then - appendCommandsFromFile(COMMANDS, PERSONAL_COMMAND_JSON_PATH, - existing_directory) - end - end - end - end -}) - -vim.keymap.set("n", "mc", function() - if (CURRENT_COMMAND == nil) then - selectCommand(COMMANDS, - function() - executeCommandInTerminal(CURRENT_COMMAND) - end) - else - executeCommandInTerminal(CURRENT_COMMAND) - end -end) - -vim.keymap.set("n", "mC", function() - selectCommand(COMMANDS, - function() executeCommandInTerminal(CURRENT_COMMAND) end) -end) diff --git a/lua/aotrix/personal_commands.lua b/lua/aotrix/personal_commands.lua deleted file mode 100644 index dd1b586..0000000 --- a/lua/aotrix/personal_commands.lua +++ /dev/null @@ -1,11 +0,0 @@ -return { - createCommand = function(COMMANDS) - local selectedCommand = vim.fn.input('Enter a command: ') - local selectedDescription = vim.fn.input('Name the command: ') - COMMANDS[selectedDescription] = { - command = function() return selectedCommand end, - description = function() return selectedDescription end - } - return COMMANDS[selectedDescription] - end -} diff --git a/lua/aotrix/plugins/build.lua b/lua/aotrix/plugins/build.lua new file mode 100644 index 0000000..c022224 --- /dev/null +++ b/lua/aotrix/plugins/build.lua @@ -0,0 +1,224 @@ +return { + "MunifTanjim/nui.nvim", + config = function() + local COMMANDS = {} + local CURRENT_COMMAND = nil + local data_path = vim.fn.stdpath("data") + local PERSONAL_COMMAND_JSON_PATH = data_path .. + "/personal_commands.json" + + ---@param command string|nil + ---@return nil + local executeCommandInTerminal = function(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 readJsonFromFile = function(filePath) + local file, error = io.open(filePath, 'r') + if file ~= nil then + local content = file:read("*a") + local decoded_json = vim.json.decode(content) + return decoded_json + else + print("Error in readJsonFromFile: " .. error) + end + return nil + end + + local addCommandToJsonFile = function(commandBlock, commandsFilePath, + directory) + local current_json = readJsonFromFile(commandsFilePath) + if current_json ~= nil then + if current_json[directory] == nil then + current_json[directory] = {} + end + -- FIXME: duplicates + table.insert(current_json[directory], { + command = tostring(commandBlock.command()), + description = tostring(commandBlock.description()) + }) + end + local file, error = io.open(commandsFilePath, 'w') + if file then + local indent = + vim.bo.expandtab and (' '):rep(vim.o.shiftwidth) or '\t' + file:write(vim.json.encode(current_json, {indent = indent})) + file:close() + else + print("Error in writeTableToJsonFile: " .. error) + end + end + + local updateJsonFile = function(listOfCommands, commandsFilePath, + directory) + local current_json = readJsonFromFile(commandsFilePath) + current_json[directory] = {} + for _, value in pairs(listOfCommands) do + table.insert(current_json[directory], { + command = tostring(value.command()), + description = tostring(value.description()) + }) + end + + local file, error = io.open(commandsFilePath, 'w') + if file then + local indent = + vim.bo.expandtab and (' '):rep(vim.o.shiftwidth) or '\t' + file:write(vim.json.encode(current_json, {indent = indent})) + file:close() + else + print("Error in updateJsonFile: " .. error) + end + end + + local appendCommandsFromFile = function(commands, commandsFilePath, + directory) + local current_list_of_commands_json = readJsonFromFile( + commandsFilePath) + if current_list_of_commands_json ~= nil and + current_list_of_commands_json[directory] ~= nil then + for _, block in pairs(current_list_of_commands_json[directory]) do + local new_command_name = block["description"] + commands[new_command_name] = { + command = function() + return block["command"] + end, + description = function() + return new_command_name + end + } + end + end + end + + local selectCommand = function(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(choice) + end + end) + end + + local addCommand = function(current_command, commands, + personal_command_json_path) + + local selectedCommand = nil + local event = require("nui.utils.autocmd").event + local Input = require("nui.input") + local input = Input({ + position = "50%", + size = {width = 20}, + border = { + style = "single", + text = {top = "[Howdy?]", top_align = "center"} + }, + win_options = { + winhighlight = "Normal:Normal,FloatBorder:Normal" + } + }, { + prompt = "> ", + default_value = "", + on_submit = function(value) + selectedCommand = value + local selectedDescription = vim.fn.input( + 'Name the command: ') + COMMANDS[selectedDescription] = { + command = function() + return selectedCommand + end, + description = function() + return selectedDescription + end + } + local created_command = COMMANDS[selectedDescription] + addCommandToJsonFile(created_command, + personal_command_json_path, + vim.fn.getcwd()) + current_command = created_command.command + executeCommandInTerminal(current_command) + end + }) + -- mount/open the component + input:mount() + + -- unmount component when cursor leaves buffer + input:on(event.BufLeave, function() input:unmount() end) + + end + + local deleteCommand = function() + local previous_command = CURRENT_COMMAND + selectCommand(COMMANDS, function(choice) + local index = 0 + for key, _ in pairs(COMMANDS) do + index = index + 1 + if key == choice then + COMMANDS[key] = nil + updateJsonFile(COMMANDS, PERSONAL_COMMAND_JSON_PATH, + vim.fn.getcwd()) + break + end + end + CURRENT_COMMAND = previous_command + end) + end + + vim.api.nvim_create_user_command("AddCommand", function() + addCommand(CURRENT_COMMAND, COMMANDS, PERSONAL_COMMAND_JSON_PATH) + end, {}) + + vim.api.nvim_create_user_command("DeleteCommand", deleteCommand, {}) + + vim.api.nvim_create_autocmd({'BufEnter', 'BufWinEnter', 'DirChanged'}, { + callback = function() + COMMANDS = {} + local current_json = + readJsonFromFile(PERSONAL_COMMAND_JSON_PATH) + local current_path = vim.fn.getcwd() + if current_json ~= nil then + for existing_directory, _ in pairs(current_json) do + if (string.find(current_path, existing_directory) == 1) then + appendCommandsFromFile(COMMANDS, + PERSONAL_COMMAND_JSON_PATH, + existing_directory) + end + end + end + end + }) + + vim.keymap.set("n", "mc", function() + if (CURRENT_COMMAND == nil) then + selectCommand(COMMANDS, function() + executeCommandInTerminal(CURRENT_COMMAND) + end) + else + executeCommandInTerminal(CURRENT_COMMAND) + end + end) + + vim.keymap.set("n", "mC", function() + selectCommand(COMMANDS, function() + executeCommandInTerminal(CURRENT_COMMAND) + end) + end) + + end +} |
