diff --git a/after/ftplugin/c.lua b/after/ftplugin/c.lua new file mode 100644 index 0000000..cd1cc3b --- /dev/null +++ b/after/ftplugin/c.lua @@ -0,0 +1 @@ +require('build').create_commands() diff --git a/after/ftplugin/cpp.lua b/after/ftplugin/cpp.lua index 1411d13..54962ef 100644 --- a/after/ftplugin/cpp.lua +++ b/after/ftplugin/cpp.lua @@ -1 +1,3 @@ vim.bo.commentstring = '//%s' + +require('build').create_commands() diff --git a/init.lua b/init.lua index 0ce3f8e..8bf6da7 100644 --- a/init.lua +++ b/init.lua @@ -2,6 +2,7 @@ require('settings') require('mappings') require('netrw') require('autocmds') +require('build') local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" if not vim.loop.fs_stat(lazypath) then diff --git a/lua/build.lua b/lua/build.lua new file mode 100644 index 0000000..f672926 --- /dev/null +++ b/lua/build.lua @@ -0,0 +1,69 @@ +local build = {} + +function build.dir(opts) + print(vim.inspect(opts)) + local num_fargs = table.maxn(opts.fargs) + local dir = nil + + if num_fargs == 0 then -- Find build directories + local dirs = build.list_dirs() + local num_dirs = table.maxn(dirs) + + if num_dirs == 0 then + vim.cmd.echoerr('no build directories found') + elseif num_dirs == 1 then + -- One build directory found, use it + dir = dirs[1] + else + -- Multiple build directories found, select one + require("telescope.pickers.multi") { + prompt_title = "Select from the list", + results_title = "Options", + sorting_strategy = "ascending", + layout_strategy = "vertical", + winblend = 10, + border = true, + previewer = false, -- Set to true if you want a preview window + results = dir, + } + end + + end + + if not dir then + return + end + + -- TODO: Set build directory + -- TODO: Post-process compile_commands.json with compdb +end + +function build.run(opts) + print(vim.inspect(opts)) +end + +function build.list_dirs() + local dirs = vim.fn.globpath('.', 'build*') + dirs = vim.fn.substitute(dirs, '\\.\\/', '', 'g') + return vim.fn.split(dirs) +end + +function build.list_targets() + return {} +end + +function build.create_commands() + local buffer = vim.api.nvim_get_current_buf() + + -- Create :BuildDir command + vim.api.nvim_buf_create_user_command(buffer, 'BuildDir', build.dir, { + bang = true, nargs = '?', complete = build.list_dirs, + }) + + -- Create :Build command + vim.api.nvim_buf_create_user_command(buffer, 'Build', build.run, { + bang = true, nargs = '*', complete = build.list_targets, + }) +end + +return build diff --git a/lua/plugins/telescope.lua b/lua/plugins/telescope.lua index e58a028..60778b1 100644 --- a/lua/plugins/telescope.lua +++ b/lua/plugins/telescope.lua @@ -4,6 +4,7 @@ return { 'nvim-lua/plenary.nvim', 'nvim-telescope/telescope-fzy-native.nvim', 'nvim-tree/nvim-web-devicons', + 'axkirillov/easypick.nvim', }, config = function() local telescope = require('telescope')