Commit graph

1520 commits

Author SHA1 Message Date
Folke Lemaitre
52f30a198a
fix(util.lsp): Snacks.util.lsp.on() should trigger for each lsp client per buffer
Some checks are pending
CI / ci (push) Waiting to run
2025-10-28 00:31:52 +01:00
Folke Lemaitre
b3197e3a2a
fix(picker): increase default show_delay to 5s. Closes #2364 2025-10-28 00:21:26 +01:00
Folke Lemaitre
c4ec8b6d12
fix(picker): dont watch files for closed pickers. Fixes #2365 2025-10-28 00:18:36 +01:00
Folke Lemaitre
15014e013f
style(debug): luals types 2025-10-28 00:14:18 +01:00
Folke Lemaitre
c0d8f8cb78
refactor(picker.format): extend highlights with offset fixes 2025-10-28 00:14:18 +01:00
Folke Lemaitre
98345fb667
fix(picker.highlights): modifiable for set_lines 2025-10-28 00:14:17 +01:00
Folke Lemaitre
ce9e2993dd
feat(util): Snacks.util.stop() to safely stop/close a luv handle 2025-10-28 00:14:17 +01:00
Folke Lemaitre
5589c9d355
feat(util.spawn): Proc:json() 2025-10-28 00:14:17 +01:00
Folke Lemaitre
b5441575e0
fix(util.job): scroll to top when process exits 2025-10-28 00:14:17 +01:00
Folke Lemaitre
b0644884ef
fix(picker.preview): don't show locations for diff preview 2025-10-28 00:14:17 +01:00
Folke Lemaitre
726095723d
feat(picker.diff): native diff now also highlights the language of the diffed code in the diff 2025-10-28 00:14:16 +01:00
Folke Lemaitre
551d79f1c0
fix(scroll): only reset count when needed 2025-10-27 17:26:51 +01:00
Folke Lemaitre
0fbea13c9d
perf(scroll): combine all scrolling commands in one command + restore vim.v.count 2025-10-27 17:02:38 +01:00
Folke Lemaitre
2221fe6166
perf(scroll): smoother scrolling using new animations 2025-10-27 13:31:48 +01:00
Folke Lemaitre
b7a3fed8d9
perf(animate): smoother animations 2025-10-27 13:31:25 +01:00
Folke Lemaitre
ecde81fc0c
fix(picker): pause input progress info for 60ms to prevent flickering when finder is too fast
Some checks are pending
CI / ci (push) Waiting to run
2025-10-26 21:05:17 +01:00
Folke Lemaitre
d7caea32ab
style(picker): better debug/errors when running commands 2025-10-26 20:37:31 +01:00
Folke Lemaitre
244f5b1a97
refactor(picker): move explorer.confirm to picker.util 2025-10-26 20:37:02 +01:00
Folke Lemaitre
221d4b1747
fix(util.job): stop when attached buffer is no longer valid 2025-10-26 20:19:23 +01:00
Folke Lemaitre
3e8ad3f8eb
refactor(picker.format): move commit_message format to its own formatter 2025-10-26 20:14:01 +01:00
Folke Lemaitre
0e8f43edd7
style(picker): default highlight for SnacksPickerFileType 2025-10-26 20:13:25 +01:00
Folke Lemaitre
2439c493a5
fix(picker): only trim space in the title if it's preceded by a word like character (skips icons) 2025-10-26 20:12:59 +01:00
Folke Lemaitre
a249c86cf1
feat(picker.buffers): add filetype/buftype to search text 2025-10-26 20:12:31 +01:00
Folke Lemaitre
4ad8a41eac
fix(picker.preview): show proper preview message for deleted scratch buffers 2025-10-26 20:12:09 +01:00
Folke Lemaitre
c956b37246
fix(util.job): stop on BufWipeout and BufDelete 2025-10-26 20:11:40 +01:00
Folke Lemaitre
17033e67ef
fix(util): color() should not create hl groups 2025-10-26 20:11:19 +01:00
Folke Lemaitre
3a8ecf5912
perf(notifier): stop trying to fit more notifs in the layout after skipping max 10 2025-10-26 20:10:56 +01:00
Folke Lemaitre
03872973b3
fix(win): scratch buffers were sometimes not deleted 2025-10-26 20:10:17 +01:00
Folke Lemaitre
6a132716af
feat(picker.buffers): added buftype and filetype for scratch buffers 2025-10-26 19:23:47 +01:00
Folke Lemaitre
597ebd4115
fix(picker.git_branches): git log preview. Closes #2360
Some checks are pending
CI / ci (push) Waiting to run
2025-10-26 18:27:57 +01:00
Folke Lemaitre
583a0c1c06
fix: keymap docs 2025-10-26 14:57:03 +01:00
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 Lemaitre
b0f21fa745
feat(keymap): added new enabled option 2025-10-26 12:19:40 +01: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 Lemaitre
e1dc6b3bdd fix(explorer): windows path fixes 2025-10-25 16:22:44 -07: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 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
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 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