github-actions[bot]
eadb0ca316
chore(main): release 2.28.0
...
🤖 I have created a release *beep* *boop*
---
## [2.28.0](https://github.com/folke/snacks.nvim/compare/v2.27.0...v2.28.0 ) (2025-11-01)
### Features
* **gh:** new `gh` (GitHub cli) integration ([85b8ec2 ](85b8ec2109 ))
* **image:** when opts.conceal, conceal remainig lines that are not covered by the image. See [#2391 ](https://github.com/folke/snacks.nvim/issues/2391 ) ([404027c ](404027c973 ))
* **picker.buffers:** add filetype/buftype to search text ([a249c86 ](a249c86cf1 ))
* **picker.buffers:** added buftype and filetype for scratch buffers ([6a13271 ](6a132716af ))
* **picker.diff:** moved git_diff finder to separate file so it can be re-used + made it more robust. Closes [#2366 ](https://github.com/folke/snacks.nvim/issues/2366 ) ([3049ad8 ](3049ad8beb ))
* **picker.diff:** native diff now also highlights the language of the diffed code in the diff ([7260957 ](726095723d ))
* **picker.git_diff:** `git_diff` now also shows staged hunks and added stage/unstage/restore actions for hunks. Closes [#2382 ](https://github.com/folke/snacks.nvim/issues/2382 ) ([1fb3f4d ](1fb3f4de49 ))
* **picker.git_diff:** added `staged` flag ([118648c ](118648ce93 ))
* **picker.highlights:** badges ([202e595 ](202e595e55 ))
* **picker.preview:** allow items to define a title used in the preview window ([4b572f4 ](4b572f4785 ))
* **picker.preview:** support for images and render markdown ([9585da6 ](9585da6c57 ))
* **picker.util:** cmdline parser used to properly parse diff args ([5025989 ](502598953f ))
* **picker:** better integration with markview and render-markdown when previewing ([4708e9a ](4708e9a386 ))
* **scratch:** store scratch info in meta files, instead of the filename + custom filekeys ([85f8e22 ](85f8e22281 ))
* **util.spawn:** `Proc:json()` ([5589c9d ](5589c9d355 ))
* **util:** `Snacks.util.stop()` to safely stop/close a luv handle ([ce9e299 ](ce9e2993dd ))
### Bug Fixes
* **explorer.tree:** only strip trasiling forward slashes if not at root. Closes [#2375 ](https://github.com/folke/snacks.nvim/issues/2375 ) ([72dc621 ](72dc6213f7 ))
* **explorer:** differentiate if file or folder when deleting on Windows ([#2373 ](https://github.com/folke/snacks.nvim/issues/2373 )) ([59c5545 ](59c5545e91 ))
* **explorer:** do reveal in on_show if explorer is not open yet. Closes [#2388 ](https://github.com/folke/snacks.nvim/issues/2388 ) ([ba529d4 ](ba529d4f5d ))
* **explorer:** schedule `on_find` (typically reveal), for both files finder and when git status updates the finder. Closes [#2388 ](https://github.com/folke/snacks.nvim/issues/2388 ) ([a9b57b2 ](a9b57b2a7e ))
* **gh:** add action idx to `gh_actions` text ([d94184d ](d94184d1d9 ))
* **image.inline:** off-by-one for finding visible images at the last line of the buffer ([04b3a54 ](04b3a54576 ))
* **image:** avoid nested math environments ([#2345 ](https://github.com/folke/snacks.nvim/issues/2345 )) ([66e3dc4 ](66e3dc4619 ))
* **image:** check for invalid buffer ([9ad4178 ](9ad41782ec ))
* **image:** check to update on BufWinEnter and attach to buffer changes ([e18e4f6 ](e18e4f6452 ))
* **image:** don't add placements to concealed lines. Closes [#2391 ](https://github.com/folke/snacks.nvim/issues/2391 ) ([13963b1 ](13963b1ec4 ))
* **image:** guard against invalid buffers. Closes [#2383 ](https://github.com/folke/snacks.nvim/issues/2383 ) ([4bb1ce1 ](4bb1ce16ed ))
* keymap docs ([583a0c1 ](583a0c1c06 ))
* **keymap:** make sure opts are a table. Closes [#2392 ](https://github.com/folke/snacks.nvim/issues/2392 ) ([367d1bd ](367d1bd385 ))
* **layout:** only max zindex for snacks windows/layouts ([8eddc0b ](8eddc0b380 ))
* **picker.actions:** `drop` and `tabdrop` should never reload existing buffers ([#2368 ](https://github.com/folke/snacks.nvim/issues/2368 )) ([6cf2fee ](6cf2fee619 ))
* **picker.actions:** use `buffer!` instead of `buffer` for edit. Closes [#2378 ](https://github.com/folke/snacks.nvim/issues/2378 ) ([2a1a001 ](2a1a001d3a ))
* **picker.diff:** better filename parsing. See [#2366 ](https://github.com/folke/snacks.nvim/issues/2366 ) ([377f3bf ](377f3bfeca ))
* **picker.diff:** first line of header ([fb011c2 ](fb011c257f ))
* **picker.diff:** only process `---` diffs directly if it doesn't start with a diff header ([0a33aec ](0a33aec0c6 ))
* **picker.filter:** get cwd from active tabpage if available ([c1b517f ](c1b517f545 ))
* **picker.finder:** mutate existing opts ([c91e230 ](c91e23060c ))
* **picker.finder:** tmp fix for [#2386 ](https://github.com/folke/snacks.nvim/issues/2386 ) ([5eea5f9 ](5eea5f9428 ))
* **picker.git_branches:** git log preview. Closes [#2360 ](https://github.com/folke/snacks.nvim/issues/2360 ) ([597ebd4 ](597ebd4115 ))
* **picker.git_diff:** remove `--default-prefix`, since that's no longer needed. See [#2382 ](https://github.com/folke/snacks.nvim/issues/2382 ) ([40774ae ](40774ae6ca ))
* **picker.git_diff:** set `group=false` by default, since we also have `git_status` ([530e591 ](530e591345 ))
* **picker.highlights:** modifiable for set_lines ([98345fb ](98345fb667 ))
* **picker.keymaps:** try to locate neovim compiled lua source files for keymaps ([76160be ](76160be5d3 ))
* **picker.lsp:** fixed `vim.str_byteindex` capability check. Closes [#2389 ](https://github.com/folke/snacks.nvim/issues/2389 ) ([46917d0 ](46917d0629 ))
* **picker.lsp:** some LSP servers notify completion before sending the actual result. See [#2372 ](https://github.com/folke/snacks.nvim/issues/2372 ) ([aa8a318 ](aa8a318779 ))
* **picker.lsp:** use `LspRequest` to track completed and cancelled requests. Fixes [#2364 ](https://github.com/folke/snacks.nvim/issues/2364 ) ([8afb609 ](8afb609333 ))
* **picker.preview:** again. docgen seems broken ([758bbfa ](758bbfa13a ))
* **picker.preview:** don't show locations for diff preview ([b064488 ](b0644884ef ))
* **picker.preview:** fckup ([fd7795e ](fd7795e9cd ))
* **picker.preview:** fix ([e2c1c52 ](e2c1c527e4 ))
* **picker.preview:** show proper preview message for deleted scratch buffers ([4ad8a41 ](4ad8a41eac ))
* **picker.util:** better relative time format ([3e30fb6 ](3e30fb6c70 ))
* **picker.util:** ignore errors from corrupted kv stores. Closes [#2394 ](https://github.com/folke/snacks.nvim/issues/2394 ) ([b3d01c5 ](b3d01c59ba ))
* **picker.watch:** check again for closed picker after schedule. See [#2365 ](https://github.com/folke/snacks.nvim/issues/2365 ) ([8ad80de ](8ad80de67b ))
* **picker:** close picker when layout closes. Closes [#2365 ](https://github.com/folke/snacks.nvim/issues/2365 ) ([779746f ](779746f9a8 ))
* **picker:** dont watch files for closed pickers. Fixes [#2365 ](https://github.com/folke/snacks.nvim/issues/2365 ) ([c4ec8b6 ](c4ec8b6d12 ))
* **picker:** increase default show_delay to 5s. Closes [#2364 ](https://github.com/folke/snacks.nvim/issues/2364 ) ([b3197e3 ](b3197e3a2a ))
* **picker:** only trim space in the title if it's preceded by a word like character (skips icons) ([2439c49 ](2439c493a5 ))
* **picker:** pause input progress info for 60ms to prevent flickering when finder is too fast ([ecde81f ](ecde81fc0c ))
* **scratch:** make sure zindex of scratch window is higher than existing floating windows ([c8422da ](c8422da50d ))
* **scroll:** only reset count when needed ([551d79f ](551d79f1c0 ))
* **util.job:** scroll to top when process exits ([b544157 ](b5441575e0 ))
* **util.job:** stop on BufWipeout and BufDelete ([c956b37 ](c956b37246 ))
* **util.job:** stop when attached buffer is no longer valid ([221d4b1 ](221d4b1747 ))
* **util.job:** use nvim_win_set_cursor instead of `gg` ([5faed2f ](5faed2f7ab ))
* **util.lsp:** `Snacks.util.lsp.on()` should trigger for each lsp client per buffer ([52f30a1 ](52f30a198a ))
* **util:** color() should not create hl groups ([17033e6 ](17033e67ef ))
* **win:** ignore errors on destroy. Closes [#2381 ](https://github.com/folke/snacks.nvim/issues/2381 ) ([a8930bd ](a8930bdb61 ))
* **win:** scratch buffers were sometimes not deleted ([0387297 ](03872973b3 ))
* **win:** when fixbuf triggers in a floating window, just close it. Closes [#2380 ](https://github.com/folke/snacks.nvim/issues/2380 ) ([de35242 ](de352425f7 ))
### Performance Improvements
* **animate:** smoother animations ([b7a3fed ](b7a3fed8d9 ))
* **notifier:** stop trying to fit more notifs in the layout after skipping max 10 ([3a8ecf5 ](3a8ecf5912 ))
* **picker.util:** cache badge hl groups ([cb85844 ](cb85844e84 ))
* **scroll:** combine all scrolling commands in one command + restore vim.v.count ([0fbea13 ](0fbea13c9d ))
* **scroll:** smoother scrolling using new animations ([2221fe6 ](2221fe6166 ))
* **statuscolumn:** only calculate components that are actually needed ([bb80317 ](bb80317647 ))
### Reverts
* jump `buffer` -> `buffer!`. See [#2378 ](https://github.com/folke/snacks.nvim/issues/2378 ) ([143e9b5 ](143e9b58c7 ))
---
This PR was generated with [Release Please](https://github.com/googleapis/release-please ). See [documentation](https://github.com/googleapis/release-please#release-please ).
2025-11-01 13:43:16 +01:00
folke
d7bc72d8be
chore(build): auto-generated vimdocs
2025-11-01 12:31:35 +00:00
Folke Lemaitre
60fb588af1
docs: added gh docs
2025-11-01 13:29:29 +01:00
Folke Lemaitre
d94184d1d9
fix(gh): add action idx to gh_actions text
CI / ci (push) Waiting to run
2025-11-01 13:07:22 +01:00
Folke Lemaitre
8eddc0b380
fix(layout): only max zindex for snacks windows/layouts
2025-11-01 13:05:09 +01:00
folke
01e6e50ce7
chore(build): auto-generated vimdocs
2025-11-01 11:14:10 +00:00
folke
9dca377513
chore(build): auto-generated docs
2025-11-01 11:12:59 +00:00
Folke Lemaitre
85b8ec2109
feat(gh): new gh (GitHub cli) integration
...
## Description
<!-- Describe the big picture of your changes to communicate to the
maintainers
why we should accept this pull request. -->
## Related Issue(s)
<!--
If this PR fixes any issues, please link to the issue here.
- Fixes #<issue_number>
-->
## Screenshots
<!-- Add screenshots of the changes if applicable. -->
2025-11-01 12:12:06 +01:00
Shizuka
9ad41782ec
fix(image): check for invalid buffer
2025-11-01 06:28:16 +01:00
folke
78c875b222
chore(build): auto-generated vimdocs
CI / ci (push) Waiting to run
2025-10-31 22:24:19 +00:00
folke
e60badabb3
chore(build): auto-generated docs
2025-10-31 22:22:59 +00:00
folke
3854c1f584
chore(build): auto-generated vimdocs
2025-10-31 22:22:16 +00:00
Folke Lemaitre
443a3bd6e2
docs: make some scratch methods private
2025-10-31 23:22:07 +01:00
folke
ffd45f1c5f
chore(build): auto-generated docs
2025-10-31 22:20:57 +00:00
Folke Lemaitre
779746f9a8
fix(picker): close picker when layout closes. Closes #2365
2025-10-31 23:19:58 +01:00
Folke Lemaitre
143e9b58c7
revert: jump buffer -> buffer!. See #2378
2025-10-31 21:21:05 +01:00
Folke Lemaitre
76160be5d3
fix(picker.keymaps): try to locate neovim compiled lua source files for keymaps
CI / ci (push) Waiting to run
2025-10-31 07:41:18 +01:00
folke
0bc7c2631a
chore(build): auto-generated vimdocs
CI / ci (push) Waiting to run
2025-10-30 15:12:07 +00:00
folke
953b52eb64
chore(build): auto-generated docs
2025-10-30 15:10:37 +00:00
Folke Lemaitre
85f8e22281
feat(scratch): store scratch info in meta files, instead of the filename + custom filekeys
2025-10-30 16:09:47 +01:00
Folke Lemaitre
c8422da50d
fix(scratch): make sure zindex of scratch window is higher than existing floating windows
2025-10-30 13:50:06 +01:00
folke
6ca541747c
chore(build): auto-generated vimdocs
CI / ci (push) Waiting to run
2025-10-30 11:01:42 +00:00
folke
7ebccb5a91
chore(build): auto-generated docs
2025-10-30 11:00:32 +00:00
Folke Lemaitre
1fb3f4de49
feat(picker.git_diff): git_diff now also shows staged hunks and added stage/unstage/restore actions for hunks. Closes #2382
2025-10-30 11:59:39 +01:00
Folke Lemaitre
aa8a318779
fix(picker.lsp): some LSP servers notify completion before sending the actual result. See #2372
2025-10-30 11:01:07 +01:00
Folke Lemaitre
87804d67b9
style(picker.lsp): add debugging info for LSP yielding after done. See #2372
2025-10-30 10:47:45 +01:00
Folke Lemaitre
b3d01c59ba
fix(picker.util): ignore errors from corrupted kv stores. Closes #2394
2025-10-30 10:20:43 +01:00
David
6cf2fee619
fix(picker.actions): drop and tabdrop should never reload existing buffers ( #2368 )
...
## Description
When using `tabdrop` as the `jump` action and jumping to a location in
the current buffer, the existing implementation always triggers a reload
of the current buffer because the `vim.cmd` is unconditional. This
causes unnecessary triggering of `BufRead*` and `LspAttach`
auto-commands, which can then trigger a lot of things that can be
CPU-intensive (linters, LSP, etc.). This PR skips calling the `cmd` when
jumping to the current buffer, and hence avoids the excessive triggering
of those auto-commands.
---------
Co-authored-by: Folke Lemaitre <folke.lemaitre@gmail.com>
2025-10-30 10:17:01 +01:00
Folke Lemaitre
404027c973
feat(image): when opts.conceal, conceal remainig lines that are not covered by the image. See #2391
2025-10-30 09:14:42 +01:00
Folke Lemaitre
13963b1ec4
fix(image): don't add placements to concealed lines. Closes #2391
2025-10-30 09:13:34 +01:00
Folke Lemaitre
04b3a54576
fix(image.inline): off-by-one for finding visible images at the last line of the buffer
2025-10-30 09:12:24 +01:00
Folke Lemaitre
a9b57b2a7e
fix(explorer): schedule on_find (typically reveal), for both files finder and when git status updates the finder. Closes #2388
2025-10-30 08:17:06 +01:00
Folke Lemaitre
367d1bd385
fix(keymap): make sure opts are a table. Closes #2392
2025-10-30 07:56:38 +01:00
Folke Lemaitre
46917d0629
fix(picker.lsp): fixed vim.str_byteindex capability check. Closes #2389
2025-10-30 07:48:46 +01:00
Folke Lemaitre
40774ae6ca
fix(picker.git_diff): remove --default-prefix, since that's no longer needed. See #2382
2025-10-30 00:57:51 +01:00
Folke Lemaitre
ba529d4f5d
fix(explorer): do reveal in on_show if explorer is not open yet. Closes #2388
CI / ci (push) Waiting to run
2025-10-30 00:01:40 +01:00
folke
79fb03dc86
chore(build): auto-generated vimdocs
2025-10-29 22:56:45 +00:00
folke
75c8e37ef7
chore(build): auto-generated docs
2025-10-29 22:55:35 +00:00
Folke Lemaitre
5f429fa58f
refactor(picker): ctx:clone. closes #2386
2025-10-29 23:54:50 +01:00
Folke Lemaitre
5eea5f9428
fix(picker.finder): tmp fix for #2386
CI / ci (push) Waiting to run
2025-10-29 19:28:55 +01:00
Folke Lemaitre
8afb609333
fix(picker.lsp): use LspRequest to track completed and cancelled requests. Fixes #2364
2025-10-29 19:20:34 +01:00
Folke Lemaitre
4bb1ce16ed
fix(image): guard against invalid buffers. Closes #2383
2025-10-29 17:34:00 +01:00
Folke Lemaitre
8ad80de67b
fix(picker.watch): check again for closed picker after schedule. See #2365
2025-10-29 17:25:37 +01:00
folke
14ead48b51
chore(build): auto-generated vimdocs
2025-10-29 14:33:08 +00:00
folke
9aaa88bc6c
chore(build): auto-generated docs
2025-10-29 14:31:55 +00:00
Folke Lemaitre
118648ce93
feat(picker.git_diff): added staged flag
2025-10-29 15:30:58 +01:00
Folke Lemaitre
0a33aec0c6
fix(picker.diff): only process --- diffs directly if it doesn't start with a diff header
2025-10-29 15:22:14 +01:00
Folke Lemaitre
de352425f7
fix(win): when fixbuf triggers in a floating window, just close it. Closes #2380
2025-10-29 15:15:59 +01:00
Daniel Wennberg
66e3dc4619
fix(image): avoid nested math environments ( #2345 )
...
## Description
Inline LaTeX equation preview renders equations twice, partly on top of
each other, if you use nested math environments. Minimal reproducer:
```latex
\documentclass{article}
\begin{document}
\begin{equation}
\begin{aligned}
x_+ &= \frac{-b + \sqrt{b^2 - 4ac}}{2a} \, , \\
x_- &= \frac{-b - \sqrt{b^2 - 4ac}}{2a} \, .
\end{aligned}
\end{equation}
\end{document}
```
While, adding a test case for this to `test.tex` I also corrected a
package name such that it compiles without error.
## Screenshots
**Before**
<img width="248" height="203" alt="Screenshot 2025-10-24 at 16 22 05"
src="https://github.com/user-attachments/assets/ab55ef8c-1f04-49e5-b731-95b638ac9db7 "
/>
**After**
<img width="248" height="203" alt="Screenshot 2025-10-24 at 16 23 33"
src="https://github.com/user-attachments/assets/4d3d53f6-7122-452f-b891-5a712f79fe40 "
/>
2025-10-29 14:47:52 +01:00
Folke Lemaitre
2a1a001d3a
fix(picker.actions): use buffer! instead of buffer for edit. Closes #2378
2025-10-29 14:41:19 +01:00