mirror of
https://github.com/folke/snacks.nvim
synced 2025-12-23 08:47:57 +00:00
feat(bufdelete): optional filter and shortcuts to delete all and other buffers. Closes #11
This commit is contained in:
parent
020e42fd18
commit
71a234608f
3 changed files with 82 additions and 5 deletions
|
|
@ -5,7 +5,9 @@ Table of Contents *snacks-bufdelete-table-of-contents*
|
|||
|
||||
1. Module |snacks-bufdelete-module|
|
||||
- Snacks.bufdelete() |snacks-bufdelete-module-snacks.bufdelete()|
|
||||
- Snacks.bufdelete.all() |snacks-bufdelete-module-snacks.bufdelete.all()|
|
||||
- Snacks.bufdelete.delete()|snacks-bufdelete-module-snacks.bufdelete.delete()|
|
||||
- Snacks.bufdelete.other()|snacks-bufdelete-module-snacks.bufdelete.other()|
|
||||
Delete buffers without disrupting window layout.
|
||||
|
||||
If the buffer you want to close has changes, a prompt will be shown to save or
|
||||
|
|
@ -24,13 +26,35 @@ SNACKS.BUFDELETE() *snacks-bufdelete-module-snacks.bufdelete()*
|
|||
<
|
||||
|
||||
|
||||
SNACKS.BUFDELETE.DELETE() *snacks-bufdelete-module-snacks.bufdelete.delete()*
|
||||
SNACKS.BUFDELETE.ALL() *snacks-bufdelete-module-snacks.bufdelete.all()*
|
||||
|
||||
Delete all buffers
|
||||
|
||||
>lua
|
||||
---@param buf number?
|
||||
Snacks.bufdelete.all()
|
||||
<
|
||||
|
||||
|
||||
SNACKS.BUFDELETE.DELETE() *snacks-bufdelete-module-snacks.bufdelete.delete()*
|
||||
|
||||
Delete a buffer: - either the current buffer if `buf` is not provided - or the
|
||||
buffer `buf` if it is a number - or every buffer for which `buf` returns true
|
||||
if it is a function
|
||||
|
||||
>lua
|
||||
---@param buf? number | fun(buf: number): boolean
|
||||
Snacks.bufdelete.delete(buf)
|
||||
<
|
||||
|
||||
|
||||
SNACKS.BUFDELETE.OTHER() *snacks-bufdelete-module-snacks.bufdelete.other()*
|
||||
|
||||
Delete all buffers except the current one
|
||||
|
||||
>lua
|
||||
Snacks.bufdelete.other()
|
||||
<
|
||||
|
||||
Generated by panvimdoc <https://github.com/kdheepak/panvimdoc>
|
||||
|
||||
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||
|
|
|
|||
|
|
@ -16,9 +16,30 @@ a prompt will be shown to save or discard.
|
|||
Snacks.bufdelete()
|
||||
```
|
||||
|
||||
### `Snacks.bufdelete.delete()`
|
||||
### `Snacks.bufdelete.all()`
|
||||
|
||||
Delete all buffers
|
||||
|
||||
```lua
|
||||
---@param buf number?
|
||||
Snacks.bufdelete.all()
|
||||
```
|
||||
|
||||
### `Snacks.bufdelete.delete()`
|
||||
|
||||
Delete a buffer:
|
||||
- either the current buffer if `buf` is not provided
|
||||
- or the buffer `buf` if it is a number
|
||||
- or every buffer for which `buf` returns true if it is a function
|
||||
|
||||
```lua
|
||||
---@param buf? number | fun(buf: number): boolean
|
||||
Snacks.bufdelete.delete(buf)
|
||||
```
|
||||
|
||||
### `Snacks.bufdelete.other()`
|
||||
|
||||
Delete all buffers except the current one
|
||||
|
||||
```lua
|
||||
Snacks.bufdelete.other()
|
||||
```
|
||||
|
|
|
|||
|
|
@ -7,11 +7,29 @@ local M = setmetatable({}, {
|
|||
end,
|
||||
})
|
||||
|
||||
---@param buf number?
|
||||
--- Delete a buffer:
|
||||
--- - either the current buffer if `buf` is not provided
|
||||
--- - or the buffer `buf` if it is a number
|
||||
--- - or every buffer for which `buf` returns true if it is a function
|
||||
---@param buf? number | fun(buf: number): boolean
|
||||
function M.delete(buf)
|
||||
if type(buf) == "function" then
|
||||
for _, b in ipairs(vim.api.nvim_list_bufs()) do
|
||||
if vim.bo[b].buflisted and buf(b) then
|
||||
M.delete(b)
|
||||
end
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
buf = buf or 0
|
||||
buf = buf == 0 and vim.api.nvim_get_current_buf() or buf
|
||||
|
||||
-- Ensure we always run in the target buffer
|
||||
if buf ~= vim.api.nvim_get_current_buf() then
|
||||
return vim.api.nvim_buf_call(buf, M.delete)
|
||||
end
|
||||
|
||||
if vim.bo.modified then
|
||||
local choice = vim.fn.confirm(("Save changes to %q?"):format(vim.fn.bufname()), "&Yes\n&No\n&Cancel")
|
||||
if choice == 0 or choice == 3 then -- 0 for <Esc>/<C-c> and 3 for Cancel
|
||||
|
|
@ -50,4 +68,18 @@ function M.delete(buf)
|
|||
end
|
||||
end
|
||||
|
||||
--- Delete all buffers
|
||||
function M.all()
|
||||
return M.delete(function()
|
||||
return true
|
||||
end)
|
||||
end
|
||||
|
||||
--- Delete all buffers except the current one
|
||||
function M.other()
|
||||
return M.delete(function(b)
|
||||
return b ~= vim.api.nvim_get_current_buf()
|
||||
end)
|
||||
end
|
||||
|
||||
return M
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue