summaryrefslogtreecommitdiff
path: root/lua/aotrix/multigrep.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/aotrix/multigrep.lua')
-rw-r--r--lua/aotrix/multigrep.lua53
1 files changed, 53 insertions, 0 deletions
diff --git a/lua/aotrix/multigrep.lua b/lua/aotrix/multigrep.lua
new file mode 100644
index 0000000..749102e
--- /dev/null
+++ b/lua/aotrix/multigrep.lua
@@ -0,0 +1,53 @@
+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 live_multigrep = 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")
+ table.insert(args, pieces[2])
+ end
+
+ ---@diagnostic disable-next-line: deprecated
+ return vim.tbl_flatten {
+ args,
+ { "--color=never", "--no-heading", "--with-filename", "--line-number", "--column", "--smart-case" },
+ }
+ end,
+ entry_maker = make_entry.gen_from_vimgrep(opts),
+ cwd = opts.cwd,
+ }
+
+ pickers.new(opts, {
+ debounce = 100,
+ prompt_title = "Multi Grep",
+ finder = finder,
+ previewer = conf.grep_previewer(opts),
+ sorter = require("telescope.sorters").empty(),
+ }):find()
+end
+
+M.setup = function()
+ vim.keymap.set("n", "<leader>pg", live_multigrep)
+end
+
+return M