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, ['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.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', }, }, find_files = { --cwd = '%:p:h', cwd = vim.fn.getcwd(), prompt_prefix = ' ', --hidden = true, --no_ignore = false, follow = true, }, --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, --}, --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').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 = { '~/.vim', '~/.config/nvim', '~/.config/zsh', '~/.config/tmux', '~/.config/X11', '~/.config/alacritty', '~/.config/kitty', '~/.config/wezterm', '~/.config/bspwm', '~/.config/sxhkd', '~/.config/picom', '~/.config/polybar', '~/.bashrc', '~/.profile', '~/.zprofile', '~/.gitconfig', '~/.gitsubtrees', '~/.gitignore', '~/.editorconfig', '~/.prettierrc.yml', '~/.ssh', '~/README.md', }, file_ignore_patterns = { '/nvim/startup.log', '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() -- aka Workspaces 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 = true, no_ignore = false, prompt_title = ' Find Notes', path_display = { 'smart' }, search_dirs = { '~/documents/notes/private/', '~/documents/notes', '~/notes/private', '~/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