From 2cb7fd90b3c9291fbbb906dbce39d48a21cc7f8c Mon Sep 17 00:00:00 2001 From: "Kenneth Benzie (Benie)" Date: Fri, 8 Mar 2024 18:46:58 +0000 Subject: [PATCH] temp! --- after/ftplugin/c.lua | 1 + after/ftplugin/cpp.lua | 2 + init.lua | 1 + lua/build.lua | 80 +++++++++++++++++++++++++++++++++++++++ lua/plugins/telescope.lua | 1 + 5 files changed, 85 insertions(+) create mode 100644 after/ftplugin/c.lua create mode 100644 lua/build.lua 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..f6c3ef1 --- /dev/null +++ b/lua/build.lua @@ -0,0 +1,80 @@ +local build = {} + +function build.dir(opts) + print(vim.inspect(opts)) + local num_fargs = table.maxn(opts.fargs) + local dir = nil + + for index, arg in ipairs(opts.fargs) do + print(index, arg) + end + + 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 + -- TODO: Implement Telescope picker + -- Prompt user to choose dir with to inputlist + local choices = {} + for index, choice in ipairs(dirs) do + table.insert(choices, tostring(index) .. ': ' .. choice) + end + local index = vim.fn.inputlist(choices) + dir = dirs[index] + print(' ' .. dir) + end + + elseif num_fargs == 1 then + -- Single argument, invoked as :BuildDir + dir = opts.fargs[1] + + else + error('build#dir called with too many arguments') + 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')