local pickers = require("telescope.pickers") local finders = require("telescope.finders") local make_entry = require("telescope.make_entry") local conf = require("telescope.config").values local M = {} local advanced_grep = function(opts) opts = opts or {} opts.cwd = opts.cwd or vim.uv.cwd() local finder = finders.new_async_job({ command_generator = function(prompt) if not prompt or prompt == "" then return nil end local pieces = vim.split(prompt, " ") local args = { "rg" } if pieces[1] then table.insert(args, "-e") table.insert(args, pieces[1]) end if pieces[2] then table.insert(args, "-g") local input_glob = pieces[2] local glob = input_glob if not input_glob:find("*", 1, true) then glob = "*" .. input_glob .. "*" if input_glob:find("d:", 1, true) then glob = "**/" .. glob .. "/**" glob = glob:gsub("d:", "") end end table.insert(args, glob) end return vim.iter({ args, { "--color=never", "--no-heading", "--with-filename", "--line-number", "--column", "--smart-case" } }) :flatten() :totable() end, entry_maker = make_entry.gen_from_vimgrep(opts), cwd = opts.cwd, }) pickers.new(opts, { debounce = 100, prompt_title = "Advanced Grep", finder = finder, previewer = conf.grep_previewer(opts), sorter = require("telescope.sorters").empty(), }):find() end M.advanced_grep = advanced_grep return M