Skip to content

Commit

Permalink
feat(builtin.buffers): enhance and bind delete_buffer action (#3145)
Browse files Browse the repository at this point in the history
* feat(builtin.buffers): enhance and bind `delete_buffer` action

* change default bind and add docs

* [docgen] Update doc/telescope.txt
skip-checks: true

---------

Co-authored-by: Github Actions <actions@github>
  • Loading branch information
jamestrew and Github Actions committed Jun 15, 2024
1 parent 77cab9a commit 979bfa2
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 0 deletions.
2 changes: 2 additions & 0 deletions doc/telescope.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1434,6 +1434,8 @@ builtin.reloader({opts}) *telescope.builtin.reloader()*
builtin.buffers({opts}) *telescope.builtin.buffers()*
Lists open buffers in current neovim instance, opens selected buffer on
`<cr>`
- Default keymaps:
- `<M-d>`: delete the currently selected buffer


Parameters: ~
Expand Down
13 changes: 13 additions & 0 deletions lua/telescope/actions/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1176,9 +1176,22 @@ end
---@param prompt_bufnr number: The prompt bufnr
actions.delete_buffer = function(prompt_bufnr)
local current_picker = action_state.get_current_picker(prompt_bufnr)

current_picker:delete_selection(function(selection)
local force = vim.api.nvim_buf_get_option(selection.bufnr, "buftype") == "terminal"
local ok = pcall(vim.api.nvim_buf_delete, selection.bufnr, { force = force })

-- If the current buffer is deleted, switch to the previous buffer
-- according to bdelete behavior
if ok and selection.bufnr == current_picker.original_bufnr then
local jumplist = vim.fn.getjumplist(current_picker.original_win_id)[1]
for i = #jumplist, 1, -1 do
if jumplist[i].bufnr ~= selection.bufnr and vim.fn.bufloaded(jumplist[i].bufnr) == 1 then
vim.api.nvim_win_set_buf(current_picker.original_win_id, jumplist[i].bufnr)
break
end
end
end
return ok
end)
end
Expand Down
3 changes: 3 additions & 0 deletions lua/telescope/builtin/__internal.lua
Original file line number Diff line number Diff line change
Expand Up @@ -972,6 +972,9 @@ internal.buffers = function(opts)
previewer = conf.grep_previewer(opts),
sorter = conf.generic_sorter(opts),
default_selection_index = default_selection_idx,
attach_mappings = function(_, map)
map({ "i", "n" }, "<M-d>", actions.delete_buffer)
end,
})
:find()
end
Expand Down
2 changes: 2 additions & 0 deletions lua/telescope/builtin/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,8 @@ builtin.man_pages = require_on_exported_call("telescope.builtin.__internal").man
builtin.reloader = require_on_exported_call("telescope.builtin.__internal").reloader

--- Lists open buffers in current neovim instance, opens selected buffer on `<cr>`
--- - Default keymaps:
--- - `<M-d>`: delete the currently selected buffer
---@param opts table: options to pass to the picker
---@field cwd string: specify a working directory to filter buffers list by
---@field show_all_buffers boolean: if true, show all buffers, including unloaded buffers (default: true)
Expand Down
1 change: 1 addition & 0 deletions lua/telescope/pickers.lua
Original file line number Diff line number Diff line change
Expand Up @@ -535,6 +535,7 @@ function Picker:find()
self.__original_mousemoveevent = vim.o.mousemoveevent
vim.o.mousemoveevent = true

self.original_bufnr = a.nvim_get_current_buf()
self.original_win_id = a.nvim_get_current_win()
_, self.original_cword = pcall(vim.fn.expand, "<cword>")
_, self.original_cWORD = pcall(vim.fn.expand, "<cWORD>")
Expand Down

0 comments on commit 979bfa2

Please sign in to comment.