Commit graph

2393 commits

Author SHA1 Message Date
github-actions[bot]
4b3bb54d8b
chore(main): release 2.27.0 (#2351)
🤖 I have created a release *beep* *boop*
---


##
[2.27.0](https://github.com/folke/snacks.nvim/compare/v2.26.0...v2.27.0)
(2025-10-26)


### Features

* **keymap:** added new `enabled` option
([b0f21fa](b0f21fa745))
* **picker.proc:** finder to process json
([5294c4f](5294c4f39e))
* **util.job:** simple wrapper around jobstart to work with terminals
(used in dashboards and pickers)
([de05631](de05631e6a))
* **util.lsp:** added overload for `Snacks.util.lsp.on(cb)`
([f33aa20](f33aa2017a))


### Bug Fixes

* **dashboard:** don't add sleep in nushell. Closes
[#1706](https://github.com/folke/snacks.nvim/issues/1706)
([44f71d2](44f71d2113))
* **explorer:** refresh git status on all tabs when needed. Closes
[#2348](https://github.com/folke/snacks.nvim/issues/2348)
([1472211](1472211f9c))
* **explorer:** windows path fixes
([e1dc6b3](e1dc6b3bdd))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-10-26 12:21:57 +01:00
folke
d5d66cb73c chore(build): auto-generate markdown docs 2025-10-26 11:20:45 +00:00
Folke Lemaitre
b0f21fa745
feat(keymap): added new enabled option 2025-10-26 12:19:40 +01:00
folke
a9c95a7006 chore(build): auto-generate docs 2025-10-26 10:53:17 +00:00
folke
5cbd3e1275 chore(build): auto-generate markdown docs 2025-10-26 10:51:51 +00:00
Folke Lemaitre
5294c4f39e
feat(picker.proc): finder to process json 2025-10-26 11:50:32 +01:00
Folke Lemaitre
1f194746d7
refactor(preview): use util.job 2025-10-26 11:50:06 +01:00
Folke Lemaitre
a4ed279692
style(debug): luals annotations 2025-10-26 11:49:49 +01:00
Folke Lemaitre
d2648e8cef
refactor(dashboard): use util.job to render terminal commands 2025-10-26 11:49:37 +01:00
Folke Lemaitre
44f71d2113
fix(dashboard): don't add sleep in nushell. Closes #1706 2025-10-26 11:49:15 +01:00
Folke Lemaitre
de05631e6a
feat(util.job): simple wrapper around jobstart to work with terminals (used in dashboards and pickers) 2025-10-26 11:48:30 +01:00
Folke Lemaitre
f33aa2017a
feat(util.lsp): added overload for Snacks.util.lsp.on(cb)
Some checks are pending
CI / ci (push) Waiting to run
2025-10-25 19:06:26 +02:00
Folke Lemaitre
1472211f9c
fix(explorer): refresh git status on all tabs when needed. Closes #2348 2025-10-25 18:52:28 +02:00
folke
235d99330b chore(build): auto-generate docs 2025-10-25 16:25:19 +00:00
Folke Lemaitre
e1dc6b3bdd fix(explorer): windows path fixes 2025-10-25 16:22:44 -07:00
folke
aaeb55cbf5 chore(build): auto-generate markdown docs 2025-10-25 14:55:57 +00:00
github-actions[bot]
fc84ed42a4
chore(main): release 2.26.0 (#2335)
🤖 I have created a release *beep* *boop*
---


##
[2.26.0](https://github.com/folke/snacks.nvim/compare/v2.25.0...v2.26.0)
(2025-10-25)


### Features

* **explorer:** add cross-platform trash support
([ed08ef1](ed08ef1a63))
* **keymap:** add filetype and LSP-aware keymap management
([0bf34af](0bf34afe34))
* **util:** add LSP utility module with dynamic capability handlers
([7a63ba5](7a63ba5d37))
* **win:** add `SnacksWinSeparator` to default `win.wo.winhighlight`
([#2340](https://github.com/folke/snacks.nvim/issues/2340))
([869709d](869709dd65)),
closes [#2336](https://github.com/folke/snacks.nvim/issues/2336)
* **win:** add default *Snacks* prefixed `WinSeparator`
([#2338](https://github.com/folke/snacks.nvim/issues/2338))
([381265b](381265b543)),
closes [#2336](https://github.com/folke/snacks.nvim/issues/2336)


### Bug Fixes

* **dahboard:** do full terminal reset when receiving first output and
displayed cached contents
([c952834](c9528341a6))
* **dashboard:** don't write to closed terminal buffer
([f75eaf1](f75eaf1e18))
* **dashboard:** work-around for jobstart+pty issue where not all output
is processed before exit. Closes
[#1706](https://github.com/folke/snacks.nvim/issues/1706)
([4d776bd](4d776bdd1d))
* **explorer:** macos has `trash` pre-installed, so no need to try
`osascript` and move to first. Closes
[#2349](https://github.com/folke/snacks.nvim/issues/2349)
([d569072](d569072b2e))
* **image:** detach image when reloading image file. Closes
[#2343](https://github.com/folke/snacks.nvim/issues/2343)
([7bf4175](7bf4175588))
* **image:** increase timeout for querying the terminal. Closes
[#2344](https://github.com/folke/snacks.nvim/issues/2344)
([4122143](4122143240))
* **image:** let healthcheck wait till terminal detection is done
([b029511](b029511abb))
* **image:** only attach to a buffer once. Closes
[#2343](https://github.com/folke/snacks.nvim/issues/2343)
([6f72643](6f72643323))
* **image:** work around tmux extended-keys breaking TermResponse.
Closes [#2332](https://github.com/folke/snacks.nvim/issues/2332)
([e93dcfd](e93dcfdf39))
* **layout:** provide parent win width/height when relative to win
([#2346](https://github.com/folke/snacks.nvim/issues/2346))
([602393a](602393aed2))
* **picker:** fix race condition causing "Finder yielded after done"
error. Closes [#2327](https://github.com/folke/snacks.nvim/issues/2327)
([c9ccbe5](c9ccbe5617))
* **picker:** set min file width to 40
([69417ac](69417ac681))
* **win:** use `sbuffer` instead of `split` for split windows
([bbd6d42](bbd6d42a97))


### Performance Improvements

* **picker:** don't use treesitter string parser, since a change in
nightly creates thousands of unlisted buffers in that case
([ad6c0a5](ad6c0a5e54))
* **picker:** re-use existing string parsers per language to prevent
needing to create new parsers
([efa304a](efa304a078))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-10-25 16:54:50 +02:00
folke
59e99e2787 chore(build): auto-generate docs 2025-10-25 14:43:31 +00:00
Folke Lemaitre
5add67dff9
docs(explorer): added more explorer docs 2025-10-25 16:40:42 +02:00
folke
84ce8b91e8 chore(build): auto-generate docs 2025-10-25 14:36:07 +00:00
folke
36e0734fb9 chore(build): auto-generate markdown docs 2025-10-25 14:34:37 +00:00
Folke Lemaitre
1c80468c9c
docs(keymap): added docs about Snacks.keymap. 2025-10-25 16:33:20 +02:00
Folke Lemaitre
0bf34afe34
feat(keymap): add filetype and LSP-aware keymap management
Add `Snacks.keymap.set()` and `Snacks.keymap.del()` as enhanced alternatives
to `vim.keymap.set/del` with support for:

- **Filetype-specific keymaps**: Set keymaps that only apply to buffers with
  specific filetypes using the `ft` option
- **LSP-aware keymaps**: Set keymaps based on LSP client capabilities using
  the `lsp` option (leverages Snacks.util.lsp)
- **Automatic application**: Keymaps are applied to existing buffers and
  automatically set up for new buffers via FileType autocmd

Drop-in replacement API with smart defaults (silent by default).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-25 16:32:11 +02:00
Folke Lemaitre
7a63ba5d37
feat(util): add LSP utility module with dynamic capability handlers
Add `Snacks.util.lsp.on()` to register handlers that fire when LSP clients
attach with specific capabilities. Supports filtering by:
- LSP method/capability
- Client name
- Buffer ID
- Any vim.lsp.get_clients() filter

Features:
- Handles both LspAttach and client/registerCapability events
- Ensures handlers only fire once per buffer
- Lazy-loaded via Snacks.util metatable

This provides a foundation for LSP-aware features like conditional keymaps.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-25 16:31:13 +02:00
Folke Lemaitre
f75eaf1e18
fix(dashboard): don't write to closed terminal buffer 2025-10-25 13:35:33 +02:00
Folke Lemaitre
d569072b2e
fix(explorer): macos has trash pre-installed, so no need to try osascript and move to first. Closes #2349
Some checks are pending
CI / ci (push) Waiting to run
2025-10-25 11:16:29 +02:00
folke
37cae803ef chore(build): auto-generate docs 2025-10-25 06:25:02 +00:00
Whitney Beck
602393aed2
fix(layout): provide parent win width/height when relative to win (#2346)
## Description

When a win is relative = "win" it should size itself relative to that
win's size. Currently this only happens correctly when the picker layout
is created. All subsequent updates, such as a toggle_preview action, can
potentially trigger calls to a function width/height opt with a
max_width and max_height smaller than was previously calculated. This
feeds into a recursive series of updates triggered by the WinResized
event triggering and updating with a yet smaller max_width or
max_height.

Additionally, because win.o.cols and win.o.lines is used,
relative/decimal dimensions would not calculate correctly in splits.
Screenshots are from a picker configured as
```
{
    col = 1,
    height = 0.9,
    width = 0.9,
    position = 'float',
    relative = 'win',
}
```
**before** 
<img width="1348" height="1358" alt="image"
src="https://github.com/user-attachments/assets/847b0565-afd0-4ca1-b44c-eb63e335afca"
/>

**after**
<img width="1354" height="1354" alt="image"
src="https://github.com/user-attachments/assets/064f25ae-ed17-42c8-8b34-f32652fab02d"
/>
2025-10-25 08:22:28 +02:00
folke
99e01f07a0 chore(build): auto-generate docs 2025-10-25 05:47:55 +00:00
folke
63755b15a5 chore(build): auto-generate markdown docs 2025-10-25 05:46:26 +00:00
Folke Lemaitre
ed08ef1a63
feat(explorer): add cross-platform trash support
- Add `trash` config option to use system trash when deleting files
- Implement trash support for Linux (gio, trash-cli, kioclient)
- Implement trash support for macOS (osascript/Finder)
- Implement trash support for Windows (PowerShell/RecycleBin)
- Add health check to verify trash command availability
- Gracefully fallback to permanent delete when trash unavailable
- Improve error messages with command details

Closes #982

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-25 07:45:02 +02:00
folke
4888c9b19d chore(build): auto-generate docs 2025-10-25 04:55:32 +00:00
folke
ebb44afb52 chore(build): auto-generate markdown docs 2025-10-25 04:54:06 +00:00
Folke Lemaitre
4122143240
fix(image): increase timeout for querying the terminal. Closes #2344 2025-10-25 06:52:56 +02:00
folke
a5af4d5d37 chore(build): auto-generate docs 2025-10-25 04:45:55 +00:00
folke
4ee7e43cb2 chore(build): auto-generate markdown docs 2025-10-25 04:44:30 +00:00
Folke Lemaitre
7bf4175588
fix(image): detach image when reloading image file. Closes #2343 2025-10-25 06:43:26 +02:00
Folke Lemaitre
c9528341a6
fix(dahboard): do full terminal reset when receiving first output and displayed cached contents
Some checks are pending
CI / ci (push) Waiting to run
2025-10-24 23:49:19 +02:00
Folke Lemaitre
6f72643323
fix(image): only attach to a buffer once. Closes #2343 2025-10-24 23:30:38 +02:00
folke
8af2c531a3 chore(build): auto-generate docs 2025-10-24 21:28:06 +00:00
Folke Lemaitre
4d776bdd1d
fix(dashboard): work-around for jobstart+pty issue where not all output is processed before exit. Closes #1706 2025-10-24 23:25:28 +02:00
folke
a2c1e69245 chore(build): auto-generate markdown docs
Some checks are pending
CI / ci (push) Waiting to run
2025-10-24 15:01:43 +00:00
flashios09
869709dd65
feat(win): add SnacksWinSeparator to default win.wo.winhighlight (#2340)
See #2336
2025-10-24 17:01:24 +02:00
Folke Lemaitre
efa304a078
perf(picker): re-use existing string parsers per language to prevent needing to create new parsers 2025-10-24 17:00:36 +02:00
folke
9c4236cae4 chore(build): auto-generate docs 2025-10-24 14:44:12 +00:00
folke
3ca1ac2e41 chore(build): auto-generate docs 2025-10-24 14:41:56 +00:00
flashios09
381265b543
feat(win): add default *Snacks* prefixed WinSeparator (#2338)
See #2336
2025-10-24 16:41:43 +02:00
folke
9f9409d2ac chore(build): auto-generate markdown docs 2025-10-24 14:40:33 +00:00
Folke Lemaitre
ad6c0a5e54
perf(picker): don't use treesitter string parser, since a change in nightly creates thousands of unlisted buffers in that case 2025-10-24 16:39:28 +02:00
folke
6aeb659f68 chore(build): auto-generate docs 2025-10-24 14:29:24 +00:00