Tags: folke/snacks.nvim
Tags
chore(main): release 2.31.0 (#2466) 🤖 I have created a release *beep* *boop* --- ## [2.31.0](v2.30.0...v2.31.0) (2026-03-20) ### Features * **gh:** added `Start Review`. Closes [#2463](#2463) ([ac5f497](ac5f497)) * **gh:** added cycle win and scrolling to scratch buffers when opened in a picker. Closes [#2480](#2480) ([021855c](021855c)) * **gh:** make copilot authors as bots ([c6ab189](c6ab189)) * **gh:** make markview.nvim play nicely with snacks. See [#2467](#2467) ([deeb1e0](deeb1e0)) * **gh:** open scratch buffers at the bottom of the window. Closes [#2476](#2476) ([a6a9678](a6a9678)) * **gh:** special formatting for code suggestions in review comments. See [#2463](#2463) ([f1c7f62](f1c7f62)) * **gh:** when selecting lines in a diff to add a review comment, you can now suggest code changes. See [#2463](#2463) ([e896fb9](e896fb9)) * **lua:** add any treesitter injection to a string with a comment like -- inject:graphql ([1d5b12d](1d5b12d)) * **picker.actions:** allow specifying an additional window for `cycle_win` ([197f393](197f393)) * **picker.lspconfig:** show available dynamic registered code actions ([521ef46](521ef46)) * **picker.lspconfig:** show available server commands and code actions ([7a90a08](7a90a08)) * **win:** `opts.footer_keys` can now be an array of lhs to show instead of all. See [#2469](#2469) ([6d72138](6d72138)) * **win:** better zindex calculation ([08c0951](08c0951)) * **win:** new border `top_bottom` ([6134c98](6134c98)) ### Bug Fixes * **gh.item:** timestamps should be in UTC, not local time ([1ba0bf8](1ba0bf8)) * **gh.scratch:** if scratch would hide the cursor, then scroll preview up taking scrolloff into account. See [#2480](#2480) ([a271610](a271610)) * **gh:** better integration with render-markdown. Closes [#2467](#2467) ([717073d](717073d)) * **gh:** diff comment action should only show when available ([fe20e95](fe20e95)) * **gh:** render gh comments as markdown when displaying in a non-markdown buffer. Closes [#2481](#2481) ([06e9ca9](06e9ca9)) * **gh:** rendering of markdown comments. Closes [#2488](#2488) ([dec29f5](dec29f5)) * **gh:** set default scratch `height=15` and fix bottom offset for custom height ([6900f3f](6900f3f)) * **grep:** remove `MATCH_SEP` before sending to notify ([#2744](#2744)) ([9912042](9912042)) * **grep:** remove nul bytes from warning messages in grep output. Fixes [#2744](#2744), Closes [#2768](#2768) ([b2cb00e](b2cb00e)) * **grep:** use %z to replace nul bytes ([a049339](a049339)) * **input:** fixed completion. Closes [#2472](#2472) ([3024376](3024376)) * **lspconfig:** handle complex values in lsp config preview. Closes [#2711](#2711) ([25f53f7](25f53f7)) * **markdown:** use new markview API ([9b86d57](9b86d57)) * **picker.actions:** `vim.v.count1` should be `1` in insert mode. Closes [#2492](#2492) ([d902c0a](d902c0a)) * **picker.confirm:** better layout for confirm ([7f62aa6](7f62aa6)) * **picker.diff:** make diff filename extmarks play nicely with markview / markdown-renderer ([4f749ab](4f749ab)) * **picker.git:** fix cwd for git diff. Closes [#2483](#2483) ([9076793](9076793)) * **picker.lsp:** wait for pending requests. See [#2527](#2527) ([fe7cfe9](fe7cfe9)) * **picker.preview:** remove `--no-ext-diff` option for git diff preview ([836e073](836e073)) * **picker.spinner:** when parent win is not float win ([#2487](#2487)) ([8ca098c](8ca098c)) * **picker:** fix nowait for `<c-r>` ([685c433](685c433)) * **scratch:** set filetype correctly. Closes [#2510](#2510) ([3c5c23b](3c5c23b)) * **util.diff:** proper linebreak repeat for annotation boxes ([64179b9](64179b9)) * **win:** allow scrolling beyond eob ([8b5f762](8b5f762)) * **win:** use normkey instead of keytrans for footer keys ([9bd41bb](9bd41bb)) * **win:** when a floating win becomes non-floating, remove its backdrop ([c1e1500](c1e1500)) ### Performance Improvements * **bigfile:** disable completion to avoid lag when entering insert mode ([#2475](#2475)) ([c49c3f3](c49c3f3)) --- 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>
chore(main): release 2.30.0 🤖 I have created a release *beep* *boop* --- ## [2.30.0](v2.29.0...v2.30.0) (2025-11-06) ### Features * **diff:** prettier commit rendering (git show, diff with header) ([dc2186e](dc2186e)) * **gh:** add inline review comment annotations to diff viewer ([c83ff8d](c83ff8d)) * **gh:** create review comments in GitHub PR diff, on diff lines. Closes [#2446](#2446) ([85bf3f0](85bf3f0)) * **layout:** allow resizing split layouts. See [#2390](#2390) ([913379c](913379c)) * **picker.gh_diff:** you can now reply to review comments in diffs with `a`. See [#2446](#2446) ([c3bda87](c3bda87)) * **picker.icons:** make it easier to add custom icon sources ([82e6966](82e6966)) * **picker.marks:** added `<c-x>` to delete a mark from the list. See [#2390](#2390) ([9a04605](9a04605)) * **picker:** when picker was started from insert mode, return to insert after paste ([a417630](a417630)) * **util.async:** add proper backtrace to unhandled async errors ([01f6cac](01f6cac)) ### Bug Fixes * **gh:** force `fancy` diff style for gh pr diff, since that's needed to render/interact with review comments ([bd71cd4](bd71cd4)) * **gh:** only skip empty comment reviews. Closes [#2445](#2445) ([1848d74](1848d74)) * **gh:** pass correct context in gh_perform_action. Closes [#2442](#2442). Closes [#2443](#2443) ([13edbc6](13edbc6)) * **gh:** properly handly pending requests ([7a15e16](7a15e16)) * **gh:** use lua to parse dates so we can do this in a fast context ([cd0d6fe](cd0d6fe)) * **image:** run terminal capability detection synchronous when needed. Closes [#2439](#2439) ([58f1152](58f1152)) * **layout:** ignore very zindex windows for calulating layout zindex, so that it stays below things like notifications ([47340e6](47340e6)) * **lsp:** properly detach buffers on LspDetach. Closes [#2457](#2457) ([beb995e](beb995e)) * **picker.actions:** don't open a new tab if the current tab is empty. Closes [#2461](#2461) ([4e2424e](4e2424e)) * **picker.diff:** added `showbreak=""` for fancy diff. Closes [#2441](#2441) ([fb55f7b](fb55f7b)) * **picker.format:** use file for icon. fallback to ft when buffer is not a file. See [#2390](#2390) ([20ac8bf](20ac8bf)) * **picker.grep_word:** pass `--word-regexp` to `ripgrep` ([6aad368](6aad368)) * **picker.highlight:** resolve ([4438ee4](4438ee4)) * **picker.input:** startinsert when starting the picker from terminal mode. See [#2390](#2390) ([b2054a3](b2054a3)) * **picker.lsp_config:** nil on lsp info ([#2459](#2459)) ([c5257fa](c5257fa)) * **scope:** textobjects should use synchronous treesitter parsing. Closes [#2448](#2448) ([9737c25](9737c25)) * **toggle:** set/get raw values for option toggles. See [#2390](#2390) ([41da728](41da728)) * **win:** set `foldcolumn='0'` for minimal style. See [#2390](#2390) ([195faa0](195faa0)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
chore(main): release 2.29.0 (#2408) 🤖 I have created a release *beep* *boop* --- ## [2.29.0](v2.28.0...v2.29.0) (2025-11-04) ### Features * **gh.diff:** show git status in PR diff ([c671d06](c671d06)) * **gh:** added reviews and nice diffs to gh buffer views. See [#2411](#2411) ([1335ca1](1335ca1)) * **gh:** allow to update pr branch ([#2419](#2419)) ([f75f307](f75f307)) * **gh:** use new diff renderer for gh pr reviews ([714edec](714edec)) * **gh:** when on a review comment, the `gh_comment` action will now do a reply instead of a top-level comment. Fixes [#2410](#2410) ([a4f2b9d](a4f2b9d)) * **gh:** you can now use `Snacks.picker.gh_actions()` directly to see actions for the checked out PR ([d0d10f6](d0d10f6)) * **picker.diff:** new fancy diff renderer ([22eea90](22eea90)) * **picker.git_diff:** show proper git status for git diff files ([ab48eeb](ab48eeb)) * **picker.git_diff:** show renames ([77609a0](77609a0)) * **picker.lsp_config:** added server/dynamic capabilities to preview ([da14fac](da14fac)) * **picker:** consolidate all diff options under `opts.previewers.diff`. Default style is `fancy` ([b65b06c](b65b06c)) * **zen:** added `center` option that defaults to `true` for zen mode and `false` for zoom mode. Closes [#2422](#2422) ([3c2d791](3c2d791)) ### Bug Fixes * **dashboard:** start job after the terminal window is shown to make sure it has the correct size. Closes [#2421](#2421) ([e440df3](e440df3)) * **diff:** fallback if `Normal` has no fg color. Closes [#2436](#2436) ([7f453c4](7f453c4)) * **diff:** improved diff parsing. Closes [#2424](#2424). Closes [#2420](#2420) ([b6e4eb7](b6e4eb7)) * **diff:** remove diff injections. Closes [#2406](#2406) ([ecc21bb](ecc21bb)) * **gh.api:** get repo from upstream remote if availble. fallback to origin ([5043637](5043637)) * **gh.api:** pass repo to cmd. Closes [#2415](#2415) ([78046eb](78046eb)) * **gh.diff:** fixed rendering of diff header when wrap=true ([07c569d](07c569d)) * **gh.item:** better method to extract repo from gh url. Closes [#2418](#2418) ([52d544c](52d544c)) * **gh.render:** added support for older `StatusContext` checks. Closes [#2407](#2407) ([74864a7](74864a7)) * **gh.render:** use check name. See [#2407](#2407) ([6f60105](6f60105)) * **gh:** better way of determining current PR ([bd3c1a0](bd3c1a0)) * **gh:** input for api should be a table, not a string. Closes [#2427](#2427) ([1b3e409](1b3e409)) * **image:** allow to fully disable all image rendering with `opts.image.enabled = false`. Closes [#2404](#2404) ([34a6591](34a6591)) * **image:** disable image conversion error notifications by default ([cfcf525](cfcf525)) * **lsp:** check lsp handlers after LspAttach, since attached_buffers won't have been set ([1861b0a](1861b0a)) * **picker.actions:** only allow stage/unstage/restore for some diffs ([9cde35b](9cde35b)) * **picker.diff:** move git status calc based on diff to format ([b553c18](b553c18)) * **picker.diff:** parse full diff including diff and hunk headers. Closes [#2429](#2429) ([53d8012](53d8012)) * **picker.git_diff:** don't show git status, disable stage/unstage/restore when merge-base is set. Closes [#2397](#2397) ([6ff82ca](6ff82ca)) * **picker.highlight:** resolve all text chunks when needed. Not just the first. ([962aadd](962aadd)) * **picker.undo:** cleanup tmp files in `async:on("done")`. Closes [#2434](#2434) ([3038dac](3038dac)) * **picker.undo:** set initial target to the current undo entry. See [#2434](#2434) ([dc245ef](dc245ef)) * **picker:** don't focus a picker window when toggling a window and picker wasn't current. closes [#2417](#2417) ([b80b330](b80b330)) * revert rename of actions.lua to tomdar87@outlook.com ([#2423](#2423)) ([8bb3ad6](8bb3ad6)) * **win:** fixed fixbuf. Closes [#2409](#2409) ([2099572](2099572)) --- 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>
chore(main): release 2.28.0 🤖 I have created a release *beep* *boop* --- ## [2.28.0](v2.27.0...v2.28.0) (2025-11-01) ### Features * **gh:** new `gh` (GitHub cli) integration ([85b8ec2](85b8ec2)) * **image:** when opts.conceal, conceal remainig lines that are not covered by the image. See [#2391](#2391) ([404027c](404027c)) * **picker.buffers:** add filetype/buftype to search text ([a249c86](a249c86)) * **picker.buffers:** added buftype and filetype for scratch buffers ([6a13271](6a13271)) * **picker.diff:** moved git_diff finder to separate file so it can be re-used + made it more robust. Closes [#2366](#2366) ([3049ad8](3049ad8)) * **picker.diff:** native diff now also highlights the language of the diffed code in the diff ([7260957](7260957)) * **picker.git_diff:** `git_diff` now also shows staged hunks and added stage/unstage/restore actions for hunks. Closes [#2382](#2382) ([1fb3f4d](1fb3f4d)) * **picker.git_diff:** added `staged` flag ([118648c](118648c)) * **picker.highlights:** badges ([202e595](202e595)) * **picker.preview:** allow items to define a title used in the preview window ([4b572f4](4b572f4)) * **picker.preview:** support for images and render markdown ([9585da6](9585da6)) * **picker.util:** cmdline parser used to properly parse diff args ([5025989](5025989)) * **picker:** better integration with markview and render-markdown when previewing ([4708e9a](4708e9a)) * **scratch:** store scratch info in meta files, instead of the filename + custom filekeys ([85f8e22](85f8e22)) * **util.spawn:** `Proc:json()` ([5589c9d](5589c9d)) * **util:** `Snacks.util.stop()` to safely stop/close a luv handle ([ce9e299](ce9e299)) ### Bug Fixes * **explorer.tree:** only strip trasiling forward slashes if not at root. Closes [#2375](#2375) ([72dc621](72dc621)) * **explorer:** differentiate if file or folder when deleting on Windows ([#2373](#2373)) ([59c5545](59c5545)) * **explorer:** do reveal in on_show if explorer is not open yet. Closes [#2388](#2388) ([ba529d4](ba529d4)) * **explorer:** schedule `on_find` (typically reveal), for both files finder and when git status updates the finder. Closes [#2388](#2388) ([a9b57b2](a9b57b2)) * **gh:** add action idx to `gh_actions` text ([d94184d](d94184d)) * **image.inline:** off-by-one for finding visible images at the last line of the buffer ([04b3a54](04b3a54)) * **image:** avoid nested math environments ([#2345](#2345)) ([66e3dc4](66e3dc4)) * **image:** check for invalid buffer ([9ad4178](9ad4178)) * **image:** check to update on BufWinEnter and attach to buffer changes ([e18e4f6](e18e4f6)) * **image:** don't add placements to concealed lines. Closes [#2391](#2391) ([13963b1](13963b1)) * **image:** guard against invalid buffers. Closes [#2383](#2383) ([4bb1ce1](4bb1ce1)) * keymap docs ([583a0c1](583a0c1)) * **keymap:** make sure opts are a table. Closes [#2392](#2392) ([367d1bd](367d1bd)) * **layout:** only max zindex for snacks windows/layouts ([8eddc0b](8eddc0b)) * **picker.actions:** `drop` and `tabdrop` should never reload existing buffers ([#2368](#2368)) ([6cf2fee](6cf2fee)) * **picker.actions:** use `buffer!` instead of `buffer` for edit. Closes [#2378](#2378) ([2a1a001](2a1a001)) * **picker.diff:** better filename parsing. See [#2366](#2366) ([377f3bf](377f3bf)) * **picker.diff:** first line of header ([fb011c2](fb011c2)) * **picker.diff:** only process `---` diffs directly if it doesn't start with a diff header ([0a33aec](0a33aec)) * **picker.filter:** get cwd from active tabpage if available ([c1b517f](c1b517f)) * **picker.finder:** mutate existing opts ([c91e230](c91e230)) * **picker.finder:** tmp fix for [#2386](#2386) ([5eea5f9](5eea5f9)) * **picker.git_branches:** git log preview. Closes [#2360](#2360) ([597ebd4](597ebd4)) * **picker.git_diff:** remove `--default-prefix`, since that's no longer needed. See [#2382](#2382) ([40774ae](40774ae)) * **picker.git_diff:** set `group=false` by default, since we also have `git_status` ([530e591](530e591)) * **picker.highlights:** modifiable for set_lines ([98345fb](98345fb)) * **picker.keymaps:** try to locate neovim compiled lua source files for keymaps ([76160be](76160be)) * **picker.lsp:** fixed `vim.str_byteindex` capability check. Closes [#2389](#2389) ([46917d0](46917d0)) * **picker.lsp:** some LSP servers notify completion before sending the actual result. See [#2372](#2372) ([aa8a318](aa8a318)) * **picker.lsp:** use `LspRequest` to track completed and cancelled requests. Fixes [#2364](#2364) ([8afb609](8afb609)) * **picker.preview:** again. docgen seems broken ([758bbfa](758bbfa)) * **picker.preview:** don't show locations for diff preview ([b064488](b064488)) * **picker.preview:** fckup ([fd7795e](fd7795e)) * **picker.preview:** fix ([e2c1c52](e2c1c52)) * **picker.preview:** show proper preview message for deleted scratch buffers ([4ad8a41](4ad8a41)) * **picker.util:** better relative time format ([3e30fb6](3e30fb6)) * **picker.util:** ignore errors from corrupted kv stores. Closes [#2394](#2394) ([b3d01c5](b3d01c5)) * **picker.watch:** check again for closed picker after schedule. See [#2365](#2365) ([8ad80de](8ad80de)) * **picker:** close picker when layout closes. Closes [#2365](#2365) ([779746f](779746f)) * **picker:** dont watch files for closed pickers. Fixes [#2365](#2365) ([c4ec8b6](c4ec8b6)) * **picker:** increase default show_delay to 5s. Closes [#2364](#2364) ([b3197e3](b3197e3)) * **picker:** only trim space in the title if it's preceded by a word like character (skips icons) ([2439c49](2439c49)) * **picker:** pause input progress info for 60ms to prevent flickering when finder is too fast ([ecde81f](ecde81f)) * **scratch:** make sure zindex of scratch window is higher than existing floating windows ([c8422da](c8422da)) * **scroll:** only reset count when needed ([551d79f](551d79f)) * **util.job:** scroll to top when process exits ([b544157](b544157)) * **util.job:** stop on BufWipeout and BufDelete ([c956b37](c956b37)) * **util.job:** stop when attached buffer is no longer valid ([221d4b1](221d4b1)) * **util.job:** use nvim_win_set_cursor instead of `gg` ([5faed2f](5faed2f)) * **util.lsp:** `Snacks.util.lsp.on()` should trigger for each lsp client per buffer ([52f30a1](52f30a1)) * **util:** color() should not create hl groups ([17033e6](17033e6)) * **win:** ignore errors on destroy. Closes [#2381](#2381) ([a8930bd](a8930bd)) * **win:** scratch buffers were sometimes not deleted ([0387297](0387297)) * **win:** when fixbuf triggers in a floating window, just close it. Closes [#2380](#2380) ([de35242](de35242)) ### Performance Improvements * **animate:** smoother animations ([b7a3fed](b7a3fed)) * **notifier:** stop trying to fit more notifs in the layout after skipping max 10 ([3a8ecf5](3a8ecf5)) * **picker.util:** cache badge hl groups ([cb85844](cb85844)) * **scroll:** combine all scrolling commands in one command + restore vim.v.count ([0fbea13](0fbea13)) * **scroll:** smoother scrolling using new animations ([2221fe6](2221fe6)) * **statuscolumn:** only calculate components that are actually needed ([bb80317](bb80317)) ### Reverts * jump `buffer` -> `buffer!`. See [#2378](#2378) ([143e9b5](143e9b5)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
chore(main): release 2.27.0 (#2351) 🤖 I have created a release *beep* *boop* --- ## [2.27.0](v2.26.0...v2.27.0) (2025-10-26) ### Features * **keymap:** added new `enabled` option ([b0f21fa](b0f21fa)) * **picker.proc:** finder to process json ([5294c4f](5294c4f)) * **util.job:** simple wrapper around jobstart to work with terminals (used in dashboards and pickers) ([de05631](de05631)) * **util.lsp:** added overload for `Snacks.util.lsp.on(cb)` ([f33aa20](f33aa20)) ### Bug Fixes * **dashboard:** don't add sleep in nushell. Closes [#1706](#1706) ([44f71d2](44f71d2)) * **explorer:** refresh git status on all tabs when needed. Closes [#2348](#2348) ([1472211](1472211)) * **explorer:** windows path fixes ([e1dc6b3](e1dc6b3)) --- 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>
chore(main): release 2.26.0 (#2335) 🤖 I have created a release *beep* *boop* --- ## [2.26.0](v2.25.0...v2.26.0) (2025-10-25) ### Features * **explorer:** add cross-platform trash support ([ed08ef1](ed08ef1)) * **keymap:** add filetype and LSP-aware keymap management ([0bf34af](0bf34af)) * **util:** add LSP utility module with dynamic capability handlers ([7a63ba5](7a63ba5)) * **win:** add `SnacksWinSeparator` to default `win.wo.winhighlight` ([#2340](#2340)) ([869709d](869709d)), closes [#2336](#2336) * **win:** add default *Snacks* prefixed `WinSeparator` ([#2338](#2338)) ([381265b](381265b)), closes [#2336](#2336) ### Bug Fixes * **dahboard:** do full terminal reset when receiving first output and displayed cached contents ([c952834](c952834)) * **dashboard:** don't write to closed terminal buffer ([f75eaf1](f75eaf1)) * **dashboard:** work-around for jobstart+pty issue where not all output is processed before exit. Closes [#1706](#1706) ([4d776bd](4d776bd)) * **explorer:** macos has `trash` pre-installed, so no need to try `osascript` and move to first. Closes [#2349](#2349) ([d569072](d569072)) * **image:** detach image when reloading image file. Closes [#2343](#2343) ([7bf4175](7bf4175)) * **image:** increase timeout for querying the terminal. Closes [#2344](#2344) ([4122143](4122143)) * **image:** let healthcheck wait till terminal detection is done ([b029511](b029511)) * **image:** only attach to a buffer once. Closes [#2343](#2343) ([6f72643](6f72643)) * **image:** work around tmux extended-keys breaking TermResponse. Closes [#2332](#2332) ([e93dcfd](e93dcfd)) * **layout:** provide parent win width/height when relative to win ([#2346](#2346)) ([602393a](602393a)) * **picker:** fix race condition causing "Finder yielded after done" error. Closes [#2327](#2327) ([c9ccbe5](c9ccbe5)) * **picker:** set min file width to 40 ([69417ac](69417ac)) * **win:** use `sbuffer` instead of `split` for split windows ([bbd6d42](bbd6d42)) ### Performance Improvements * **picker:** don't use treesitter string parser, since a change in nightly creates thousands of unlisted buffers in that case ([ad6c0a5](ad6c0a5)) * **picker:** re-use existing string parsers per language to prevent needing to create new parsers ([efa304a](efa304a)) --- 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>
chore(main): release 2.25.0 (#2329) 🤖 I have created a release *beep* *boop* --- ## [2.25.0](v2.24.0...v2.25.0) (2025-10-23) ### Features * **notifier:** added `gap` option. Closes [#2331](#2331) ([b1acbb0](b1acbb0)) * **select:** allow configuring options for specific vim.ui.select kinds ([bca5b05](bca5b05)) * **snacks:** added `Snacks.version`. auto updated by the release workflow ([a283beb](a283beb)) ### Bug Fixes * **dashboard:** fix issue with opening file at location due to splitkeep and restoring laststatus/showtabline ([1a2b34d](1a2b34d)) * **scroll:** stop animations when buf/changedtick changes ([a42b376](a42b376)) --- 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>
chore(main): release 2.24.0 (#2186) 🤖 I have created a release *beep* *boop* --- ## [2.24.0](v2.23.0...v2.24.0) (2025-10-23) ### Features * **bigfile:** disable mini-hipatterns ([#2170](#2170)) ([3d4dd13](3d4dd13)) * **dashboard:** optional `filter` for projects. Closes [#798](#798) ([fe88a07](fe88a07)) * **debug:** allow debug evaluation of block selections ([#1331](#1331)) ([231ffae](231ffae)) * **git:** allow configuring extra git args and git cmd args for all git sources. See [#2178](#2178) ([5782b5c](5782b5c)) * **image:** add icns support ([#2120](#2120)) ([9df47bc](9df47bc)) * **image:** added clear fun. Closes [#1394](#1394) ([30687d1](30687d1)) * **image:** added support for base64 encoded images in url. Closes [#2304](#2304) ([2c56e10](2c56e10)) * **image:** allow specifying a page number for inlined pdfs ([#1806](#1806)) ([3f0fe34](3f0fe34)) * **indent:** pass win to filter func. Closes [#2307](#2307) ([8116e0b](8116e0b)) * **input:** added support for a custom highlight functions. Closes [#2216](#2216) ([9b80137](9b80137)) * **layout:** height=0.7 for preview in vscode layout ([c3d6c01](c3d6c01)) * **layout:** static (non-flex) layouts now shrink the root box to fit the contents. See [#2035](#2035) ([ba7845b](ba7845b)) * **picker.finder:** added assertions that finder is still running when receiving results ([a45503b](a45503b)) * **picker.git_diff:** add `base` option to show diff against a merge base. Useful to see changes on a branch/PR ([7964f04](7964f04)) * **picker.git:** allow passing extra args to git log command for file renames ([#1964](#1964)) ([2aee35d](2aee35d)) * **picker.git:** use default previewer args in git_show ([#1736](#1736)) ([f324f96](f324f96)) * **picker.layout:** added `config` hook for resolved layouts. See [#2035](#2035) ([722f9ea](722f9ea)) * **picker.lsp_config:** added more info to lsp picker ([636be5c](636be5c)) * **picker.lsp:** added lsp_incoming_calls and lsp_outgoing_calls. Closes [#1843](#1843) ([55d6670](55d6670)) * **picker.lsp:** added option `keep_parents` to `lsp_symbols` (default `false`). See [#2083](#2083). closes [#2266](#2266) ([2b9d522](2b9d522)) * **picker.projects:** make max_depth customizable ([#2253](#2253)) ([3e9e2e2](3e9e2e2)) * **picker.scratch:** add scratch picker with grep, new and delete keybinds ([#1019](#1019)) ([ca0f8b2](ca0f8b2)) * **picker.select:** select now fits the list to the items independent of the layout. Closes [#2035](#2035) ([5c63614](5c63614)) * **picker:** add author field to git log ([#2295](#2295)) ([2cf864a](2cf864a)) * **picker:** add exact match position highlighting for grep results ([3b54c8d](3b54c8d)) * **picker:** add git_restore action for git_status picker ([2b22fe7](2b22fe7)) * **picker:** add toggle_regex for grep ([#1594](#1594)) ([bd6ee23](bd6ee23)) * **picker:** added `Snacks.picker.tags()` a picker for ctags. Closes [#1728](#1728) ([4290287](4290287)) * **picker:** added custom options to `vim.ui.select` that snacks can use for a better select ([264cab1](264cab1)) * **picker:** added live support to `git_log`, which uses `-S` (pickaxe) to search. Closes [#1544](#1544) ([c9fa6f7](c9fa6f7)) * **picker:** allow configuring pathspec for git grep ([#2311](#2311)) ([57fbda7](57fbda7)) * **picker:** also ignore dot bare git files ([#2058](#2058)) ([4bb0dae](4bb0dae)) * **picker:** enhanced resume with multi-state support and flexible API ([bc6c446](bc6c446)) * **picker:** flexible filename format ([#2294](#2294)) ([9ad5d53](9ad5d53)) * **picker:** mapped `<c-g>` to `print_cwd` in list. See [#2244](#2244) ([faa6aba](faa6aba)) * **picker:** Support rmagatti/autosession session manager ([#1825](#1825)) ([fc06234](fc06234)) * **picker:** updated Snacks.picker.lsp_config to work with `vim.lsp.config` ([292d46f](292d46f)) * **picker:** when resuming a source that has nothing to resume, start a picker with the source instead ([db3c13c](db3c13c)) * **terminal:** minor improvements for user experience ([#2276](#2276)) ([39b14c4](39b14c4)) * **toggle:** allow notification customization via function ([#2247](#2247)) ([3ccab97](3ccab97)) * **win:** added support for `vim.o.winborder`. Set win.border = true to use it ([b30523c](b30523c)) * **win:** all existing snacks windows for all plugins now honor `vim.o.winborder`. Defaults to `rounded` if not set. ([c1737d8](c1737d8)) * **win:** generalize footer options for keys ([#363](#363)) ([b8d1719](b8d1719)) * **win:** make split window "stacking" configurable ([e46a094](e46a094)) ### Bug Fixes * **bigfile:** bigfile doesn't work on windows. ([#1969](#1969)) ([b4944ff](b4944ff)), closes [#1722](https://github.com/folke/snacks.nvim/issues/1722) * **bufdelete:** try alternate buffer first and otherwise last used buffer ([914c900](914c900)) * **dashboard:** fix path filtering for `recent_files` with `cwd` option ([#2201](#2201)) ([057d4ab](057d4ab)) * **dashboard:** oldfiles filter should return a boolean instead of the result of find. Fixes [#2283](#2283) ([fcd309f](fcd309f)) * **dashboard:** pcall chansend for dashoard terminal widgets ([dc65ffd](dc65ffd)) * **dashboard:** recent cwd filter matching ([5c4365e](5c4365e)) * **dashboard:** recent_files section not displaying files without cwd parameter ([#2284](#2284)) ([1ed737e](1ed737e)) * **dashboard:** replace deprecated AutoSession command ([#2288](#2288)) ([e9228d6](e9228d6)) * **dashboard:** restore showtabline/laststatus when entering another non-float window. Closes [#1774](#1774) ([cc69a93](cc69a93)) * **dashboard:** set `border = "none"` on `terminal` sections ([#1643](#1643)) ([83f364f](83f364f)) * **dashboard:** update cursor on loading the dashboard. Closes [#2004](#2004) ([29682a0](29682a0)) * **dashboard:** use fqn for icon. Closes [#1496](#1496) ([24e92e0](24e92e0)) * **dim:** fixed the issue of dim's scope variable being nil and outputting… ([#1938](#1938)) ([943a3c7](943a3c7)) * **explorer.git:** don't propagate deletes to parent dirs that don't exist ([835c4cb](835c4cb)) * **explorer.watch:** handle systems where fs_event doesn't return file names. Closes [#2190](#2190). Closes [#2032](#2032) ([d6e34b1](d6e34b1)) * **explorer:** mounted directories being detected as non-directories in Tree:expand ([#2053](#2053)) ([7a5eb10](7a5eb10)) * **explorer:** reset main when entering another window. Closes [#1587](#1587) ([a5d45d5](a5d45d5)) * **git:** always check parents for git root to fix an issue with git submodules. Closes [#2143](#2143) ([14dd362](14dd362)) * **gitbrowse:** fixed urls for gitlab ([#2073](#2073)) ([9ebf052](9ebf052)) * **gitbrowse:** send commit as a opt when calling gitbrowse ([#2289](#2289)) ([a466429](a466429)) * **git:** set `diff.noprefix=false` for `git diff` to ensure correct format ([#2174](#2174)) ([93f43ca](93f43ca)) * **image.terminal:** do only terminal detection for now. Closes [#2323](#2323) ([6c7ddae](6c7ddae)) * **image:** correct off by one issue in render fallback ([#1560](#1560)) ([441bdcd](441bdcd)) * **image:** correct render fallback to handle "editor" relative position ([#2296](#2296)) ([c552cea](c552cea)) * **image:** correct render fallback to handle "editor" relative position ([#2297](#2297)) ([1c3f15c](1c3f15c)) * **image:** detect kitty image protocol through terminal capability request. Closes [#1695](#1695) ([43261ba](43261ba)) * **image:** do not save remote image if fetch fails ([#1915](#1915)) ([cb6bf05](cb6bf05)) * **image:** ENOENT on preview ([#2301](#2301)) ([5173e96](5173e96)) * **image:** hover close in insert mode ([#2215](#2215)) ([ef59af0](ef59af0)) * **image:** markdown inline link query for shortened urls ([#1481](#1481)) ([2daa1b2](2daa1b2)) * **image:** set winblend=0 for floatwin when use unicode placeholders ([#1615](#1615)) ([758e64c](758e64c)) * **image:** skip `\usepackage` in comments and body ([#2325](#2325)) ([90227af](90227af)) * **image:** work-around for sha256 not allowed to be a Blob ([92a08ce](92a08ce)) * **indent:** check that win is valid in step. Closes [#1943](#1943) ([e409f31](e409f31)) * **indent:** nil check before setting extmark ([#1635](#1635)) ([02bf7d2](02bf7d2)) * **input:** schedule stopinsert. Fixes [#1841](#1841) ([ad6cbc8](ad6cbc8)) * **input:** zindex ([67d690d](67d690d)) * **input:** zindex. Closes [#2302](#2302) ([d491236](d491236)) * **layout:** allocate at least 1 cell for a widget and enlarge/shrink the root box when needed. Closes [#2261](#2261) ([71d6d3c](71d6d3c)) * **layout:** allow width/height to be a function. Closes [#2184](#2184) ([c757d4d](c757d4d)) * **lazygit:** allow extensible user args ([#789](#789)) ([da655a3](da655a3)) * **lazygit:** check if default config file exists before adding to LG_CONFIG_FILE ([#2256](#2256)) ([3731644](3731644)) * **main:** get correct winid for prev window ([db399b1](db399b1)) * **notifier:** include icon in padding in minimal style ([#2239](#2239)) ([6daef52](6daef52)) * **notifier:** keep filtered notifications in history ([#2209](#2209)) ([ac61546](ac61546)) * **picker.actions:** `<c-g>` in list view now prints file path instead of cwd. Fallback to cwd ([0b0a58a](0b0a58a)) * **picker.actions:** ensure the current window is updated after tabdrop ([#2326](#2326)) ([b30121b](b30121b)) * **picker.actions:** multi-action descriptions. Fixes [#1501](#1501) ([4edf207](4edf207)) * **picker.actions:** take into account if source is `recent` explicitly ([#1920](#1920)) ([b9bd8ae](b9bd8ae)) * **picker.core:** respect camelCase for scoring when ignorecase is true ([#1601](#1601)) ([a32735b](a32735b)) * **picker.format:** added min_width for truncated paths ([b7f8116](b7f8116)) * **picker.format:** apply hidden file hl group last. Fixes [#2127](#2127) ([0bf8fe4](0bf8fe4)) * **picker.format:** correcter max_width for truncpath ([a5d2964](a5d2964)) * **picker.format:** simplified resolvable formatters and more correct ([d5b6d30](d5b6d30)) * **picker.git_diff:** use absolute path when adding buffer to avoid duplicates ([#1819](#1819)) ([a012f39](a012f39)) * **picker.git:** add `ignorecase` for `git_grep` ([#1629](#1629)) ([7502e77](7502e77)) * **picker.git:** use unmerged icon for unmerged. Fixes [#1531](#1531) ([abee3c9](abee3c9)) * **picker.grep:** better line/col parsing. Closes [#2126](#2126). Fixes [#2123](#2123) ([1fee799](1fee799)) * **picker.grep:** faulty rg cmd. Closes [#2280](#2280) ([65a5c8b](65a5c8b)) * **picker.list:** resize when needed. Closes [#2290](#2290) ([df018ed](df018ed)) * **picker.lsp_config:** cmd can be a function ([ba745ba](ba745ba)) * **picker.lsp:** don't process lsp request results when aborted. Closes [#2327](#2327) ([4e10708](4e10708)) * **picker.lsp:** move get_clients inside vim.schedule to prevent issues on Neovim 0.11. Closes [#2320](#2320) ([79f3a8d](79f3a8d)) * **picker.lsp:** trigger docs workflow ([6f1158f](6f1158f)) * **picker.man:** make tab/split/vsplit work. Closes [#2171](#2171) ([f39d114](f39d114)) * **picker.marks:** fix buffer checking ([#2287](#2287)) ([ca0858a](ca0858a)) * **picker.preview:** better hack to deal with buffer local option weirdness ([c968d4d](c968d4d)) * **picker.preview:** directory preview should use cwd. Closes [#2212](#2212). Fixes [#2093](https://github.com/folke/snacks.nvim/issues/2093) ([d050712](d050712)) * **picker.preview:** don't record previeww searches in history and prevent scrolling from the top. Closes [#2305](#2305) ([080320b](080320b)) * **picker.preview:** dont do win-local hack for floating windows ([12b2f0d](12b2f0d)) * **picker.qflist:** error with qflist picker when the list contains invalid items ([#2293](#2293)) ([6af1e76](6af1e76)) * **picker.recent:** include closed / unlisted buffers in recent. Closes [#1745](#1745) ([5959631](5959631)) * **picker:** add type field to qflist item ([#1538](#1538)) ([#1539](#1539)) ([125978b](125978b)) * **picker:** added show_delay to config max ms to wait to show if no results found yet. Closes [#2206](#2206) ([64583a0](64583a0)) * **picker:** allow some sources to use the current window as main. Closes [#2012](#2012). See [#1941](#1941) ([5cda953](5cda953)) * **picker:** correct z-index for preview="main" layout ([e796aef](e796aef)) * **picker:** do not record consecutive duplicate history ([#2040](#2040)) ([d0a5310](d0a5310)) * **picker:** fixup for pickers that dont display files ([1b4205e](1b4205e)) * **picker:** load correct actions in list of action names. Closes [#1501](#1501) ([b064be2](b064be2)) * **picker:** lsp_config now includes any configfured LSP and excludes deprecated servers ([a0d6eba](a0d6eba)) * **picker:** prevent WinEnter handling during startup ([756a791](756a791)) * **picker:** show_delay config value ([67bb3a7](67bb3a7)) * **picker:** show_delay is in ms. Also increase it to allow auto_confirm to work properly ([924a930](924a930)) * **picker:** use nvim_paste instead of nvim_put. Closes [#1941](#1941) ([021e04f](021e04f)) * **projects:** normalize item.text for correct Windows support ([#2275](#2275)) ([457596b](457596b)) * **rename:** made rename more robust and make sure target directory exists. Closes [#2252](#2252) ([c494447](c494447)) * **scope:** allow user to disable keys ([#1918](#1918)) ([bebf0bd](bebf0bd)) * **scratch:** branch fallback for detached head ([#1519](#1519)) ([98345c7](98345c7)) * **scratch:** hide buffer after formatting when close ([#1523](#1523)) ([4379085](4379085)) * **scratch:** use icon[1] when icon is a table to avoid table.concat error ([#2242](#2242)) ([ba90011](ba90011)) * **scroll:** don't animate 1 line scrolls (jk). Closes [#1620](#1620) ([d293b21](d293b21)) * **scroll:** stop anim and reset state when win has new buf, or buf was changed. Closes [#1820](#1820). Closes [#2221](#2221) ([766f7b8](766f7b8)) * **statuscolumn:** show open folds in consecutive levels ([#1534](#1534)) ([7bcd3ba](7bcd3ba)) * **terminal:** check win valid before creating a new terminal ([#1927](#1927)) ([ba7bbcd](ba7bbcd)) * **terminal:** make sure terminals opend with `open()` can be found with `list()`. Closes [#2172](#2172). Closes [#2173](#2173) ([13f3006](13f3006)) * **terminal:** set buffer when opening terminal with position='current' ([#2162](#2162)) ([2aacf55](2aacf55)), closes [#2148](#2148) * **terminal:** stack only terminal splits by default. Closes [#2137](#2137) ([8c50196](8c50196)) * **util:** fix invalid window error ([#1996](#1996)) ([32e5bf1](32e5bf1)) * **util:** only use mini.icons if it has been setup. Closes [#2199](#2199) ([774bf9d](774bf9d)) * **win:** check parent win is valid before getting size ([#2315](#2315)) ([471eb03](471eb03)) * **zen:** make zoom and minimizing work in terminal mode ([#1912](#1912)) ([fb54927](fb54927)) ### Performance Improvements * **dashboard:** add basic OSC11 and CSI6n support to terminal sections (gh 10 seconds faster) ([fb016d2](fb016d2)) * **git:** invoke `git status` with `--no-optional-locks` ([#2175](#2175)) ([e441c64](e441c64)) * **grep:** move match parsing to resolve and fix an issue with `.*` results. Closes [#2308](#2308) ([1417701](1417701)) * **picker:** set `limit_live=10000` by default. Makes no sense to load millions of matches when doing live searches. ([04990d0](04990d0)) --- 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>
chore(main): release 2.23.0 (#1434) 🤖 I have created a release *beep* *boop* --- ## [2.23.0](v2.22.0...v2.23.0) (2025-09-15) ### Features * **image.doc:** enable inline math rendering for neorg files. Closes [#1438](#1438) ([ec487f5](ec487f5)) * **image.inline:** honor `concealcursor` and hide conceal when selecting lines. Closes [#1478](#1478) ([bc0630e](bc0630e)) * **image:** proper inline rendering of math expressions. Closes [#1318](#1318). Closes [#1454](#1454) ([6ea4fa7](6ea4fa7)) * **picker.git:** added `all` option to also list remote branched for `git_branches`. Closes [#1465](#1465) ([3d695ab](3d695ab)) * **scope:** allow disabling scopes with `vim.g.snacks_scope = false` or `vim.b.snacks_scope = false`. Closes [#1463](#1463) ([5315e26](5315e26)) * **util:** small ts parse wrapper that parses async when available ([9f0aa20](9f0aa20)) ### Bug Fixes * **dashboard:** escape filenames for edit. Closes [#1453](#1453) ([8b0e79a](8b0e79a)) * **explorer:** confirm prompt now defaults to `No` ([f970cbb](f970cbb)) * **image.inline:** remove debug ([d9bb639](d9bb639)) * **image.latex:** don't nest image nodes ([714d761](714d761)) * **image.queries:** add image type ([1bbd479](1bbd479)) * **image:** only show anchor icon for inline images shown on the lines below. Closes [#1479](#1479) ([bc2ed15](bc2ed15)) * **indent:** zero indent for blank lines. Closes [#1477](#1477) ([cddf714](cddf714)) * **input:** add cr keybind for normal mode. Closes [#1468](#1468). Closes [#1466](#1466) ([78f0ad6](78f0ad6)) * **lsp:** fix deprecated warnings related to lsp client ([07fefd2](07fefd2)) * **picker.preview:** always use builtin for git log preview ([f0d3433](f0d3433)) * **statuscolumn:** better way of determining open folds. Closes [#1445](#1445) ([1239fb8](1239fb8)) * **util.spawn:** correctly mark as faild on abort ([6917597](6917597)) * **win:** make sure the border is set when setting the title ([76311ab](76311ab)) ### Performance Improvements * **image:** async treesitter parsing for images ([e55ae37](e55ae37)) ### Reverts * dont always set border when setting title. Closes [#1436](#1436) ([fa29c6c](fa29c6c)) --- 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>
PreviousNext