replaced telescope with snacks

This commit is contained in:
Radu Macocian
2026-04-22 11:02:23 +02:00
parent 802cc1dcfc
commit 12db5d84f4
6 changed files with 104 additions and 102 deletions
+28 -55
View File
@@ -1,10 +1,3 @@
local pickers = require("telescope.pickers")
local finders = require("telescope.finders")
local conf = require("telescope.config").values
local previewers = require("telescope.previewers")
local actions = require("telescope.actions")
local action_state = require("telescope.actions.state")
local STOP_WORDS = { local STOP_WORDS = {
["a"] = true, ["a"] = true,
["an"] = true, ["an"] = true,
@@ -35,9 +28,6 @@ local function parse_query_mode(raw_query)
return "type", vim.trim((query:gsub("^type:%s*", "", 1))) return "type", vim.trim((query:gsub("^type:%s*", "", 1)))
end end
-- Heuristic:
-- - Queries that look like signatures/operators stay in type mode.
-- - Everything else defaults to text mode so plain-language search works.
local looks_like_type = query:match("::") local looks_like_type = query:match("::")
or query:match("->") or query:match("->")
or query:match("=>") or query:match("=>")
@@ -169,8 +159,8 @@ local function hoogle_picker(query)
return return
end end
local results = {} local items = {}
for _, entry in ipairs(decoded) do for idx, entry in ipairs(decoded) do
local signature = entry.item or "" local signature = entry.item or ""
local docs = entry.docs or "" local docs = entry.docs or ""
local url = entry.url local url = entry.url
@@ -185,7 +175,9 @@ local function hoogle_picker(query)
display = display .. " - " .. docs_one_line display = display .. " - " .. docs_one_line
end end
table.insert(results, { table.insert(items, {
idx = idx,
text = signature .. " " .. (docs or ""),
signature = signature, signature = signature,
docs = docs, docs = docs,
url = url, url = url,
@@ -193,54 +185,36 @@ local function hoogle_picker(query)
}) })
end end
pickers.new({}, { Snacks.picker.pick({
prompt_title = ("Hoogle (%s): %s"):format(mode, normalized_query), source = "hoogle",
finder = finders.new_table({ title = ("Hoogle (%s): %s"):format(mode, normalized_query),
results = results, items = items,
entry_maker = function(entry) format = function(item)
return { return { { item.display, "SnacksPickerLabel" } }
value = entry,
display = entry.display,
ordinal = entry.signature .. " " .. (entry.docs or ""),
}
end, end,
}), preview = function(ctx)
sorter = conf.generic_sorter({}), local item = ctx.item
previewer = previewers.new_buffer_previewer({ local lines = { item.signature or "" }
define_preview = function(self, entry) if item.docs and item.docs ~= "" then
local value = entry.value or {} table.insert(lines, "")
local preview_lines = { value.signature or "" } vim.list_extend(lines, vim.split(item.docs, "\n", { plain = true }))
if value.docs and value.docs ~= "" then
table.insert(preview_lines, "")
vim.list_extend(preview_lines, vim.split(value.docs, "\n", { plain = true }))
else else
table.insert(preview_lines, "") table.insert(lines, "")
table.insert(preview_lines, "No documentation available.") table.insert(lines, "No documentation available.")
end end
if item.url and item.url ~= "" then
if value.url and value.url ~= "" then table.insert(lines, "")
table.insert(preview_lines, "") table.insert(lines, item.url)
table.insert(preview_lines, value.url)
end end
vim.api.nvim_buf_set_lines(ctx.buf, 0, -1, false, lines)
vim.api.nvim_buf_set_lines(self.state.bufnr, 0, -1, false, preview_lines)
end, end,
}), confirm = function(picker, item)
attach_mappings = function(prompt_bufnr, map) picker:close()
local function open_result() if item and item.url then
local selection = action_state.get_selected_entry() vim.ui.open(item.url)
actions.close(prompt_bufnr)
if selection and selection.value and selection.value.url then
vim.ui.open(selection.value.url)
end end
end
map("i", "<CR>", open_result)
map("n", "<CR>", open_result)
return true
end, end,
}):find() })
end end
vim.api.nvim_create_user_command("Hoogle", function(opts) vim.api.nvim_create_user_command("Hoogle", function(opts)
@@ -256,4 +230,3 @@ end, { desc = "Hoogle current word" })
vim.keymap.set("n", "<leader>ht", function() vim.keymap.set("n", "<leader>ht", function()
vim.cmd("Hoogle " .. vim.fn.input("Hoogle type/text > ")) vim.cmd("Hoogle " .. vim.fn.input("Hoogle type/text > "))
end, { desc = "Hoogle query" }) end, { desc = "Hoogle query" })
+1 -1
View File
@@ -56,7 +56,7 @@ vim.api.nvim_create_autocmd('LspAttach', {
callback = function(event) callback = function(event)
local opts = { buffer = event.buf } local opts = { buffer = event.buf }
vim.keymap.set('n', 'gd', function() require('telescope.builtin').lsp_definitions() end, opts) vim.keymap.set('n', 'gd', function() Snacks.picker.lsp_definitions() end, opts)
vim.keymap.set('n', 'K', function() vim.lsp.buf.hover() end, opts) vim.keymap.set('n', 'K', function() vim.lsp.buf.hover() end, opts)
vim.keymap.set('n', '<leader>vws', function() vim.lsp.buf.workspace_symbol() end, opts) vim.keymap.set('n', '<leader>vws', function() vim.lsp.buf.workspace_symbol() end, opts)
vim.keymap.set('n', '<leader>vd', function() vim.diagnostic.open_float() end, opts) vim.keymap.set('n', '<leader>vd', function() vim.diagnostic.open_float() end, opts)
@@ -1,6 +0,0 @@
require('mason').setup {}
require("mason-lspconfig").setup {
ensure_installed = { "lua_ls",
"cssls",
"eslint" },
}
+68
View File
@@ -18,5 +18,73 @@ require("snacks").setup {
enabled = true, enabled = true,
char = "" char = ""
} }
},
picker = {
enabled = true,
ui_select = true,
formatters = {
file = {
truncate = "left",
min_width = 160,
},
},
},
dashboard = {
enabled = true,
},
terminal = {
enabled = true,
},
} }
local picker = Snacks.picker
vim.keymap.set('n', '<leader>pf', function() picker.files() end)
vim.keymap.set('n', '<C-p>p', function() picker.git_files() end)
vim.keymap.set('n', '<leader>sw', function() picker.lsp_workspace_symbols() end)
vim.keymap.set('n', '<leader>ps', function()
picker.grep({ search = vim.fn.input("Grep > "), live = false })
end)
local term_buf
local function find_term_win()
if not (term_buf and vim.api.nvim_buf_is_valid(term_buf)) then return end
for _, w in ipairs(vim.api.nvim_list_wins()) do
if vim.api.nvim_win_get_buf(w) == term_buf then return w end
end
end
local function toggle_term(fullscreen)
local win_opts = fullscreen and {
position = "float",
width = 0.98,
height = 0.98,
border = "rounded",
} or {
position = "bottom",
height = 0.2,
border = "none",
} }
local existing = find_term_win()
if existing then
local is_float = vim.api.nvim_win_get_config(existing).relative ~= ""
vim.api.nvim_win_close(existing, true)
if is_float == fullscreen then return end
end
if term_buf and vim.api.nvim_buf_is_valid(term_buf) then
Snacks.win(vim.tbl_extend("force", win_opts, {
buf = term_buf,
enter = true,
bo = { filetype = "snacks_terminal" },
}))
vim.cmd.startinsert()
else
local term = Snacks.terminal.toggle(nil, { win = win_opts })
if term then term_buf = term.buf end
end
end
vim.keymap.set({ "n", "t" }, "<leader>tt", function() toggle_term(false) end, { desc = "Terminal (split)" })
vim.keymap.set({ "n", "t" }, "<leader>tT", function() toggle_term(true) end, { desc = "Terminal (fullscreen)" })
-17
View File
@@ -1,17 +0,0 @@
require('telescope').setup {
extensions = {
["ui_select"] = {
require('telescope.themes').get_dropdown {
}
}
}
}
require('telescope').load_extension('ui-select')
local builtin = require('telescope.builtin')
vim.keymap.set('n', '<leader>pf', builtin.find_files, {})
vim.keymap.set('n', '<C-p>p', builtin.git_files, {})
vim.keymap.set('n', '<leader>sw', '<cmd>Telescope lsp_workspace_symbols<cr>', {})
vim.keymap.set('n', '<leader>ps', function()
builtin.grep_string({ search = vim.fn.input("Grep > ") });
end)
-16
View File
@@ -18,10 +18,6 @@ vim.opt.rtp:prepend(lazypath)
-- Setup lazy.nvim -- Setup lazy.nvim
require("lazy").setup({ require("lazy").setup({
spec = { spec = {
{
'nvim-telescope/telescope.nvim',
dependencies = { 'nvim-lua/plenary.nvim' }
},
{ {
'neanias/everforest-nvim', 'neanias/everforest-nvim',
config = function() config = function()
@@ -92,7 +88,6 @@ require("lazy").setup({
}, },
}, },
'tpope/vim-surround', 'tpope/vim-surround',
'nvim-telescope/telescope-ui-select.nvim',
'sphamba/smear-cursor.nvim', 'sphamba/smear-cursor.nvim',
{ {
"folke/persistence.nvim", "folke/persistence.nvim",
@@ -123,7 +118,6 @@ require("lazy").setup({
"folke/snacks.nvim", "folke/snacks.nvim",
'lewis6991/gitsigns.nvim', 'lewis6991/gitsigns.nvim',
'tpope/vim-projectionist', 'tpope/vim-projectionist',
'williamboman/mason-lspconfig.nvim',
{ {
"NeogitOrg/neogit", "NeogitOrg/neogit",
dependencies = { dependencies = {
@@ -131,16 +125,6 @@ require("lazy").setup({
}, },
config = true config = true
}, },
{
'nvimdev/dashboard-nvim',
event = 'VimEnter',
config = function()
require('dashboard').setup {
-- config
}
end,
dependencies = { { 'nvim-tree/nvim-web-devicons' } }
},
'neovim/nvim-lspconfig', 'neovim/nvim-lspconfig',
{ {
'nvim-lualine/lualine.nvim', 'nvim-lualine/lualine.nvim',