telescope.nvim icon indicating copy to clipboard operation
telescope.nvim copied to clipboard

Add an internal `changelist`

Open kimabrandt opened this issue 5 months ago • 0 comments

Can a changelist be added?

It's just a copy of the jumplist!?

diff --git i/lua/telescope/builtin/__internal.lua w/lua/telescope/builtin/__internal.lua
index 1687401..47086fe 100644
--- i/lua/telescope/builtin/__internal.lua
+++ w/lua/telescope/builtin/__internal.lua
@@ -1507,6 +1507,38 @@ internal.jumplist = function(opts)
     :find()
 end

+internal.changelist = function(opts)
+  opts = opts or {}
+
+  if opts.bufnr == nil then
+    opts.bufnr = vim.api.nvim_get_current_buf()
+  end
+
+  local changelist = vim.fn.getchangelist()[1]
+
+  -- reverse the list
+  local sorted_changelist = {}
+  for i = #changelist, 1, -1 do
+    if vim.api.nvim_buf_is_valid(opts.bufnr) then
+      changelist[i].text = vim.api.nvim_buf_get_lines(opts.bufnr, changelist[i].lnum - 1, changelist[i].lnum, false)[1]
+        or ""
+      table.insert(sorted_changelist, changelist[i])
+    end
+  end
+
+  pickers
+    .new(opts, {
+      prompt_title = "Changelist",
+      finder = finders.new_table {
+        results = sorted_changelist,
+        entry_maker = make_entry.gen_from_quickfix(opts),
+      },
+      previewer = conf.qflist_previewer(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 i/lua/telescope/builtin/init.lua w/lua/telescope/builtin/init.lua
index 6e27c27..a19e85f 100644
--- i/lua/telescope/builtin/init.lua
+++ w/lua/telescope/builtin/init.lua
@@ -413,6 +413,12 @@ builtin.tagstack = require_on_exported_call("telescope.builtin.__internal").tags
 ---@field trim_text boolean: trim results text (default: false)
 builtin.jumplist = require_on_exported_call("telescope.builtin.__internal").jumplist

+--- Lists items from Vim's changelist, jumps to location on `<cr>`
+---@param opts table: options to pass to the picker
+---@field show_line boolean: show results text (default: true)
+---@field trim_text boolean: trim results text (default: false)
+builtin.changelist = require_on_exported_call("telescope.builtin.__internal").changelist
+
 --
 --
 -- LSP-related Pickers

kimabrandt avatar Jun 01 '25 18:06 kimabrandt