59 lines
1.8 KiB
Lua
59 lines
1.8 KiB
Lua
local api = require("nvim-tree.api")
|
|
local openfile = require'nvim-tree.actions.node.open-file'
|
|
local actions = require'telescope.actions'
|
|
local action_state = require'telescope.actions.state'
|
|
local M = {}
|
|
|
|
local view_selection = function(prompt_bufnr, map)
|
|
actions.select_default:replace(function()
|
|
actions.close(prompt_bufnr)
|
|
local selection = action_state.get_selected_entry()
|
|
local filename = selection.filename
|
|
if (filename == nil) then
|
|
filename = selection[1]
|
|
end
|
|
openfile.fn('preview', filename)
|
|
end)
|
|
return true
|
|
end
|
|
|
|
function M.launch_live_grep(opts)
|
|
return M.launch_telescope("live_grep", opts)
|
|
end
|
|
|
|
function M.launch_find_files(opts)
|
|
return M.launch_telescope("find_files", opts, { active_only_in_tree = true })
|
|
end
|
|
|
|
function M.launch_telescope(func_name, opts, internal_opts)
|
|
internal_opts = internal_opts or {}
|
|
local buffname = vim.fn.bufname()
|
|
if (internal_opts.active_only_in_tree) then
|
|
-- Make sure this is being called in NvimTree
|
|
if (string.sub(buffname, 1, string.len('NvimTree')) ~= 'NvimTree') then
|
|
return "default"
|
|
end
|
|
end
|
|
|
|
local telescope_status_ok, _ = pcall(require, "telescope")
|
|
if not telescope_status_ok then
|
|
return
|
|
end
|
|
local node = api.tree.get_node_under_cursor()
|
|
if (node == nil) then
|
|
-- Tree is probably not open
|
|
return
|
|
end
|
|
local is_folder = node.fs_stat and node.fs_stat.type == 'directory' or false
|
|
local basedir = is_folder and node.absolute_path or vim.fn.fnamemodify(node.absolute_path, ":h")
|
|
if (node.name == '..' and TreeExplorer ~= nil) then
|
|
basedir = TreeExplorer.cwd
|
|
end
|
|
opts = opts or {}
|
|
opts.cwd = basedir
|
|
opts.search_dirs = { basedir }
|
|
opts.attach_mappings = view_selection
|
|
return require("telescope.builtin")[func_name](opts)
|
|
end
|
|
|
|
return M
|