summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua')
-rw-r--r--lua/telescope/builtin/init.lua1
-rw-r--r--lua/telescope/builtin/internal.lua41
-rw-r--r--lua/telescope/make_entry.lua1
3 files changed, 43 insertions, 0 deletions
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,