irongit

feat(nvim): search current folder with leader ,

huncholanehuncholaneauthored
parent bb42f6acommit 679a359183c741d3bd24074778fba5d965e454e8Browse files

2 files changed, +65 -1

+1-1nvim/lua/keymaps.lua
@@ -12,7 +12,7 @@ easymap("n", "<leader>h", ":nohl<cr>", "Remove Highlights")
1212 easymap("n", "<leader><Space>", ":Telescope find_files<cr>", "Files")
1313 easymap("n", "<leader>l", ":<C-p><cr>", "Last Command")
1414 easymap("n", "<leader>/", ":Telescope live_grep<cr>", "Live Grep")
15-easymap("n", "<leader>,", ":Telescope buffers<cr>", "Find Buffer")
15+easymap("n", "<leader>,", ":Telescope current_folder<cr>", "Search Current Folder")
1616 easymap("n", "<leader>m", ':exe "resize ".float2nr(&lines*0.8)<cr>', "80% Window")
1717 easymap("n", "<leader>s", ":Scratch<cr>", "Scratch")
1818 easymap("n", "<leader>g", ":Telescope git_bcommits<cr>", "Buffer Commits")
+64-0nvim/lua/telescope/_extensions/current_folder.lua
@@ -0,0 +1,64 @@
1+local has_telescope, telescope = pcall(require, "telescope")
2+if not has_telescope then
3+ error("This plugin requires nvim-telescope/telescope.nvim")
4+end
5+
6+local pickers = require("telescope.pickers")
7+local finders = require("telescope.finders")
8+local conf = require("telescope.config").values
9+local actions = require("telescope.actions")
10+local action_state = require("telescope.actions.state")
11+local devicons = require("nvim-web-devicons")
12+
13+local M = {}
14+
15+M.current_folder = function(opts)
16+ opts = opts or {}
17+ local current_file = vim.api.nvim_buf_get_name(0)
18+ if current_file == "" then
19+ print("No file open")
20+ return
21+ end
22+
23+ local cwd = vim.fn.fnamemodify(current_file, ":h")
24+ local files = vim.fn.readdir(cwd, function(name)
25+ return name ~= "." and name ~= ".."
26+ end)
27+
28+ -- turn into entries with icons
29+ local entries = {}
30+ for _, fname in ipairs(files) do
31+ local icon, hl = devicons.get_icon(fname, vim.fn.fnamemodify(fname, ":e"), { default = true })
32+ table.insert(entries, {
33+ value = fname,
34+ display = icon .. " " .. fname,
35+ ordinal = fname,
36+ hl_group = hl,
37+ })
38+ end
39+
40+ pickers.new(opts, {
41+ prompt_title = "Files in " .. cwd,
42+ finder = finders.new_table({
43+ results = entries,
44+ entry_maker = function(entry) return entry end,
45+ }),
46+ sorter = conf.generic_sorter(opts),
47+ previewer = conf.file_previewer(opts),
48+ attach_mappings = function(prompt_bufnr, map)
49+ actions.select_default:replace(function()
50+ actions.close(prompt_bufnr)
51+ local selection = action_state.get_selected_entry()
52+ local filename = cwd .. "/" .. selection.value
53+ vim.cmd("edit " .. vim.fn.fnameescape(filename))
54+ end)
55+ return true
56+ end,
57+ }):find()
58+end
59+
60+return telescope.register_extension({
61+ exports = {
62+ current_folder = M.current_folder,
63+ },
64+})