diff --git a/lua/config/ftkeybinds.lua b/lua/config/ftkeybinds.lua index c7566da..eb93469 100644 --- a/lua/config/ftkeybinds.lua +++ b/lua/config/ftkeybinds.lua @@ -1,10 +1,71 @@ +local function markdown() + local pandoc_process = vim.system({ + "pandoc", + vim.fn.expand("%:p"), + "-o", + vim.fn.expand("%:p:r") .. ".pdf", + "--verbose", + }) + 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 -vim.api.nvim_create_autocmd("FileType", { - pattern = { "markdown" }, - callback = function() - vim.schedule(function() - vim.keymap.set("n", "", "!pandoc %:p -o %:p:r.pdf --verbose &> .pandoc-log ", {silent = true}) - end) - end, -}) +local function arduino() + 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 + +vim.keymap.set("n", "", function() + local default = { + __index = function() + return function() end + end, + } + local fttable = { + ["markdown"] = markdown, + ["arduino"] = arduino, + } + setmetatable(fttable, default) + + fttable[vim.bo.filetype]() +end)