local M = {} -- Shorten function names local actions = require("telescope.actions") local fb_actions = require("telescope").extensions.file_browser.actions --local builtin = require("telescope.builtin") --local themes = require("telescope.themes") --local utils = require("telescope.utils") --local action_state = require("telescope.actions.state") --local layout_actions = require("telescope.actions.layout") --local pickers = require("telescope.pickers") local themes = require("telescope.themes") require("telescope").setup({ defaults = { vimgrep_arguments = { "rg", "--color=never", "--no-heading", "--with-filename", "--line-number", "--column", "--smart-case", "--hidden", "--fixed-strings", "--trim", }, prompt_prefix = " ", selection_caret = " ", entry_prefix = " ", path_display = { "tail" }, --path_display = { "truncate" }, --path_display = { "smart" }, file_ignore_patterns = { "packer_compiled.lua", "~/.config/zsh/plugins", "zcompdump", "%.DS_Store", "%.git/", "%.spl", --"%.log", "%[No Name%]", -- new files / sometimes folders (netrw) "/$", -- ignore folders (netrw) "node_modules", "%.png", "%.zip", "%.pxd", "^.vim/", "^.local/", "^.cache/", "^downloads/", "^music/", --"^node_modules/", --"^undodir/", }, mappings = { i = { [""] = actions.cycle_history_next, [""] = actions.cycle_history_prev, [""] = actions.move_selection_next, [""] = actions.move_selection_previous, --[""] = actions.close, [""] = actions.close, -- close w/ one esc --[""] = "close", -- close w/ one esc [""] = actions.which_key, -- keys from pressing [""] = actions.move_selection_next, [""] = actions.move_selection_previous, [""] = actions.select_default, [""] = actions.select_horizontal, [""] = actions.select_vertical, [""] = actions.select_tab, [""] = actions.preview_scrolling_up, [""] = actions.preview_scrolling_down, [""] = actions.results_scrolling_up, [""] = actions.results_scrolling_down, [""] = actions.toggle_selection + actions.move_selection_worse, [""] = actions.toggle_selection + actions.move_selection_better, [""] = actions.send_to_qflist + actions.open_qflist, [""] = actions.send_selected_to_qflist + actions.open_qflist, [""] = actions.complete_tag, [""] = actions.which_key, -- keys from pressing --[""] = function(prompt_bufnr) -- local selection = require("telescope.actions.state").get_selected_entry() -- local dir = vim.fn.fnamemodify(selection.path, ":p:h") -- require("telescope.actions").close(prompt_bufnr) -- -- Depending on what you want put `cd`, `lcd`, `tcd` -- vim.cmd(string.format("silent lcd %s", dir)) --end, }, n = { --["cd"] = function(prompt_bufnr) -- local selection = require("telescope.actions.state").get_selected_entry() -- local dir = vim.fn.fnamemodify(selection.path, ":p:h") -- require("telescope.actions").close(prompt_bufnr) -- -- Depending on what you want put `cd`, `lcd`, `tcd` -- vim.cmd(string.format("silent lcd %s", dir)) --end, [""] = actions.close, [""] = actions.close, [""] = actions.select_default, [""] = actions.select_horizontal, [""] = actions.select_vertical, [""] = actions.select_tab, [""] = actions.toggle_selection + actions.move_selection_worse, [""] = actions.toggle_selection + actions.move_selection_better, [""] = actions.send_to_qflist + actions.open_qflist, [""] = actions.send_selected_to_qflist + actions.open_qflist, ["j"] = actions.move_selection_next, ["k"] = actions.move_selection_previous, ["H"] = actions.move_to_top, ["M"] = actions.move_to_middle, ["L"] = actions.move_to_bottom, [""] = actions.move_selection_next, [""] = actions.move_selection_previous, ["gg"] = actions.move_to_top, ["G"] = actions.move_to_bottom, [""] = actions.preview_scrolling_up, [""] = actions.preview_scrolling_down, [""] = actions.results_scrolling_up, [""] = actions.results_scrolling_down, ["?"] = actions.which_key, --[""] = function(prompt_bufnr) -- local selection = require("telescope.actions.state").get_selected_entry() -- local dir = vim.fn.fnamemodify(selection.path, ":p:h") -- require("telescope.actions").close(prompt_bufnr) -- -- Depending on what you want put `cd`, `lcd`, `tcd` -- vim.cmd(string.format("silent lcd %s", dir)) --end, }, }, }, preview = { filesize_limit = 3, timeout = 250, }, selection_strategy = "reset", sorting_strategy = "ascending", scroll_strategy = "limit", color_devicons = true, layout_strategy = "horizontal", layout_config = { horizontal = { height = 0.95, preview_cutoff = 70, width = 0.92, preview_width = { 0.55, max = 50 }, }, bottom_pane = { height = 12, preview_cutoff = 70, prompt_position = "bottom", }, }, --pickers = { -- live_grep = { -- disable_coordinates = true, -- layout_config = { -- horizontal = { -- preview_width = 0.55, -- }, -- }, -- }, --}, --pickers = { -- live_grep = { -- mappings = { -- i = { -- [""] = ts_select_dir_for_grep, -- }, -- n = { -- [""] = ts_select_dir_for_grep, -- }, -- }, -- }, --}, --pickers = { --lsp_references = { -- prompt_prefix='⬅️', -- show_line=false, -- trim_text=true, -- include_declaration=false, -- initial_mode = "normal", --}, --lsp_definitions = { -- prompt_prefix='➡️', -- show_line=false, -- trim_text=true, -- initial_mode = "normal", --}, --lsp_document_symbols = { -- prompt_prefix='* ', -- show_line = false, --}, --treesitter = { -- prompt_prefix=' ', -- show_line = false, --}, find_files = { cwd = "%:p:h", --cwd = vim.fn.getcwd(), prompt_prefix = " ", hidden = true, follow = true, }, --keymaps = { prompt_prefix='? ' }, --oldfiles = { prompt_prefix=' ' }, --highlights = { prompt_prefix=' ' }, --git_files = { -- prompt_prefix=' ', -- show_untracked = true, -- path_display = { "tail" }, --}, --buffers = { -- prompt_prefix=' ', -- ignore_current_buffer = true, -- initial_mode = "normal", -- sort_mru = true, --}, --live_grep = { -- cwd='%:p:h', -- disable_coordinates=true, -- prompt_title='Search in Folder', -- prompt_prefix=' ', --}, --spell_suggest = { -- initial_mode = "normal", -- prompt_prefix = "暈", -- theme = "cursor", -- layout_config = { cursor = { width = 0.3 } } --}, --colorscheme = { -- enable_preview = true, -- prompt_prefix = '', -- results_title = '', -- layout_strategy = "bottom_pane", --}, --}, extensions = { file_browser = { theme = "dropdown", -- disables netrw and use telescope-file-browser in its place hijack_netrw = true, mappings = { -- your custom insert mode mappings ["i"] = { [""] = function() vim.cmd("normal vbd") end, --[""] = fb_actions.goto_parent_dir, }, ["n"] = { -- your custom normal mode mappings ["N"] = fb_actions.create, --[""] = fb_actions.goto_parent_dir, --["/"] = function() -- vim.cmd("startinsert") --end, }, }, }, }, }) -------------------------------------------------------------------------------- -- Load extensions: -- have to be loaded after telescope setup/config require("telescope").load_extension("fzf") require("telescope").load_extension("ui-select") require("telescope").load_extension("file_browser") require("telescope").load_extension("changed_files") require("telescope").load_extension("media_files") --require('telescope').extensions.notify.notify() require("telescope").load_extension("notify") require("telescope").load_extension("dap") require("telescope").load_extension("session-lens") require("telescope").load_extension("flutter") require("telescope").load_extension("recent_files") --M.curbuf = function(opts) -- opts = opts -- or themes.get_dropdown({ -- previewer = false, -- shorten_path = false, -- border = true, -- }) -- require("telescope.builtin").current_buffer_fuzzy_find(opts) --end function M.find_configs() require("telescope.builtin").find_files({ hidden = true, no_ignore = false, prompt_title = " Find Configs", results_title = "Config Files", path_display = { "smart" }, search_dirs = { "~/.config/nvim", "~/.config/zsh", "~/.config/tmux", "~/.config/X11", "~/.config/alacritty", "~/.config/kitty", "~/.config/wezterm", "~/.config/bspwm", "~/.config/sxhkd", "~/.config/picom", "~/.config/polybar", "~/.bashrc", "~/.ssh", "~/.vim", "~/.profile", "~/.zprofile", "~/README.md", }, -- cwd = "~/.config/nvim/", file_ignore_patterns = { "~/.config/nvim/startup.log", "~/.config/zsh/plugins", "packer_compiled.lua", "resurrect", "tmux/plugins", --"^~/.config/tmux/plugins", "%.txt", ".git", "autoload/plugged", "plug.vim", "zcompdump", }, layout_strategy = "horizontal", layout_config = { preview_width = 0.65, width = 0.75 }, }) end function M.find_scripts() require("telescope.builtin").find_files({ hidden = true, no_ignore = true, prompt_title = " Find Scripts", path_display = { "smart" }, search_dirs = { "~/.local/bin/scripts", }, layout_strategy = "horizontal", layout_config = { preview_width = 0.65, width = 0.75 }, }) end function M.find_projects() require("telescope.builtin").find_files({ hidden = true, no_ignore = true, prompt_title = " Find Projects", path_display = { "smart" }, search_dirs = { "~/projects", }, layout_strategy = "horizontal", layout_config = { preview_width = 0.65, width = 0.75 }, }) end function M.grep_notes() local opts = {} opts.hidden = false opts.search_dirs = { "~/documents/notes/", } opts.prompt_prefix = "  " opts.prompt_title = " Grep Notes" opts.path_display = { "smart" } require("telescope.builtin").live_grep(opts) end function M.find_notes() require("telescope.builtin").find_files({ hidden = false, prompt_title = " Find Notes", path_display = { "smart" }, search_dirs = { "~/documents/notes/private/", "~/documents/notes", }, --cwd = "~documents/notes", layout_strategy = "horizontal", layout_config = { preview_width = 0.65, width = 0.75 }, }) end function M.file_explorer() require("telescope.builtin").file_browser({ prompt_title = "File Browser", cwd = "~", layout_strategy = "horizontal", }) end function M.grep_current_dir() local buffer_dir = require("telescope.utils").buffer_dir() local opts = { prompt_title = "Live Grep in " .. buffer_dir, cwd = buffer_dir, } require("telescope.builtin").live_grep(opts) end -------------------------------------------------------------------------------- local dropdown = require("telescope.themes").get_dropdown({ hidden = true, no_ignore = true, previewer = false, prompt_title = "", preview_title = "", results_title = "", layout_config = { --anchor = "S", prompt_position = "top", }, }) -- File browser always relative to buffer --local opts_file_browser = vim.tbl_extend('force', dropdown, { -- path_display = { '%:p:h' }, --}) -- Set current folder as prompt title local with_title = function(opts, extra) extra = extra or {} local path = opts.cwd or opts.path or extra.cwd or extra.path or nil local title = "" local buf_path = vim.fn.expand("%:p:h") local cwd = vim.fn.getcwd() if path ~= nil and buf_path ~= cwd then title = require("plenary.path"):new(buf_path):make_relative(cwd) else title = vim.fn.fnamemodify(cwd, ":t") end return vim.tbl_extend("force", opts, { prompt_title = title, }, extra or {}) end --vim.api.nvim_create_augroup('findhere', { clear = true }) --vim.api.nvim_command('augroup findhere') --vim.api.nvim_command('autocmd!') --vim.api.nvim_command('autocmd VimEnter * lua require("plugins/telescope").findhere()') --vim.api.nvim_command('augroup END') --local findhere = function() function M.findhere() -- Open file browser if argument is a folder local arg = vim.api.nvim_eval("argv(0)") if arg and (vim.fn.isdirectory(arg) ~= 0 or arg == "") then vim.defer_fn(function() require("telescope.builtin").find_files(with_title(dropdown)) -- require'telescope.builtin'.find_files(require('telescope.themes').get_dropdown({ -- hidden = true, -- results_title = '', -- layout_config = { prompt_position = 'top' }, -- })) end, 10) end end -- Define the custom command findhere/startup vim.cmd('command! Findhere lua require("plugins.telescope").findhere()') --vim.cmd('command! Startup lua require("plugins.telescope").findhere()') --vim.api.nvim_command('autocmd VimEnter * lua require("plugins/telescope").findhere()') -- Merge the existing M table with the startup function table --M = vim.tbl_extend('force', M, { findhere = findhere }) return M