58 lines
1.7 KiB
Lua
58 lines
1.7 KiB
Lua
|
local Util = require("lazyvim.util")
|
||
|
|
||
|
---@class lazyvim.util.telescope.opts
|
||
|
---@field cwd? string|boolean
|
||
|
---@field show_untracked? boolean
|
||
|
|
||
|
---@class lazyvim.util.telescope
|
||
|
---@overload fun(builtin:string, opts?:lazyvim.util.telescope.opts)
|
||
|
local M = setmetatable({}, {
|
||
|
__call = function(m, ...)
|
||
|
return m.telescope(...)
|
||
|
end,
|
||
|
})
|
||
|
|
||
|
-- this will return a function that calls telescope.
|
||
|
-- cwd will default to lazyvim.util.get_root
|
||
|
-- for `files`, git_files or find_files will be chosen depending on .git
|
||
|
---@param builtin string
|
||
|
---@param opts? lazyvim.util.telescope.opts
|
||
|
function M.telescope(builtin, opts)
|
||
|
local params = { builtin = builtin, opts = opts }
|
||
|
return function()
|
||
|
builtin = params.builtin
|
||
|
opts = params.opts
|
||
|
opts = vim.tbl_deep_extend("force", { cwd = Util.root() }, opts or {}) --[[@as lazyvim.util.telescope.opts]]
|
||
|
if builtin == "files" then
|
||
|
if vim.loop.fs_stat((opts.cwd or vim.loop.cwd()) .. "/.git") then
|
||
|
opts.show_untracked = true
|
||
|
builtin = "git_files"
|
||
|
else
|
||
|
builtin = "find_files"
|
||
|
end
|
||
|
end
|
||
|
if opts.cwd and opts.cwd ~= vim.loop.cwd() then
|
||
|
---@diagnostic disable-next-line: inject-field
|
||
|
opts.attach_mappings = function(_, map)
|
||
|
map("i", "<a-c>", function()
|
||
|
local action_state = require("telescope.actions.state")
|
||
|
local line = action_state.get_current_line()
|
||
|
M.telescope(
|
||
|
params.builtin,
|
||
|
vim.tbl_deep_extend("force", {}, params.opts or {}, { cwd = false, default_text = line })
|
||
|
)()
|
||
|
end)
|
||
|
return true
|
||
|
end
|
||
|
end
|
||
|
|
||
|
require("telescope.builtin")[builtin](opts)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function M.config_files()
|
||
|
return Util.telescope("find_files", { cwd = vim.fn.stdpath("config") })
|
||
|
end
|
||
|
|
||
|
return M
|