diff --git a/lua/telescope/builtin/init.lua b/lua/telescope/builtin/init.lua index b7f45f5..2b3c1ca 100644 --- a/lua/telescope/builtin/init.lua +++ b/lua/telescope/builtin/init.lua @@ -60,6 +60,7 @@ builtin.filetypes = require('telescope.builtin.internal').filetypes builtin.highlights = require('telescope.builtin.internal').highlights builtin.autocommands = require('telescope.builtin.internal').autocommands builtin.spell_suggest = require('telescope.builtin.internal').spell_suggest +builtin.tagstack = require('telescope.builtin.internal').tagstack builtin.lsp_references = require('telescope.builtin.lsp').references builtin.lsp_definitions = require('telescope.builtin.lsp').definitions diff --git a/lua/telescope/builtin/internal.lua b/lua/telescope/builtin/internal.lua index a58c354..7eefcb2 100644 --- a/lua/telescope/builtin/internal.lua +++ b/lua/telescope/builtin/internal.lua @@ -862,6 +862,47 @@ internal.spell_suggest = function(opts) }):find() end +internal.tagstack = function(opts) + opts = opts or {} + local tagstack = vim.fn.gettagstack() + if vim.tbl_isempty(tagstack.items) then + print("No tagstack available") + return + end + + for _, value in pairs(tagstack.items) do + value.valid = true + value.bufnr = value.from[1] + value.lnum = value.from[2] + value.col = value.from[3] + value.filename = vim.fn.bufname(value.from[1]) + + value.text = vim.api.nvim_buf_get_lines( + value.bufnr, + value.lnum - 1, + value.lnum, + false + )[1] + end + + -- reverse the list + local tags = {} + for i = #tagstack.items, 1, -1 do + tags[#tags+1] = tagstack.items[i] + end + + pickers.new(opts, { + prompt_title = 'TagStack', + finder = finders.new_table { + results = tags, + entry_maker = make_entry.gen_from_quickfix(opts), + }, + previewer = previewers.vim_buffer_qflist.new(opts), + sorter = conf.generic_sorter(opts), + }):find() +end + + local function apply_checks(mod) for k, v in pairs(mod) do mod[k] = function(opts) diff --git a/lua/telescope/make_entry.lua b/lua/telescope/make_entry.lua index e970973..c714e7b 100644 --- a/lua/telescope/make_entry.lua +++ b/lua/telescope/make_entry.lua @@ -317,6 +317,7 @@ function make_entry.gen_from_quickfix(opts) ) .. ' ' .. entry.text, display = make_display, + bufnr = entry.bufnr, filename = filename, lnum = entry.lnum, col = entry.col,