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, "-s") table.insert(cmd, vim.fn.expand("%:p")) table.insert(cmd, "-o") table.insert(cmd, vim.fn.expand("%:p:r") .. ".tex") local pandoc_process = vim.system(cmd) local pandoc_result = pandoc_process:wait() local pdflatex_process = vim.system({ "pdflatex", vim.fn.expand("%:p:r") .. ".tex", }) local pdflatex_result = pdflatex_process:wait() --vim.notify((pandoc_result.stdout .. "\n\n" .. pdflatex_result.stdout):gsub("^%s*", ""):gsub("%s*$", ""), vim.log.levels.INFO); vim.notify((pandoc_result.stderr .. "\n\n" .. pdflatex_result.stderr):gsub("^%s*", ""):gsub("%s*$", ""), 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 tex(options) local pdflatex_process = vim.system({ "pdflatex", vim.fn.expand("%:p"), }) local pdflatex_result = pdflatex_process:wait() vim.notify(pdflatex_result.stdout, vim.log.levels.INFO); vim.notify(pdflatex_result.stderr, vim.log.levels.ERROR); end local function run_ft_action(options) local default = { __index = function() return function() end end, } local fttable = { ["markdown"] = markdown, ["arduino"] = arduino, ["tex"] = tex, } setmetatable(fttable, default) fttable[vim.bo.filetype](options) end vim.keymap.set("n", "", function () run_ft_action("") end) vim.keymap.set("n", "", function() run_ft_action(vim.fn.input("enter additional options")) end)