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