83 lines
2.2 KiB
Lua
83 lines
2.2 KiB
Lua
local function markdown(options)
|
|
local options_list = {}
|
|
for opt in options:gmatch("%S+") do
|
|
table.insert(options_list, opt)
|
|
end
|
|
local cmd = vim.list_extend(
|
|
{ "pandoc" },
|
|
options_list
|
|
)
|
|
table.insert(cmd, vim.fn.expand("%:p"))
|
|
table.insert(cmd, "-o")
|
|
table.insert(cmd, vim.fn.expand("%:p:r") .. ".pdf")
|
|
local pandoc_process = vim.system(cmd)
|
|
local pandoc_result = pandoc_process:wait()
|
|
vim.notify(pandoc_result.stdout, vim.log.levels.INFO);
|
|
vim.notify(pandoc_result.stderr, vim.log.levels.ERROR);
|
|
end
|
|
|
|
local function arduino(options)
|
|
local arduino_process = vim.system({
|
|
"arduino-cli",
|
|
"board",
|
|
"listall",
|
|
"--json"
|
|
})
|
|
local boards_json = arduino_process:wait()
|
|
|
|
local jq_process = vim.system({
|
|
"jq",
|
|
"[.boards.[] | {(.name): .fqbn}] | add",
|
|
}, { stdin = boards_json.stdout })
|
|
local boards_jq = jq_process:wait().stdout or {}
|
|
local boards_table = vim.json.decode(boards_jq)
|
|
|
|
local function table_keys(t)
|
|
local keys = {}
|
|
for k in pairs(t) do keys[#keys + 1] = k end
|
|
return keys
|
|
end
|
|
|
|
local keys = table_keys(boards_table)
|
|
table.sort(keys)
|
|
require("fzf-lua").fzf_exec(keys, {
|
|
actions = {
|
|
['default'] = function(selected, opts)
|
|
local process = vim.system({
|
|
"arduino-cli",
|
|
"compile",
|
|
"--fqbn",
|
|
boards_table[selected[1]],
|
|
vim.fn.expand("%:p:h")
|
|
})
|
|
local result = process:wait()
|
|
|
|
vim.notify(result.stdout, vim.log.levels.INFO)
|
|
vim.notify(result.stderr, vim.log.levels.ERROR)
|
|
end,
|
|
}
|
|
})
|
|
end
|
|
|
|
local function run_ft_action(options)
|
|
local default = {
|
|
__index = function()
|
|
return function() end
|
|
end,
|
|
}
|
|
local fttable = {
|
|
["markdown"] = markdown,
|
|
["arduino"] = arduino,
|
|
}
|
|
setmetatable(fttable, default)
|
|
|
|
fttable[vim.bo.filetype](options)
|
|
end
|
|
|
|
vim.keymap.set("n", "<F5>", function () run_ft_action("") end)
|
|
|
|
vim.keymap.set("n", "<F6>", function()
|
|
run_ft_action(vim.fn.input("enter additional options"))
|
|
end)
|
|
|