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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
local CURRENT_COMMAND = nil
local data_path = vim.fn.stdpath("data")
---@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 writeTableToJsonFile = function(table, filePath)
local file, error = io.open(filePath, 'w')
if file then
file:write(vim.json.encode(table))
file:close()
else
print("Error in writeTableToJsonFile: " .. error)
end
end
local appendCommandsFromFile = function(commands, commandsFilePath, directory)
local personal_commands_path = commandsFilePath
local current_list_of_commands_json = readJsonFromFile(
personal_commands_path)
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 COMMANDS = {}
appendCommandsFromFile(COMMANDS, data_path .. "/personal_commands.json",
vim.fn.getcwd())
local personalCommands = require("aotrix.personal_commands")
COMMANDS.AddCommand = {
command = function()
CURRENT_COMMAND = personalCommands.createCommand(COMMANDS).command
return CURRENT_COMMAND()
end,
description = function() return "Add command" 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()
end
end)
end
local executeCommand = function(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)
|