nvim/lua/telesnip/init.lua.old

102 lines
3.1 KiB
Lua

local M = {}
local function get_snippets()
local snippets = {}
local base_path = vim.fn.stdpath("config") .. "/lua/telesnip/snippets/"
local languages = vim.fn.readdir(base_path)
print("Base path: " .. base_path)
print("Languages found: " .. vim.inspect(languages))
for _, lang in ipairs(languages) do
local path = base_path .. lang
local files = vim.fn.glob(path .. "/*", false, true)
print("Files found for " .. lang .. ": " .. vim.inspect(files))
for _, file in ipairs(files) do
local snippet_name = vim.fn.fnamemodify(file, ":t")
table.insert(snippets, {
name = snippet_name,
path = file,
language = lang,
})
end
end
print("Snippets found: " .. vim.inspect(snippets))
return snippets
end
M.snippet_picker = function()
local snippets = get_snippets()
local opts = require("telescope.themes").get_dropdown({})
require("telescope.pickers")
.new(opts, {
prompt_title = "Snippets",
finder = require("telescope.finders").new_table({
results = snippets,
entry_maker = function(entry)
return {
value = entry,
display = entry.name,
ordinal = entry.name,
path = entry.path,
}
end,
}),
sorter = require("telescope.config").values.generic_sorter(opts),
previewer = require("telescope.previewers").new_buffer_previewer({
define_preview = function(self, entry)
local lines = vim.fn.readfile(entry.path)
vim.api.nvim_buf_set_lines(self.state.bufnr, 0, -1, false, lines)
local ext = vim.fn.fnamemodify(entry.path, ":e")
vim.api.nvim_buf_set_option(self.state.bufnr, "filetype", ext)
end,
}),
attach_mappings = function(_, map)
map("i", "<CR>", function(prompt_bufnr)
print("Mapping triggered")
local selection = require("telescope.actions.state").get_selected_entry()
print("Selected entry: " .. vim.inspect(selection))
local snippet_content = vim.fn.readfile(selection.path)
print("Snippet content (raw): " .. vim.inspect(snippet_content))
print("Snippet content (formatted):")
for i, line in ipairs(snippet_content) do
print(string.format("%d: %s", i, line))
end
local current_buf = vim.api.nvim_get_current_buf()
local win = vim.api.nvim_get_current_win()
local cursor = vim.api.nvim_win_get_cursor(win)
local row, col = cursor[1] - 1, cursor[2]
print(string.format("Inserting at buffer %d, row %d, col %d", current_buf, row, col))
-- Insert snippet content at the current cursor position
vim.api.nvim_buf_set_text(current_buf, row, col, row, col, snippet_content)
-- Move cursor to the end of the inserted snippet
local new_row = row + #snippet_content
local new_col = #snippet_content[#snippet_content]
vim.api.nvim_win_set_cursor(win, { new_row, new_col })
print(string.format("Cursor moved to row %d, col %d", new_row, new_col))
-- Close Telescope prompt
require("telescope.actions").close(prompt_bufnr)
-- Schedule entering insert mode
vim.schedule(function()
vim.cmd("stopinsert")
vim.cmd("startinsert!")
print("Entered insert mode")
end)
end)
return true
end,
})
:find()
end
return M