fix(picker.buffer): unselect on delete. Fixes #653

This commit is contained in:
Folke Lemaitre 2025-01-20 10:53:04 +01:00
parent 8601a8ced3
commit 0ac5605bfb
No known key found for this signature in database
GPG key ID: 41F8B1FBACAE2040
2 changed files with 28 additions and 10 deletions

View file

@ -120,6 +120,7 @@ end
function M.bufdelete(picker) function M.bufdelete(picker)
for _, item in ipairs(picker:selected({ fallback = true })) do for _, item in ipairs(picker:selected({ fallback = true })) do
Snacks.bufdelete.delete(item.buf) Snacks.bufdelete.delete(item.buf)
picker.list:unselect(item)
end end
local cursor = picker.list.cursor local cursor = picker.list.cursor
picker:find({ picker:find({

View file

@ -270,24 +270,41 @@ function M:update()
end end
-- Toggle selection of current item -- Toggle selection of current item
function M:select() ---@param item? snacks.picker.Item
local item = self:current() function M:select(item)
item = item or self:current()
if not item then
return
end
if self:unselect(item) then
return
end
local key = self:select_key(item)
self.selected_map[key] = item
table.insert(self.selected, item)
self.picker.input:update()
self.dirty = true
self:render()
end
---@param item? snacks.picker.Item
function M:unselect(item)
item = item or self:current()
if not item then if not item then
return return
end end
local key = self:select_key(item) local key = self:select_key(item)
if self.selected_map[key] then if not self.selected_map[key] then
self.selected_map[key] = nil return
self.selected = vim.tbl_filter(function(v)
return self:select_key(v) ~= key
end, self.selected)
else
self.selected_map[key] = item
table.insert(self.selected, item)
end end
self.selected_map[key] = nil
self.selected = vim.tbl_filter(function(v)
return self:select_key(v) ~= key
end, self.selected)
self.picker.input:update() self.picker.input:update()
self.dirty = true self.dirty = true
self:render() self:render()
return true
end end
function M:select_all() function M:select_all()