diff --git a/lua/config/ftkeybinds.lua b/lua/config/ftkeybinds.lua index 3a9226f..dd1403e 100644 --- a/lua/config/ftkeybinds.lua +++ b/lua/config/ftkeybinds.lua @@ -1,8 +1,13 @@ -local function markdown(options) +local function options2list(options) local options_list = {} for opt in options:gmatch("%S+") do table.insert(options_list, opt) end + return options_list +end + +local function markdown(options) + local options_list = options2list(options or "") local cmd = vim.list_extend( { "pandoc" }, options_list @@ -25,49 +30,71 @@ local function markdown(options) 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 + local options_list = options2list(options or "") + local options_string = "" + for _, opt in pairs(options_list) do + options_string = options_string .. " -D" .. opt 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, - } + local process = vim.system({ + "arduino-cli", + "compile", + "-e", + "--build-property", + "compiler.cpp.extra_flags=" .. options_string, + 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 -local function tex(options) +--local function arduino2() +-- 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", +-- "-e", +-- "--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() local pdflatex_process = vim.system({ "pdflatex", vim.fn.expand("%:p"), @@ -78,25 +105,25 @@ local function tex(options) 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) +local default = { + __index = function() + return function() end + end, +} - fttable[vim.bo.filetype](options) -end +local fttable = { + ["markdown"] = markdown, + ["arduino"] = arduino, + ["tex"] = tex, +} +setmetatable(fttable, default) -vim.keymap.set("n", "", function () run_ft_action("") end) +local fttable2 = { + ["markdown"] = function() markdown(vim.fn.input("enter additional options")) end, + ["arduino"] = function() arduino(vim.fn.input("enter preprocessor defines")) end, +} +setmetatable(fttable2, fttable) -vim.keymap.set("n", "", function() - run_ft_action(vim.fn.input("enter additional options")) -end) +vim.keymap.set("n", "", function() fttable[vim.bo.filetype]() end) +vim.keymap.set("n", "", function() fttable2[vim.bo.filetype]() end)