Skip to content

v2.28.0

Latest

Choose a tag to compare

@github-actions github-actions released this 01 Nov 12:44
eadb0ca

2.28.0 (2025-11-01)

Features

  • gh: new gh (GitHub cli) integration (85b8ec2)
  • image: when opts.conceal, conceal remainig lines that are not covered by the image. See #2391 (404027c)
  • picker.buffers: add filetype/buftype to search text (a249c86)
  • picker.buffers: added buftype and filetype for scratch buffers (6a13271)
  • picker.diff: moved git_diff finder to separate file so it can be re-used + made it more robust. Closes #2366 (3049ad8)
  • picker.diff: native diff now also highlights the language of the diffed code in the diff (7260957)
  • picker.git_diff: git_diff now also shows staged hunks and added stage/unstage/restore actions for hunks. Closes #2382 (1fb3f4d)
  • picker.git_diff: added staged flag (118648c)
  • picker.highlights: badges (202e595)
  • picker.preview: allow items to define a title used in the preview window (4b572f4)
  • picker.preview: support for images and render markdown (9585da6)
  • picker.util: cmdline parser used to properly parse diff args (5025989)
  • picker: better integration with markview and render-markdown when previewing (4708e9a)
  • scratch: store scratch info in meta files, instead of the filename + custom filekeys (85f8e22)
  • util.spawn: Proc:json() (5589c9d)
  • util: Snacks.util.stop() to safely stop/close a luv handle (ce9e299)

Bug Fixes

  • explorer.tree: only strip trasiling forward slashes if not at root. Closes #2375 (72dc621)
  • explorer: differentiate if file or folder when deleting on Windows (#2373) (59c5545)
  • explorer: do reveal in on_show if explorer is not open yet. Closes #2388 (ba529d4)
  • explorer: schedule on_find (typically reveal), for both files finder and when git status updates the finder. Closes #2388 (a9b57b2)
  • gh: add action idx to gh_actions text (d94184d)
  • image.inline: off-by-one for finding visible images at the last line of the buffer (04b3a54)
  • image: avoid nested math environments (#2345) (66e3dc4)
  • image: check for invalid buffer (9ad4178)
  • image: check to update on BufWinEnter and attach to buffer changes (e18e4f6)
  • image: don't add placements to concealed lines. Closes #2391 (13963b1)
  • image: guard against invalid buffers. Closes #2383 (4bb1ce1)
  • keymap docs (583a0c1)
  • keymap: make sure opts are a table. Closes #2392 (367d1bd)
  • layout: only max zindex for snacks windows/layouts (8eddc0b)
  • picker.actions: drop and tabdrop should never reload existing buffers (#2368) (6cf2fee)
  • picker.actions: use buffer! instead of buffer for edit. Closes #2378 (2a1a001)
  • picker.diff: better filename parsing. See #2366 (377f3bf)
  • picker.diff: first line of header (fb011c2)
  • picker.diff: only process --- diffs directly if it doesn't start with a diff header (0a33aec)
  • picker.filter: get cwd from active tabpage if available (c1b517f)
  • picker.finder: mutate existing opts (c91e230)
  • picker.finder: tmp fix for #2386 (5eea5f9)
  • picker.git_branches: git log preview. Closes #2360 (597ebd4)
  • picker.git_diff: remove --default-prefix, since that's no longer needed. See #2382 (40774ae)
  • picker.git_diff: set group=false by default, since we also have git_status (530e591)
  • picker.highlights: modifiable for set_lines (98345fb)
  • picker.keymaps: try to locate neovim compiled lua source files for keymaps (76160be)
  • picker.lsp: fixed vim.str_byteindex capability check. Closes #2389 (46917d0)
  • picker.lsp: some LSP servers notify completion before sending the actual result. See #2372 (aa8a318)
  • picker.lsp: use LspRequest to track completed and cancelled requests. Fixes #2364 (8afb609)
  • picker.preview: again. docgen seems broken (758bbfa)
  • picker.preview: don't show locations for diff preview (b064488)
  • picker.preview: fckup (fd7795e)
  • picker.preview: fix (e2c1c52)
  • picker.preview: show proper preview message for deleted scratch buffers (4ad8a41)
  • picker.util: better relative time format (3e30fb6)
  • picker.util: ignore errors from corrupted kv stores. Closes #2394 (b3d01c5)
  • picker.watch: check again for closed picker after schedule. See #2365 (8ad80de)
  • picker: close picker when layout closes. Closes #2365 (779746f)
  • picker: dont watch files for closed pickers. Fixes #2365 (c4ec8b6)
  • picker: increase default show_delay to 5s. Closes #2364 (b3197e3)
  • picker: only trim space in the title if it's preceded by a word like character (skips icons) (2439c49)
  • picker: pause input progress info for 60ms to prevent flickering when finder is too fast (ecde81f)
  • scratch: make sure zindex of scratch window is higher than existing floating windows (c8422da)
  • scroll: only reset count when needed (551d79f)
  • util.job: scroll to top when process exits (b544157)
  • util.job: stop on BufWipeout and BufDelete (c956b37)
  • util.job: stop when attached buffer is no longer valid (221d4b1)
  • util.job: use nvim_win_set_cursor instead of gg (5faed2f)
  • util.lsp: Snacks.util.lsp.on() should trigger for each lsp client per buffer (52f30a1)
  • util: color() should not create hl groups (17033e6)
  • win: ignore errors on destroy. Closes #2381 (a8930bd)
  • win: scratch buffers were sometimes not deleted (0387297)
  • win: when fixbuf triggers in a floating window, just close it. Closes #2380 (de35242)

Performance Improvements

  • animate: smoother animations (b7a3fed)
  • notifier: stop trying to fit more notifs in the layout after skipping max 10 (3a8ecf5)
  • picker.util: cache badge hl groups (cb85844)
  • scroll: combine all scrolling commands in one command + restore vim.v.count (0fbea13)
  • scroll: smoother scrolling using new animations (2221fe6)
  • statuscolumn: only calculate components that are actually needed (bb80317)

Reverts