diff --git a/lua/mj/utils.lua b/lua/mj/utils.lua index 844c8ac..0059fba 100644 --- a/lua/mj/utils.lua +++ b/lua/mj/utils.lua @@ -15,4 +15,28 @@ M.close_terminal_buffer = function(new_tab) end end +function M.branch_files(opts) + opts = opts or {} + local include_deleted = opts.include_deleted or false + + -- Get current branch; if empty, we're probably not in a git repo. + local current_branch = vim.fn.systemlist("git branch --show-current")[1] + if not current_branch or current_branch == "" then + print("Not inside a git repository!") + return + end + + -- Check if master exists: if so, use origin/master, else origin/main. + vim.fn.system("git rev-parse --verify master > /dev/null 2>&1") + local base_branch = (vim.v.shell_error == 0) and "origin/master" or "origin/main" + + -- If not including deleted files, filter them out. + local diff_filter = include_deleted and "" or "--diff-filter=d" + local git_cmd = + string.format("git diff --name-status %s %s...%s | awk '{print $2}'", diff_filter, base_branch, current_branch) + return vim.fn.systemlist(git_cmd) +end + +M.branch_files() + return M diff --git a/lua/plugins/harpoon.lua b/lua/plugins/harpoon.lua index 0741f1a..e1c64da 100644 --- a/lua/plugins/harpoon.lua +++ b/lua/plugins/harpoon.lua @@ -69,7 +69,7 @@ return { local set = LazyVim.safe_keymap_set - set("n", "h", function() + set("n", "H", function() toggle_telescope(harpoon:list()) end, { desc = "Open harpoon window" }) end, diff --git a/lua/plugins/telescope.lua b/lua/plugins/telescope.lua index 310dfd6..3057a63 100644 --- a/lua/plugins/telescope.lua +++ b/lua/plugins/telescope.lua @@ -1,5 +1,23 @@ -- lua/plugins/telescope.lua -- https://www.lazyvim.org/extras/editor/telescope +local function searchBranchFiles() + local results = require("mj.utils").branch_files() + local pickers = require("telescope.pickers") + local finders = require("telescope.finders") + local sorters = require("telescope.sorters") + local previewers = require("telescope.previewers") + + pickers + .new({}, { + prompt_title = "Branch Files", + finder = finders.new_table({ + results = results, + }), + sorter = sorters.get_generic_fuzzy_sorter(), + previewer = previewers.vim_buffer_cat.new({}), + }) + :find() +end return { { "nvim-telescope/telescope.nvim", @@ -14,6 +32,8 @@ return { vim.keymap.set("n", "sg", function() require("mj.telescope.grep_with_args").setup() end, { desc = "Custom Live Grep With args" }) + + vim.keymap.set("n", "h", searchBranchFiles, { desc = "Telescope find branch files" }) end, }, }