mirror of
https://github.com/folke/snacks.nvim
synced 2025-08-05 19:28:24 +00:00
fix(picker.buffer): unselect on delete. Fixes #653
This commit is contained in:
parent
8601a8ced3
commit
0ac5605bfb
2 changed files with 28 additions and 10 deletions
|
@ -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({
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue