Skip to content

feat(json): sort_keys option to vim.json.encode()#35574

Merged
justinmk merged 1 commit into
neovim:masterfrom
arkriny:feat/json-sort-keys
Sep 14, 2025
Merged

feat(json): sort_keys option to vim.json.encode()#35574
justinmk merged 1 commit into
neovim:masterfrom
arkriny:feat/json-sort-keys

Conversation

@arkriny

@arkriny arkriny commented Aug 31, 2025

Copy link
Copy Markdown
Contributor

Problem

There is no way to ensure a stable key order when encoding a JSON string, which can be useful for comparisons and producing cleaner diffs.

Solution

Introduce a sort_keys option for vim.json.encode(),which is disabled by default. When enabled, object keys are sorted in alphabetical order.

Adapts PR to upstream: openresty/lua-cjson#115.

Uses the most performant approach to sort keys I could find. A small benchmark with comparisons is available here: https://github.com/skewb1k/lua-c-sort-keys-benchmark

Updates #34776 I guess? @echasnovski

@arkriny arkriny force-pushed the feat/json-sort-keys branch from 78ae531 to 70e61ec Compare August 31, 2025 19:44
Comment thread src/cjson/strbuf.h
Problem: There is no way to ensure a stable key order when encoding a JSON string,
which can be useful for comparisons and producing cleaner diffs.

Solution: Introduce a `sort_keys` option for `vim.json.encode()`,which
is disabled by default. When enabled, object keys are sorted in
alphabetical order.

Adapts PR to upstream: openresty/lua-cjson#115.
@arkriny arkriny force-pushed the feat/json-sort-keys branch from 70e61ec to bdcbc3b Compare September 9, 2025 08:42
@justinmk

Copy link
Copy Markdown
Member

which can be useful for comparisons and producing cleaner diffs.

also for "stable" representation: https://github.com/ljharb/json-stable-stringify

@arkriny

arkriny commented Sep 12, 2025

Copy link
Copy Markdown
Contributor Author

@justinmk that's partly what I meant by "comparisons". Should I update the commit message?

@justinmk justinmk merged commit a897cc1 into neovim:master Sep 14, 2025
33 checks passed
@arkriny arkriny deleted the feat/json-sort-keys branch September 24, 2025 23:02
dundargoc pushed a commit to dundargoc/neovim that referenced this pull request Sep 27, 2025
Problem: There is no way to ensure a stable key order when encoding a JSON string,
which can be useful for comparisons and producing cleaner diffs.

Solution: Introduce a `sort_keys` option for `vim.json.encode()`,which
is disabled by default. When enabled, object keys are sorted in
alphabetical order.
justinmk added a commit to justinmk/neovim that referenced this pull request Mar 29, 2026
Following is a list of commits (fixes/features only) in this release.
See `:help news` in Nvim for release notes.

BREAKING
--------------------------------------------------------------------------------
- 9acb52c8f386 diagnostic: remove deprecated diagnostic APIs (#33072)
- 79bfeecdb483 editor: insert-mode ctrl-r should work like paste #35477
- f72c13341afb lsp: pass entire entry to format function (#34166)
- fe23168e2bc1 lsp: reimplement `textDocument/codeLens` as decoration provider
- caa941935545 optwin.lua #36505
- c123b7245c43 path: support RFC3986 in path_with_url() #36564
- a57c7238f9c3 plugins: remove shellmenu #35815
- ade58885c478 provider: drop Python 3.7, 3.8 support #33088
- 59eadebe335f runtime: move "tohtml" to pack/dist/opt/ #34557
- 1d5b3b5b4c86 treesitter: apply `offset!` directive to all captures #34383
- fd1e019e90e7 treesitter: get_parser return nil on error #37276
- a728eb7af162 treesitter: remove "all" option of Query:iter_matches #33070
- 4369d7d9a780 ui: decouple ext_messages from message grid #27963

FEATURES
--------------------------------------------------------------------------------
- 78f4994627b7 ":restart +cmd [cmd]" #34788 #35045 #35223
- b40ca5a01c39 channel: support :detach, :restart on Windows #37977
- ce2742313207 ":wall ++p" creates parent dirs for each buf #36121
- f3c2eb49bab3 vim.Pos, vim.Range #36397
- 9044d64af94d has('terminfo')
- 70d797943956 render tuple types for API methods
- 5151f635ca29 serverlist({peer=true}) returns peer addresses #34806
- 7ba043f0f31c api: add "max_height" argument to nvim_win_text_height (#32835)
- e80d19142bdb api: add nvim_open_tabpage
- 6ebeb07c5614 api: experimental nvim__exec_lua_fast #35758
- 1e7406fa38ee api: nvim_cmd supports plus ("+cmd", "++opt") flags #30103
- 8b171852a925 api: nvim_echo can emit Progress messages/events #34846
- 612b2e785087 api: nvim_get_commands returns function fields #36415
- 4d04d0123d25 api: nvim_set_hl{update:boolean} #37546
- 4998b8d7b5f9 api: nvim_win_set_config accepts unchanged "noautocmd" #36463
- e2a0748cb28f api: nvim_win_set_config can move floatwin to another tabpage
- 094b297a3b33 api: nvim_win_set_config can move split to other tp as floatwin
- 88774965e5c0 api: relax contract, allow return-type void => non-void #34811
- 85d33514f999 api: set nvim_echo() kind for ext_messages (#33998)
- cf0f90fe14f5 async: add `vim._async`
- e1ffa8d33b5e build: HAVE_UNIBILIUM
- 1f004970f00b build: build.zig MVP: build and run functionaltests on linux
- dc6cf3add95a build: build.zig windows support
- e25b99c5b63c build: make build.zig run unittests
- c4501e98f2c3 build: make build.zig use luajit on main plattforms
- 8e0692cdc501 build: support full runtime distribution work
- 6d9031390cfc build.zig: add option to use system dependencies
- 5ec0c1ca07f9 build.zig: install parsers in install step
- 75fe54050081 checkhealth: emoji for OK/WARN/ERROR #33172
- 63323a9c81a8 checkhealth: trigger FileType event after showing report #33677
- 9722bd7b1b47 clipboard: g:clipboard="foo" forces the "foo" clipboard tool #33235
- 3a35fdc3471e clipboard: wayclip primary clipboard and correct mimetype (#33990)
- 6228acb74f94 cmdline: completion for :TOhtml #37045
- 3bdebfb87f11 defaults: don't enable treesitter query linter
- 41cac54325e9 defaults: exclude temp dirs from 'shada' oldfiles #37631
- 5d06eade2599 defaults: map "grt" to LSP type_definition #34642
- 06befe1e348b defaults: map "grx" to vim.lsp.codelens.run() #37689
- 249f305bbcdd defaults: per-platform 'guifont' default #37175
- d77d961b350d defaults: shelltemp=false #33012
- b10cb0296ae2 defaults: store spellfile in stdpath('data') #33048
- 4fae013a21a9 diagnostic: add `enabled` filter (#33981)
- 2f24ae8de471 diagnostic: add `format` option to `setloclist`/`setqflist` (#33977)
- c65817774d66 diagnostic: add `on_jump` callback option
- 7e09fedf43fa diagnostic: config.status  #36693
- caf780859197 diagnostic: custom status format function #36696
- 01666aae64d1 diagnostic: fromqflist({merge_lines}) #37416
- 410744210386 diagnostic: highlights in diagnostic.status() #36685
- 68e316e3f910 diagnostic: jump to related info location from `open_float` #34837
- 2767eac320ef diagnostics: stack DiagnosticUnnecessary,DiagnosticDeprecated highlights #36590
- a5b8cf145d1f diff: merge adjacent blocks using inline:word (#37085)
- 45b4bbac281b difftool: replace old "nvim -d" automatically #38057
- d5cfca5b768c docs: numbered listitems
- 4dabeff30822 editor: 'autowriteall' on SIGHUP/SIGQUIT #32843
- 55a0843b7cf7 editor: :source can run Lua codeblock / ts injection #36799
- f5829957f25c env: remove VIM_VERSION_NODOT macro #34890
- 551bb63d449f events: MarkSet event, aucmd_defer() #35793
- 23bf4c0531ac exrc: search in parent directories (#33889)
- 8d397fa458a9 exrc: stop searching in parent directories by unsetting 'exrc'
- dc67ba948eec exrc: user must view and explicitly run ":trust" #35069
- bffca6e26bf3 extmark: support end_col=-1 if strict=false #28169
- 302e59f734ec extui: assign 'filetype' to extui windows (#33924)
- f2988e05db45 extui: don't enter pager for routed message #34679
- 8defe1afb2d1 extui: route to "more" window if it is open (#34190)
- 3c9484b550eb extui: show dismissed message in cmdline (#34745)
- 94677318655e extui: support paging in the dialog window (#35310)
- 7526fb449de3 extui: use winborder for msg window #34859
- 8a626e5c4a52 float: 'statusline' in floating windows #36521
- 216cc893bf1b float: 'winborder' "bold" style #33189
- dcbe5bdd9674 ftplugin: treesitter default highlighting for markdown
- c1fa3c7c377b gen_help_html: generate helptags.json, helptag.html #35442
- 322a6d305d08 glob: new Glob implementation based on Peglob #33605
- 8c63d84be157 health: check `vim.ui.open()` tool #37569
- 13ed22505410 health: create a bug report #31842
- 043f5a291a7c health: show available queries for `treesitter` (#37005)
- 5a94edad70f9 health: summary in section heading #33388
- 47b0a718c3d9 help: gx opens help tag in web browser #35778
- 16f7440cc7b5 help: super K (":help!") guesses tag at cursor #36205
- cb8c9186e6ff highlight: support more SGR attributes #37901
- 0aabe7ae7680 inspect: update to a8ca312
- 8a0cbf04d6a6 iter: peek(), skip(predicate) for non-list iterators #37604
- 448f15ca396a json: pretty-format (indent) with vim.json.encode() #35424
- a897cc17a5ee json: vim.json.encode() sort_keys #35574
- abfe6c9ef7f4 logging: rename ".nvimlog" => "nvim.log" #37935
- 4eed85f9bd0e logs: show full paths in lsp logs (#33886)
- 7486c2f6aa6d lsp: <Plug> mapping for signature help cycling #34039
- 903335a6d50b lsp: `Client:stop()` defaults to `exit_timeout` #36783
- 6577d72d819d lsp: `root_markers` can control priority #33485
- d6a6eed4f3bc lsp: attach to buftype=help buffers #38412
- 63abb1a88f2c lsp: builtin :lsp command
- 7c9b865bdd1a lsp: deprecate `vim.lsp.stop_client` (#36459)
- b877aa34cf36 lsp: detach LSP clients when 'filetype' changes #33707
- 371aa1c5663c lsp: diagnostic related documents support
- 15ff45444325 lsp: display codelens as virtual lines, not virtual text #36469
- 63594ffa04cc lsp: do completionItem/resolve if completeopt=popup #32820
- c5c6ddba91b4 lsp: document method types (#35934)
- d08b26511154 lsp: enable document_color by default #35086
- 66339e06412d lsp: generate method to client capability map
- acfb9bc614ed lsp: graduate ClientConfig `exit_timeout` #36750
- 957093da0da9 lsp: handle deprecated document symbols (#34751)
- 492ea28612b2 lsp: handle disabled code actions (#34453)
- 8876413e2dcc lsp: highlighting the symbol being renamed (#37390)
- d26db4bfbfd6 lsp: improve signature help display #35190
- f99e3a8a2a3f lsp: incremental selection via "textDocument/selectionRange" #34011
- e82aef2e22a5 lsp: incremental-selection operator-pending mode #36575
- a4b2192690d7 lsp: lsp.enable() auto-escalates forced shutdown  #36458
- 4430c9a42477 lsp: migrate `document_color` to capability framework (#38344)
- e855a23c02a7 lsp: on_accept can return item to customize behavior #37092
- 729e0acd269f lsp: pass client ID in code action filter (#36046)
- 32f30c4874a0 lsp: pass resolved config to cmd() #34550
- 8ed68fda5014 lsp: semantic token range improvements #37451
- 23ddb2028bce lsp: semanticTokens/range #36705
- 3e8a4e10920d lsp: show color preview in completion items #32138
- 145548a24ae6 lsp: show snippet preview if completeopt=popup #32553
- 654303079baa lsp: skip invalid header lines #36402
- 4bc7bac88425 lsp: start/stop LSPs as necessary during vim.lsp.enable() #33702
- d75ffa59344b lsp: static registration support (#34371)
- cc518cf9bab0 lsp: support CompletionItem.labelDetails #38403
- 8f5bd569c541 lsp: support `documentColor` dynamic registration #33800
- 4745270bf124 lsp: support `textDocument/colorPresentation` (#34823)
- 9ff12396347b lsp: support `textDocument/documentColor`
- 05bd4398c507 lsp: support `textDocument/documentLink` (#37644)
- 0e70aa0e8687 lsp: support `textDocument/inlineCompletion`
- 77e3efecee4e lsp: support `textDocument/onTypeFormatting` (#34637)
- 03d6cf7aae4a lsp: support `version` in `textDocument/publishDiagnostics` #36754
- 965468fca1e7 lsp: support `workspace/codeLens/refresh`
- 835f11595fb0 lsp: support annotated text edits (#34508)
- 02cd56489650 lsp: support auto-force escalation in client stop (#36378)
- 02067a989207 lsp: support diagnostic refresh request
- 2031287e9329 lsp: support diagnostic related information (#34474)
- 0f3e3c87b738 lsp: support dynamic registration for diagnostics (#36841)
- c5167ffc185a lsp: support linked editing ranges #34388
- 76d213efbee8 lsp: support multiline semantic tokens #34458
- 9278f792c374 lsp: support range + full semantic token requests #37611
- 016335a7d09f lsp: support refreshing workspace diagnostics
- 7cc07e838332 lsp: support signature help noActiveParameterSupport #34838
- d7e0d46ffa8f lsp: use stricter types for methods
- c22b03c77166 lsp: user-specified sorting of lsp.completion multi-server results #36401
- e406c4efd620 lsp: vim.lsp.get_configs() #37237
- 6888f65be177 lsp: vim.lsp.inline_completion on_accept #35507
- 03d378fda68f lsp: vim.lsp.is_enabled() #33703
- 054eaf8493cb lsp: warn about unknown filetype #36910
- cb4559bc3204 lsp: workspace diagnostic support (#34262)
- 90d15227c55c lsp: workspace_required #31824
- a8edf6e4459d lsp.util: deprecate vim.lsp.util.stylize_markdown
- 98f8224c1948 lua: `vim.pos`/`vim.range`
- 0c46ea7d38dc lua: add `Iter:unique()` (#37592)
- cf9b36f3d97b lua: add vim.list.unique()
- 7499c9f9a754 lua: conversion between cursor positions
- 62b45b8fe4ce lua: conversion between extmark positions
- 9f5b309d824a lua: conversion between vim and lsp position/range
- 047a10bfde53 lua: function `behavior` for tbl_extend, tbl_deep_extend #33819
- 4d3a67cd6201 lua: replace `buffer` with `buf` in vim.keymap.set/del #38360
- 6e1745e96e3d lua: support vim.Range:has(vim.pos) #37879
- 7ed8cbd09580 lua: vim.list.bisect() #35108
- d8a88256794f lua: vim.wait() returns callback results #35588
- f68a5c40f01d messages: add "prev_cmd" argument to msg_history_show (#34779)
- fc2dee17368d messages: cleanup Lua error messages
- 0d13945bbb0e messages: drop hardcoded 'showmode' delay #38029
- 0741d2520dd7 messages: hl-StderrMsg, hl-StdoutMsg #33429
- 0ee5a4d48155 meta: vendor luv meta files
- 7cd5356a6f89 net: vim.net.request(), :edit [url] #34140
- f29b3b5d458b net: vim.net.request(outbuf) writes response to buffer #36164
- fb0dc825e9bb option: custom chars in 'winborder' #33772
- 28e31f5d3d16 options: default statusline expression #33036
- 5973328edaed options: per-buffer 'busy' status #34493
- 0412527a4078 outline: smaller indentation #34005
- 2728b4efe030 pack: add `[[` and `]]` mappings in confirmation buffer
- a9db6ec6fa12 pack: add `active` field to `PackChanged` event data
- d21b8c949ad7 pack: add built-in plugin manager `vim.pack`
- 4a637107d071 pack: add checkhealth
- 98e3a571ddf4 pack: add code actions in confirmation buffer
- d7db552394ea pack: add initial lockfile tracking
- 8c28507fcf6f pack: allow choosing update target in `update()`
- dd828690c747 pack: allow function `opts.load` in `add()`
- c9965491d01f pack: allow running `update()` without Internet connection
- acff86601efd pack: allow skip install confirmation in `add()`
- a41703d107da pack: confirm "Always" to install all plugins #35733
- c339b83a4ab9 pack: hint in confirmation buffer that plugin is not active
- dc8235c48c8b pack: prefer using revision from lockfile during install
- c522cb0e96da pack: support user-defined `data` in plugin spec #35360
- 2e533e364e2d pack: update `add()` to handle source change for installed plugin
- 069be911064d pack: use `nvim_echo{kind=progress}` to report progress #35625
- a20396153505 pack: use colored `nvim_echo` chunks to show progress report
- 7853cde29a08 pack: vim.pack.get() gets VCS info #35631
- fec02ae8e411 plugins: nvim.difftool can compare directories #35448
- 8a12a0146665 progress: better default format + history sync #35533
- 7b7e8cc72458 progress: disable cmdline progress msg via messagesopt' #36730
- 4b643d7068e8 progress: set Progress-event pattern to "source" #38495
- 24684f90eac2 progress: status api, 'statusline' integration #35428
- 286371b4d22a prompt: multiline prompt input #33371
- 8ab511bba524 prompt: plugins can update prompt during user input #37743
- a940b77cb25a prompt: prompt_appendbuf() appends to prompt buffer #37763
- 5ae41ddde350 prompt: prompt_getinput() gets current input #34491
- 5f8d4a248a97 provider: detect venv python via "pynvim-python" tool #35273
- f01419f3d563 runtime: accept predicates in take and skip (#34657)
- 8c81ed86786a runtime: revert cfilter, ccomplete to legacy Vim
- 9e1d3f487070 runtime: undotree #35627
- c9d846802030 search: increase `MAX_COUNT` to 999
- 6ba32713ada1 secure: allow 'path' parameter for trust action 'allow' (#38001)
- 71455173b482 shada: don't store jumplist if '0 in 'shada'
- 840cdb958969 shada: shada should not store nobuflisted buffers #21818
- 701258921ed1 snippet: highlight active tabstop (#35378)
- 4e1644d4d3cb spell: opt-out of confirm when downloading spellfiles #36836
- 1d40f677760d ssh: SSH configuration parser #35027
- cf874cee330d startup: provide v:argf for file arguments #35889
- 32aee065a898 startup: warn if NVIM_LOG_FILE is inaccessible #38070
- 4719b944437b statusline: option to specify stacking highlight groups #37153
- b79ff967ac91 statusline: vim.diagnostic.status() #33723
- 72a63346d866 stdlib: vim.fs.ext() returns file extension #36997
- 6b4ec2264e1d stdlib: vim.json.decode() can allow comments #37795
- eac2f0443e03 tag: respect jumpoptions=view when popping tagstack (#37021)
- a94568644489 term: increase max scrollback to 1000000
- 6bc0b8ae870c terminal: detect suspended PTY process (#37845)
- 03377b955233 terminal: include sequence terminator in TermRequest event (#37152)
- 71f3a9c5900f terminal: parse current buffer contents in nvim_open_term() (#33720)
- 2368a9edbd6c terminal: support SGR dim, overline attributes #37997
- c8693051a8b6 terminal: surface exit code via virttext + nvim_get_chan_info #37987
- b38173e49333 terminal: synchronized output (mode 2026) #38284
- 72d3a57f270f treesitter: incremental selection
- 586b1b2d9bcf tui: add nvim_ui_send (#35406)
- 981ea41abbec tui: ghostty builtin terminfo #36963
- 8eb096453788 tui: native progress bars for Progress events #35973
- de87ceb3beaa tui: support APC queries in TermResponse (#34426)
- 977e91b424f4 tui: use DA1 response to determine OSC 52 support
- abb40ecedd92 ui: "append" parameter for "msg_show" UI events
- fafc329bbd1e ui: 'pumborder' (popup menu border) #25541
- 649bb372f665 ui: :connect command #34586
- 7ba0f623d75a ui: avoid setting 'cmdheight' with vim.ui_attach()
- 2b4c1127ad1c ui: emit "msg_clear" event after clearing the screen (#34035)
- 2c1c0b7af50b ui: ext_cmdline/messages for the TUI #27855
- f29856d03444 ui: include compositor info with multigrid
- 9bbbeb60e355 ui: no delay for errors with ext_messages (#33693)
- 07d0da64ed51 ui: overlay scrollbar on 'pumborder' #36273
- a2b92a5efbb4 ui: show "empty" cursor behind unfocused floatwin #37624
- 97549ad7cf23 ui: specify whether msg_show event comes from typed command
- 8ae9a44d3841 ui: support grid=0 in nvim_input_mouse #32535
- 08c484f2ca4b ui: use builtin completion popupmenu with ext_cmdline (#31269)
- fbac2e5edc8b ui2: configure maximum window heights #38392
- 32e0d05d53f4 ui2: configure targets per message kind #38091
- 9fc985bc9868 ui2: more predictable routing #35028
- db2a54996ecf ui2: replace message by its ID #37672
- e268760e46ae ui2: show active paging keys in dialog float title #37919
- 875212c5b3b8 ui2: support routing "typed_cmd" trigger to target
- 81d2d88f70e0 undotree: set 'filetype' #36091
- 9595f074255c ux: sexy intro #38378
- 51961625402b version: support multiple Vim versions
- 361671870e14 vim-patch.sh: -M lists all ported patches
- 7fe02126f948 vim-patch.sh: add n flag to list possible N/A patches (#36431)
- 2f0fbdaa480c vim.fs: root() can specify "equal priority" #34276
- eae2d3b145c7 vim.hl: allow multiple timed highlights simultaneously #33283
- ea124068f246 vim.pack: lockfile support #35827
- 773075b2bce8 vim.version: add `vim.version.intersect()`
- aeb8bca12ddf vim.version: make `tostring()` return human-readable version range
- e42050f4aed5 vimscript: log function name in "fast" message #32616
- 6edae880528b vimscript: scripts can detect 'android', 'termux' #38218

FIXES
--------------------------------------------------------------------------------
- b233f71b1bd6 :ball w_locked check, reset b_nwindows in free_all_mem() #38484
- f2e60d000ed3 `fn.exists()` typos (#34390)
- 379c37fa0b1b bug in stylize_markdown
- 2c9d21f722f9 cursor shape don't resume after `:append`
- 7fdf9f739923 define `vim.mpack`
- bc4bddbb214f don't use logical diagnostic position in `get_prev` and `get_next` #35282
- 3567b7d75175 ignore Nvim local config #37805
- fd45bc8caba2 lsp.enable() don't work correctly inside FileType event #37538
- 0694ca8822b5 map wincmd instead of remap #34635
- eeba0dc2ed4e memory leak from double buffer initialization in read_stdin #35413
- dfa5d79d05d8 misc typos #37471
- cd4c98fded94 nvim_open_tabpage cleanup, fixes, more tests
- 874e2149931f remove exec permission from .gitattributes #33140
- bcc9242bc75e remove quotes around `nil` deprecation alternatives (#36047)
- 7b99e1f0c307 remove typo from buffer-local LSP docs (#35841)
- e991133058f2 remove unnecessary `nvim -l` from `gen` command #33676
- 92b2a2677239 resolve all remaining LuaLS warnings in `src/`
- 431004dda2bb screenchar()/screenstring() with hidden floating windows #35560
- 1999c4cdc11c screenchar()/screenstring() with multigrid #32494
- 9204b7541d27 silence LuaLS's `no-unknown` warnings in `src/`
- 020d5e0f7e7f stale lines("w$") after nvim_win_set_height when splitkeep=screen #36056
- 2e68e9c051dc temporarily disable 0.12 deprecation tests
- 3b6084ddf4f0 type fixes
- 38aac21083a5 type of nvim_echo
- d21e2463fd98 update deps hash for zig 0.14.0
- fa8e4e65caeb update lua types for commands
- 9170178ee5af use correct window dimension for range estimation
- 62ba6e8a76f3 use nvim namespace convention #34010
- 28157738e3de vim.lsp.omnifunc should not throw away other items #35346
- 71a22e20ad15 vim.ui_attach handles messages during `-l`/`--headless` #36884
- 9c5ade9212d8 wait() checks condition twice on each interval (#37837)
- 9287c73df9f5 :connect: don't use freed memory (#38512)
- 7cd22e916bbb :connect: formalize connect event #38543
- 49d7f694a850 :ls: check for finished terminal properly (#37303)
- 6af1b7e5e8da :print: don't use schar_from_ascii() for illegal byte (#34046)
- 5cfbc35aa838 api: add missing nargs field to user command Lua callbacks #34210
- eeacd7bd718a api: adjust fix for reconfiguring float "relative" (#34287)
- 3cb462a9608f api: autocmds mess up nvim_get_option_value's dummy buffer
- 612cd99a0017 api: buffer overflow in nvim_buf_get_extmarks overlap #37184
- 006361fc6b98 api: buffer updates in quickfix buffer #31105
- 76d0206342a2 api: count parameter in nvim_parse_cmd, nvim_cmd #34253
- c553008e74e5 api: crash when moving curwin to other tabpage #35679
- b7070778b98a api: cterm type in highlight keyset #37802
- 853eea859fd3 api: disallow moving window between tabpages in more cases
- 0bef1c88f362 api: do not allow opening float to closing buffer
- ef084b5c225c api: don't config split as floatwin relative to itself
- 4362132b101a api: don't re-apply minimal style if unchanged #38152
- 3165e94a64b0 api: ensure win_get_config() "border" is reciprocal (#34322)
- c7c3f9fc9c3a api: fix crash in command preview with % #35228
- 7b9512e613e1 api: fix not capturing output in cmdline mode (#35322)
- d788864cdea7 api: ignore split_disallowed when opening a float
- 3115e3d0d11e api: improve external window validation
- d707ccf98808 api: inconsistent scrolling when deleting before topline (#36301)
- 137d5ab01dfa api: merge split window config only on success
- 22df6492101f api: nvim_create_user_command addr option should allow ranges #35077
- 6f12663de56b api: nvim_get_option_value FileType autocmd handling #37414
- 7e2e11634369 api: nvim_get_option_value dummy buffer crashes
- 0c1ed63c05fe api: nvim_open_tabpage "after" like :[count]tab
- 97b064c9ac84 api: nvim_open_tabpage positional "enter"
- d7472c061759 api: nvim_open_win default to half-size for splits (#36088)
- 19f5f05ac2b9 api: nvim_open_win respects requested split window size (#35601)
- 652c3e76c712 api: nvim_parse_cmd "range" when ea.addr_count=0 #33536
- 72b0bfa1fb7e api: nvim_parse_cmd handle nextcmd for commands without EX_TRLBAR (#36055)
- f3ec657ebc02 api: nvim_parse_cmd on range-only, modifier-only commands #36665
- c7f38e3bc8fb api: nvim_parse_cmd parses :map incorrectly #34068
- 63cbc95d4517 api: nvim_set_current_win doesn't reset Visual mode (#37340)
- 9383a096eb7e api: nvim_set_hl boolean false corrupts underline styles (#38504)
- d19dc6339de7 api: nvim_set_hl crashes when url= key is passed
- ec18ebcb417b api: nvim_set_keymap() throws error even in pcall() #33228
- 7da4d6abe249 api: on_bytes gets stale data on :substitute #36487
- 2211953266f7 api: on_detach consistently before buf_freeall autocmds
- a2b97209395e api: open_win leak from naughty autocommands
- 5226801be264 api: parse_expression crash with ident and curly
- a5e5ec8910ea api: parse_expression crash with unopened ] and node
- d523750de0b3 api: populate lhsrawalt in nvim_get_keymap response
- 88dc44260f83 api: preserve WinConfig style when converting float to split #37264
- 963308439a5d api: reconfiguring float "relative" does not clear "win" (#34271)
- e13e85051751 api: redraw after setting minimal style
- 7be4ae796faa api: relax config validation for "win"
- 1901832f26fa api: return "style" in nvim_win_get_config() #38122
- 15d57ab0ba5e api: single-line visual block insert triggers extra on_lines #35098
- f5d03ec93089 api: style=minimal not applied immediately for unmoved split
- 0ee8323f2b5c api: unnecessary errors when not moving split
- af82f36108ce api: update topline when flushing with nvim__redraw() (#34346)
- 99529577cc9f api: use E226 instead of E227 for duplicate abbreviation (#33159)
- 0d73ec583465 api: use original LHS in keymap error message #33135
- 680d25e5b3c1 api: use standard error messages
- 1ec74fa7b1ba api: win_config `border` type #38030
- c924c2a7b316 api: win_config_float_tp grid removal, redraw
- da39966a3a0a api: win_set_config error message for splitting from a float #35650
- 65170e8dad90 api: wrong return value with reverse range + overlap #32956
- 285c04e2d0e3 api,lsp: call on_detach before wiping out the buffer #35355
- acecdbff1f57 api,lua: handle converting NULL funcref/partial (#37060)
- 4daa8eb5abca appimage: wrong $ARCH used by linuxdeploy #36712
- 5871d2677909 autocmd: 'cmdheight' OptionSet with valid window grids (#34619)
- 19379d125555 autocmd: deferred TermResponse lacks "data", may not fire (#37778)
- 05a83265f9a4 autocmd: fire TabClosed after freeing tab page
- f36dd7557a98 autocmd: heap UAF with :bwipe in Syntax autocmd
- 6d2330f50d07 autocmd: parsing of comma-separated buflocal patterns
- d945a93d69c9 autocmd: potential TabClosed UAF, always set abuf
- 1cde71233fcf autocmd: skip empty comma-separated patterns properly
- f9ef1a4cab74 buffer: defer w_buffer clearing to prevent dict watcher crash #36748
- 14d65dae91b1 buffer: don't allow changedtick watcher to delete buffer (#36764)
- 23aa4853b3fd buffer: don't reuse 1-line terminal buffer (#37261)
- 2700f6642aef buffer: switching buffer should respect jumpoptions+=view (#36969)
- fa24df32641c bufwrite.c: handle invalid byte sequences #37363
- c26f989b2fe1 build: also check os_win sources with uncrustify in CI
- 8069df266150 build: build.zig: use luajit for windows
- 576e8f62c262 build: disable problematic marktree assert in RelWithDebInfo builds
- 88b45614e945 build: gen_help_html fails #36359
- f0d981544b38 build: glibc 2.43 happened
- e69beb9b1aba build: invalid help tags cause reports to fail #36356
- 3268f51d202f build: musl libc build.zig
- f98b5ee61921 build: remove .tar.gz workaround for bug fixed in zig 0.15.2
- a2b0be19bf8f build: remove deprecated aliases in build.zig removed for zig 0.15
- b4db223d33e7 build: treesitter parsers are not ReleaseSafe
- 921f8b0df728 build: use correct cmake expression for $<CONFIG>
- ec8a0c73402b build: workaround errors in zig build due to stale cache
- 6741c134e17f build: zig build can has git version
- 41bc3020c46f build.zig: format build.zig to keep lines under 100 chars
- 565cfa04eb00 build.zig: replace slashes in filepaths #37111
- 64ce5382bd53 channel: crash on failed sockconnect() (#37811)
- 886efcb8535e channel: possible hang after connecting with TCP times out (#37813)
- 4399250e9063 channel: unreference list after callback finishes (#37358)
- 5f9f5bc04d0b checkhealth: check g:loaded_xx_provider for all providers #33168
- e87d2ae3836c checkhealth: check outdated pynvim version properly #33175
- 78d2e0b43e7a checkhealth: don't override user "q" keymap #33132
- 16fbde83c46f checkhealth: don't wrap command in cmd.exe (#38158)
- bd45e2be634b checkhealth: wrong ABI version for treesitter parsers #35327
- ad22d0ace996 cjson: fix `strbuf_set_length` incorrectness #35565
- f5cbf1164421 client: avoid :connect race with server detach
- 2483d5ad8af7 clint.py: replace deprecated codecs.open #36593
- 41199c45d6bb clipboard: avoid using stale register width (#36178)
- 95dfb063daa7 clipboard: correct blockwise register width computation (#35038)
- ac12dc49cc35 clipboard: enable cache for function providers #34470
- 310d01d8faa5 clipboard: tmux clipboard data may be stale #36787
- d00f680c0d2c clipboard: use tmux only in a tmux session #36407
- 8aacce90b4b6 cmake: linker flags, doc generation for cross-compilation #38215
- 9763834170dd cmake: use host nlua0 binary when cross-compiling #38089
- 69cae6259e91 cmd: :update does not write new, unmodified buffer #35929
- fcf752476a33 cmd: :update writes new file buffers only for real files #35939
- a5c55d200b18 cmd: bar "|" not allowed after :fclose #34613
- 5de2ec76a3b0 cmdline: :checkhealth completion with multiple args (#35060)
- f4ee0ab2f1a1 cmdline: avoid empty @: register after :<CR> (#33126)
- fde1c07891e0 cmdline: cmdline_block events for :lua debug.debug() #38171
- 0015a105ca7c cmdline: do not move UI cursor when entering cmdline #33729
- 236d831d77d6 cmdline: don't treat c_CTRL-D as wildmenu (#36067)
- 95ab723995f1 cmdline: empty ext_cmdline block events for :<CR> #33118
- 7f2298ad32a6 cmdline: fix inconsistent behavior with ext_popupmenu (#35688)
- 677446c70f8c cmdline: make sure pum is removed on leave (#36608)
- dc05598d0201 cmdline: set search cursor after ui_flush() (#34418)
- 5977bdba0566 cmdline: trigger CmdlineChanged after command preview (#35254)
- efd0fa55c8b1 cmdline: validate 'incsearch' cursor for "cmdline_show" redraw (#34630)
- 28ff4deda7a0 colorscheme: adjust `StatusLine[NC]` for diagnostics #36719
- 4a706a709282 column: don't count signs on lines beyond eob #33410
- b40e658717b3 column: missing redraw with virt_lines_leftcol (#34650)
- 8f78591f9ac0 column: wrong alignment and highlight with empty 'display' (#35495)
- 69419f8b3e76 completion: CompleteDone reason="discard" when candidate text remains #38169
- 51caf0a3af59 completion: avoid freeing uninitialized value (#33459)
- b25838217697 completion: complete drive-letter filepath on Windows #36353
- 634f6424aaac completion: set 'wrap' and scrolloff=0 in preview window (#37327)
- 3f10bb87efad completion: wrong CompleteDone reason for auto-inserted sole match #38280
- e1b3ca66291a compositor: clear old position with last known dimensions #38229
- 6f632a8615e0 compositor: don't blend uninitialized background cells #34364
- 150490d365a3 conceal: assert tripped during startup #36136
- ad8bce667496 conceal: check for concealed lines on invalid row (#36084)
- ab72799841c8 coverity/530026,530028: free resources on early exit in nlua_exec_file #33502
- 079159410143 coverity/530033: free lp->sl_info to fix resource leak #36198
- 0ed5e00077dc coverity/532324: free skip_until to prevent leak #36109
- 3e303231350e coverity/554963: preallocate msg.items to avoid FORWARD_NULL #34484
- 501a21f33390 coverity/637363: out-of-bounds write #37878
- c5b8ed870b8e coverity/644326: NULL ptr deref in socket_address_is_tcp #38010
- 20b2dd39ccfe decor: clamp last column by decor provider range
- ca16b54c866b decor: enable decoration provider in on_start #33337
- 6adf48b66d52 decor: extmark highlight not applied (#33858)
- 9492df027d07 defaults: 'guifont' "monospace" fallback, trim spaces #37930
- 57b4fb5c5318 defaults: enable :terminal [[,]] motion in operator-pending mode #33217
- 3ebde5ea147c defaults: keywordprg=:help on Windows #33336
- 9567fb050795 defaults: silent `gx` if no `textDocument/documentLink` support #37969
- dc6fc11b8753 defaults: start exrc search from parent directory
- cb247e06f0ba defaults: visual-mode [[,]] for :terminal shell prompts #33201
- 1c96b72dfa41 deps: make script/bump_deps.lua update build.zig.zon versions in sync
- 6e12ef4a7b4c desktop: cannot open filename with spaces using OS file manager #33161
- 2e0158650a3b diagnostic: accept multiple namespace in `open_float()` (#34073)
- c681336e3c35 diagnostic: accept multiple namespaces when setting loclist/qflist (#33982)
- d567f899efb7 diagnostic: allow virtual_{lines,text} cursor exclusivity #33517
- 3ac76977bca5 diagnostic: check for extmark in get_logical_pos #37127
- 68eece8b849d diagnostic: check if the buffer is loaded #35125
- dbe17da1206d diagnostic: deprecate `float` in `vim.diagnostic.Opts.Jump` (#34037)
- efa6d91132c7 diagnostic: display 1-based related information line/col numbers (#37093)
- 2b21c9c23f88 diagnostic: ensure autocmd always is always sent diagnostics
- e34e2289c228 diagnostic: fix flaky error
- 583308f5991c diagnostic: handle stale diagnostic extmark ids #38060
- 88a72efb465c diagnostic: open_float() handles config.float function #31577
- 09266830bdf4 diagnostic: show diagnostics on buffer load #35866
- 9833f0da5f35 diagnostic: unstable sorting by severity #37154
- f7b573f80a33 diagnostics: assert adjusted diagnostic position #37210
- 7a051a4c3894 diagnostics: avoid jumping to diagnostics in deleted ranges #35088
- 9641ad9369f6 diagnostics: diagnostic just after EOL is not highlighted #34085
- e4a100a1e1c0 diagnostics: extend conversion support from/to quickfix format (#34006)
- 19efabafc568 diagnostics: fixed virtual_text cursormoved autocmd error (#34017)
- 0a113013fb85 diagnostics: position diagnostics using extmarks #34014
- a1bc5d0ae6a9 diagnostics: showing stale diagnostics in handlers #35890
- 3594c213a7fe diagnostics: validate opts.signs #34565
- 60d0b7d0c3f7 diff: fix incorrect item size of dout_ga (#34338)
- 0b8a9bde0eee diff: set default diff flags properly (#35450)
- aaec3e5b0dab difftool: add check for window number when cleaning up layout #36161
- c1e60f36f3fb difftool: don't reset quickfix list when closing quickfix window #38088
- c9b74f8b7e38 difftool: ensure split layout, use systemlist #36145
- c6113da5a999 difftool: fully resolve symlinks when comparing paths #36147
- a88c7962a82f difftool: handle "no differences found" #36671
- d59064462096 difftool: silence :only command in setup_layout #36168
- 97a625944252 display: adjust setting winline info for concealed lines (#33717)
- cb2ca54331cd display: cursor moves when searching with "n", "*" #29446
- ce0c0c31a089 display: scroll logic does not take into account concealed topline (#33054)
- 5b1561bb717e display: scroll redrawing doesn't account for virt_lines above fold #33374
- 7e8b7bba21cf display: wrong cursor column with 'concealcursor' = "n" and virt_text (#33218)
- 5582005ac766 docs: add `--clean` arg to LSP bug report (#36530)
- e74753a221f8 docs: callback annotation for `vim.ui.input` #34507
- 4a910a2a4ed6 docs: dev.txt is "new layout"
- 9da316fcc45c docs: force blank line after numbered list items #35950
- 4397c4b117d1 docs: improve adjacent list items
- 8a76129d9f61 docs: include `?` in list items #35945
- b2722181b001 edit: clear showcmd after clearing last put char (#34517)
- 9a864d0a3c91 edit: handle cindent properly with completion (#36711)
- 3647b821ea69 editor: respect [+cmd] when executing :drop #33339
- 966b1da1831e editorconfig: a custom property is treated as a section (#34445)
- b618511ef906 editorconfig: use 4 spaces indentation for zig files
- fd973c0a4ec0 env.c: drop envmap, free os_getenv() result #32683
- df9e4a037ad6 eval: 0 should mean current tabpage in gettabvar() (#36891)
- 8156eece2413 eval: fix crash with :breakadd expr when calling user func
- 981d4ba45ed1 eval: winnr('$') counts non-current hidden/unfocusable windows #34207
- 1e1619de830e eval: winnrs of unfocusable/hidden windows #35474
- 57c6b61cf2d1 event-loop: don't call uv_stop() when loop isn't running (#37984)
- 1dbede5b932f events: avoid superfluous CursorMovedI on first autocmd (#33588)
- 0b61bc898230 events: crash on SIGTSTP (Ctrl-Z) #33258
- 0a0c349b6fee events: crash on WinScrolled #35995
- 29494f042c28 ex: error handling for `:lsp` #37061
- 2f352217742c excmd: :trust executed even when inside false condition (#36032)
- c1f142322b20 excmd: correct :connect abbreviation
- 781ea5b41b2d exit: stop listening before closing channels (#38480)
- ed9abb1851e3 exrc: ensure consistent 'exrc' loading sequence #35148
- f7c939fa7af9 exrc: exrc knows its own location (#34638)
- a39334767321 extmark: adjust invalidate range by one for deleted lines #37897
- 589232c0e065 extmark: wrong eol_right_align width calculation (#37034)
- 6dee1672ccc9 extui: "box" window width calculated on last line (#33881)
- ff95d7ff9a04 extui: adjust "more" window routing (#34251)
- cc78f882012b extui: adjust which messages are sent to "more" window
- 9784bc134624 extui: append consecutive :echon messages
- e512efe3696b extui: attempt to perform arithmetic on field 'last_emsg' (#35047)
- 70eb4164591e extui: better message highlighting after carriage return (#34034)
- 9e968635efc4 extui: check if buffers/windows exist before deleting (#34886)
- 3c7c824bdc08 extui: check option values after VimEnter (#33768)
- 5046ef4c8f8d extui: clear cmdline buffer for first message (#34490)
- db702782e016 extui: close cmdwin to enter "more" window (#33860)
- c916bdf32986 extui: close message window with `q`
- 39a5b7f239fb extui: cmdline visibility, cmdheight cursor position (#33774)
- 5e4700152b79 extui: copy window config to new tabpage (#34308)
- 8c6ea76ebcdf extui: disable cmdline highlighter when showing a message (#34887)
- 9efdd4fe98e7 extui: drop "more" window that is no longer floating #33861
- be5a4851eaa5 extui: ensure temporary cmdline config is not restored #35301
- 1256daeead27 extui: ensure windows are valid in scheduled on_key (#35106)
- cd7cf4bd16e7 extui: error on :call input('') (#35515)
- 4d56dc43c0ea extui: handle carriage return in messages
- f1295fe76f49 extui: hide inactive "more" window (#33831)
- 3828856233d9 extui: incorrect cmdline cursor position (#34201)
- a59b052857ca extui: map wincmd instead of remapped key (#34151)
- d4ecfc423495 extui: message may overwrite active cmdline #33846
- 76f76fb08391 extui: only append messages exceeding 'cmdheight' to "more"
- 33b0a004eb20 extui: properly setup "more" window for changed buffer
- 5e83d0f5ad4a extui: reposition "more" window after entering cmdwin
- 7077c5929529 extui: reset message state after "search_cmd" message (#34119)
- 7e787f6a4f16 extui: route interactive messages to more-window (#33885)
- b2a5105c66e1 extui: search highlighting in extui "more" pager #33792
- d0aedd36dfe0 extui: set 'modifiable', 'noswapfile' for buffers (#34582)
- 56709ca1689a extui: setup buffers after activating `eventignorewin` (#35915)
- 8e8f4523c687 extui: translate <Tab> in cmdline text (#34055)
- cb036cae5fb1 extui: use visible to determine active "more" (#34327)
- a96665cf4867 extui: using tracked message column in cleared buffer (#34154)
- c973c7ae6f56 extui: write each message chunk pattern separately (#34188)
- 8af28ab9cb9a filetype: error when `vim.filetype.match{buf=fn.bufadd('a.sh')}` #34155
- 7500f76e6131 filetype: fix typo (#37286)
- 095b9f98f3e3 filetype: handle invalid `bufnr` in _getlines(), _getline() #36272
- e2cb67570522 filetype: move fallback logic to vim.filetype.match() #30141
- d131d67e67a8 float: clamp floating window above cmdline #37899
- 3ccba4cdffb8 float: crash from nasty :fclose autocmds (#36134)
- d4f2b9050dc6 float: cursor visible in "hidden" floating window #30866
- 66e4784f5ace float: ensure relative window grid is allocated (#34459)
- eb3201c77210 float: null pointer dereference, redundant call #36727
- 3b6e8e484edf float: prevent truncation of title that fits exactly #36880
- 31c814a0ed0e float: respect statusline=3, don't inherit local 'statusline' #36716
- 5943a81fe79a float: style=minimal leaks into normal windows #25185
- cb171ee7cba0 float: tail truncate long title #28387
- 9269a1da355b floatwin: handle viewport width properly at end of window (#35490)
- 66dddd8b515a folds: adjust filler text drawing for transparent folds
- 1d9990daac37 folds: avoid unnecessary loop with horizontal scrolling (#33932)
- d73cfefed5e4 folds: error when deleting lines at end of buffer #35396
- 19715e6e8a71 fs: expand drive-relative paths on Windows #37084
- d22fcf291746 gO: use non-breaking space #34197
- ac6cf5b03ba0 gen: alias /doc/user/helptag.html to /doc/user/helptag/ #38156
- 805dd5d04780 gen: prevent "make doc" failure due to temporary files
- 67fede0fc94b gen_help_html: ASCII art rendering in docs #35262
- a49bf5e1d3c8 gen_help_html: parser override
- 4b02d1f6f6e2 gen_vimdoc: unnecessary assert for non-source files
- d2ca90d87e32 glob: handle numeric literals in pattern matching (#37257)
- 3991f146215b glob: handling commas in letter pattern #34170
- aeebc5185171 grid: assert crash during extreme resize layouts #36847
- 1ad9cdd4036b grid: check allocated grid size when suspicious scrolling
- 856391bc7fa9 health: "q" keymap not set when health.style=float #37007
- a33284c2c068 health: accept TERM=tmux-direct #35511
- c28113dd9d09 health: add back `vim.cmd.redraw()` call (#37576)
- 3fb53abe2a7f health: attempt to concatenate table value #36369
- 8a901a52e1f0 health: avoid silent failure
- 2422fbdd5f90 health: bad format() call #34904
- 672f6e60c165 health: bug-report formatting, version check #36809
- 61678811d8d3 health: check more "old" files #38028
- 31cb37687a03 health: check shell performance using vim.fn.system() #36980
- 16c8a908ef67 health: check stable release for non-nightly build #36715
- d927a87ed607 health: checkhealth float opens extra empty buffer #33648
- f19653e3706d health: emit Progress message #37123
- cfe10b4014ec health: errors in :checkhealth with pyenv-virtualenv #35865
- bd37348939a7 health: expecting nonexistent "inotifywait" function #33312
- 28b7c2df5217 health: floating window closes when opening TOC (gO) #34794
- e4ce0c7270e5 health: git check and autocmd clean #36713
- 6152bcf42ef0 health: hard fail on invalid "python-*" bin #35382
- 6942dec9b29d health: highlight group conflicts with help #34616
- bfc7bae421fe health: improve version check for nightly builds #38147
- 07f048a8d764 health: message should mention "vim.provider" #33095
- e9d03b92b67c health: redraw after emitting progress message #37567
- 06e4b159ed08 health: show full curl output
- f311c96973a5 health: update advice for Python #35564
- ae93639ec440 health: use FileType autocmd for bug report winbar #37486
- 1c52e90cd57c help: :help can focus unfocusable/hide window #34442
- 4a4de7304306 help: better align local-additions #38097
- 25322a3a3b22 help: only set url for help files in $VIMRUNTIME #36165
- e49a59259507 help: retry once if async parsing fails #36592
- 62d3a2110df4 help: wrong tag url in third-party help docs #36115
- 625c59fe5fc2 highlight: Normal-linked groups shouldn't override CursorLine #35026
- 64966ba52cea highlight: allow ephemeral extmarks past final newline #35888
- e23c083d133b highlight: avoid null deref, misc issues #38164
- 444c195edb33 highlight: blend underline check and use struct key for attr cache
- d5a8c9d76667 highlight: correct change detection in do_highlight for gui colors
- e3c36f31e3a0 highlight: ensure extmark range is within buffer bounds #35928
- a7177e34c318 highlight: link HLF_8 to something more prominent #34910
- 3af43cffa028 highlight: no match highlight during :substitute prompt #33262
- 336b46a87945 highlight: preserve background transparency in 'winblend' #34302
- 5803994a1c4a highlight: preserve bg transparency with winblend=100 #34825
- bd12aef78476 highlight: refresh highlight attrs before message output #25737
- 6af89580555f highlight: respect 'winhighlight' in CursorLine Normal check #36927
- f8d59cfab958 highlight: setting 'winhl' doesn't work with global ns (#37868)
- 64753b5c37cf highlight: spurious underline in 'winblend' floating window #34614
- a26cdcb20e68 inccommand: skip input() during preview #35272
- f348c0ebba2c incsearch: include compsing characters with Ctrl-L
- a04c73cc17f5 input: discard following keys when discarding <Cmd>/K_LUA (#36498)
- 592582ba4886 input: don't exit on EOF when peeking for input with -es (#36948)
- 29c8dabd414c insexpand: update showmode when updating the screen (#34466)
- e0308dc14730 install: only install "tee" on Windows #36629
- cd7122125098 intro: crash on small screen #38397
- 4fe51dfdae84 iter: ArrayIter:last returns nil when filtered to empty #34697
- eaa9aca1308b jobs: jobstart(term=true) accepts width/height #33904
- 11e82c108da6 l10n: update Ukrainian translations #37654
- 16c133439958 langmap: assert failure on mapping to char >= 256 (#37291)
- 14fe37056436 logging: don't overwrite NameBuff (#38004)
- ea5007b37fbe lps: separate namespaces for pull/push diagnostics #37938
- bf4710d8c398 lsp: "attempt to index nil config" #36189
- f068386c9f70 lsp: "bold" border for vim.lsp.buf.hover #33395
- a9b8a8dc6c1f lsp: _cancel_all_requests() tries to cancel completed requests #34105
- 97ab24b9c7d9 lsp: _get_workspace_folders does not handle root_dir() function #36071
- a03ab03a10ad lsp: `:lsp restart` restarts on client exit #37125
- 6005fcf6719b lsp: `opts.wrap` always `true`
- 4b0700c618bf lsp: `vim.Range` check in `document_color.color_presentation()` (#38374)
- d6fffe6b321e lsp: access correct client capability path in `supports_registration`
- 3eaa6c5a6659 lsp: add `RequestFailed` error code constant #34645
- c3589753a0e1 lsp: add `vim.deprecate` call to `vim.lsp.with` (#37960)
- bd41f6eb6c66 lsp: add deprecation comment to `gen_lsp` (#36185)
- 9f99bf48ea8d lsp: add missing argument validations (#34519)
- 378435968f64 lsp: adjust codelens position based on the server-provided range
- 35756022cbcd lsp: advertise supported fold kinds (#34461)
- 4db58f78b49f lsp: announce `normalizesLineEndings` capability (#34175)
- bac133e4b6ea lsp: announce diagnostic tag support (#34436)
- fed9069b8da1 lsp: avoid `foldclose()` after current window-buffer changed #33901
- 2debe2f30a45 lsp: avoid automatic request after leaving insert mode (#35767)
- fde0b487fb61 lsp: avoid re-enabling `document_color` on `registerCapability` (#35774)
- 6f733f4a9bf0 lsp: avoid scheduling client deletion before LspNotify #37685
- 2ee896201c46 lsp: better handling of "*" configs
- 0501c5fd0959 lsp: call `on_list` before reading `loclist` #37645
- 653871da1b55 lsp: check `nvim.lsp.enable` before `doautoall` #36518
- e94d8f03b959 lsp: check for lens range in `vim.lsp.codelens.run()` (#35294)
- 1bc85d29c135 lsp: check for non-nil buffer state on reset (#36519)
- bbfcde3ab20e lsp: check if buffer is valid in scheduled client:on_attach() #35672
- c789d799663d lsp: check if buffer is valid when resolving code lenses (#35092)
- 0862c1036a8e lsp: check if client is stopping before reuse #33796
- 42f244bf18a1 lsp: check whether buffer is valid when scheduled #35461
- 0dc900d74443 lsp: clear document_color autocmds #34573
- ace254c9fff1 lsp: close floating preview window correctly #34946
- a702534c501f lsp: close timer when client exits (#36795)
- b4ba27c238ec lsp: codelens extmark line out of range (#35070)
- f2d0b06ecbb5 lsp: completion word includes leading space from label #38435
- 3342aead1df9 lsp: consistent use of `vim.notify`/logging with unsupported methods
- 55e3a75217d9 lsp: convert the encoded position to line byte (#34824)
- 8165427b4d92 lsp: correct capability checks for dynamic registration (#36932)
- 82d0883c2d96 lsp: correct diagnostic data support and related info capabilities (#34454)
- 2822c38f2e73 lsp: correct iteration through attached buffers (#36517)
- 213360c389de lsp: custom 'winborder' in make_floating_popup_options() #34868
- 342974773c53 lsp: cycling signatures with the default `config.focusable`
- 40aef0d02e1a lsp: decode 'null' in server responses as vim.NIL  #34849
- b67eff38fe19 lsp: deduplicate completion items #36166
- e62dd13f83a2 lsp: default ClientConfig.exit_timeout to false #36811
- 70ea589d79f6 lsp: deprecate `vim.lsp.get_buffers_by_client_id` (#36449)
- b938638d2d06 lsp: deprecate `vim.lsp.protocol.Methods` (#35998)
- f7802dd5d572 lsp: deprecate vim.lsp.set_log_level, vim.lsp.get_log_path #35274
- 83156974497d lsp: detect if Client:request resolved synchronously #33624
- 0cc4f53b4066 lsp: do not clear the codelens on the last line #38226
- 18e8839c804e lsp: don't create an `'LspAttach'` `document_color` autocommand
- 90abd2613d7f lsp: don't empty server start-boundary by next client response #37665
- 0472119fe61a lsp: don't immediately force shutdown when using a timeout (#36455)
- c2c5a0297e00 lsp: don't overlay insertion-style inline completions (#36477)
- afebbd0f34ca lsp: don't override `config.title` in `vim.lsp.buf.signature_help()` #35075
- 729111d3a3cd lsp: don't treat MarkedString[] with language id as empty #35518
- ff792f8e6908 lsp: enable insertReplaceSupport for use in adjust_start_col #36569
- 8495d9623809 lsp: ensure `bufstate` when calling `vim.lsp.document_color.is_enabled`
- f168d215cfa2 lsp: ensure augroup before querying autocmds #38254
- e239179871c4 lsp: ensure bufnr is passed for buffer-local requests (#36325)
- 40dc2d02a851 lsp: ensure the codelens on the first line is visible
- 9f77124b78ec lsp: error on omnifunc completion (#37790)
- 82b844fefef5 lsp: fallback to empty `capability_path` in `supports_registration`
- 927927e143bd lsp: fix error with InsertReplaceEdit events #33973
- 23f4fab0bdfe lsp: fix incorrect params because of typo (#36871)
- 34116bbd9b61 lsp: fix nil-index error for `:lsp enable` (#37411)
- 20a392fe3843 lsp: fix window to set cursor for inline completion (#36444)
- 4ee2e365a583 lsp: fix workspace diagnostic request to follow spec (#34674)
- 913b05bf630d lsp: format_item should return string (#36025)
- 7c3df3e2ea13 lsp: get_namespace signature (#38449)
- a8ffa6e323d8 lsp: guard dynamic capability attachment #38382
- abc96ba0ce30 lsp: handle `nil` buffer state in `documentColor` clear (#33746)
- 8e48c0206155 lsp: handle array with empty string when checking empty hover (#35423)
- 507cd63418ac lsp: handle completion/resolve response arriving after on_insert_leave
- 1de77c608fa9 lsp: handle nil request in semantic tokens #36780
- 26cc42e426d7 lsp: handle nil response in references request #35139
- 5653b25e9b8f lsp: handle non-string documentation in completion items #38291
- 95dce376f330 lsp: handle providers without subcapabilities
- eaacdc9bdffd lsp: ignore empty response on trigger completion #37663
- a0678a5849d3 lsp: ignore inline completions after leaving insert mode (#36476)
- 7ebfc5077512 lsp: ignore invalid fold ranges (#36708)
- 8bfb91accce7 lsp: ignore stale codelens resolve responses (#38153)
- 5d1fd4aca58c lsp: improper diagnostic end_col computation
- 1f558f8d0960 lsp: improve diagnostics handling and comments
- ed562c296abe lsp: improve dynamic registration handling #37161
- 5c15df449a87 lsp: improve error completion message #33812
- cd06e0c9d6be lsp: include client ID when receiving unknown fold kind (#34535)
- 6005bc68b29e lsp: include context for each client in multi-handler results (#34669)
- b459bf5961fd lsp: include missing LSP methods and update type annotations
- 18d6436ad2c6 lsp: inlineCompletion: ignore out-of-range items #35990
- 820fb89172b7 lsp: make thematic break parsing conform to GFM spec (#35162)
- 13cf80deefe7 lsp: map all LSP methods to server capabilities (#37910)
- 2f78ff816b03 lsp: misleading logs in non-applicable filetypes #35749
- d9768348649b lsp: nil error in ColorScheme autocmd
- 3c4acc0f1a2b lsp: noisy log message when enabling server without config #36264
- 91e116f3a671 lsp: only auto-detach lsp.config clients #33834
- e5c5b563ec1e lsp: only auto-detach lsp.config enabled clients #34325
- eb90f5d9e3a6 lsp: only resolve LSP configs once (#38007)
- 6926fc1615c9 lsp: opts.reuse_win does not jump if buf is already open #33476
- 4778a4c20179 lsp: prevent flicker in codelens virtual text #34888
- 9e93bfdb5fce lsp: prioritize showing active signature
- b98aefc5841a lsp: properly handle `documentColor` from multiple servers #33656
- c39d18ee939c lsp: raise error when lsp config is invalid type (#37508)
- addd408b3955 lsp: redraw codelens after request completed #38352
- 03032d1f73d8 lsp: remove `vim.lsp.diagnostic.reset()` (#35938)
- 285ea2525fdf lsp: remove extra notify on empty hover
- 34815777b280 lsp: remove side-effects if `vim.lsp.enable()` raises an error (#37571)
- 181df6053382 lsp: remove unused `ns` field
- 371ad48135ed lsp: replace `string` types with LSP method alias type annotations where appropriate. (#36180)
- 6a49a277f517 lsp: request diagnostics from all registrations
- 0da982767332 lsp: respect documentation markup kind in completion preview #38338
- 4ef562472988 lsp: restore Client:stop() force-stopping behavior (#35800)
- 0db8efcbe4fc lsp: restore virtual document color visibility (#38407)
- 4dd9137215f8 lsp: reuse_win prioritizes windows/tabs currently displayed #36486
- 70460d557c51 lsp: scope inline_completion autocmds to buffer (#35965)
- 323d5527eed6 lsp: set 'linebreak' in floating windows (#36275)
- 4b8980949cd4 lsp: set concealcursor='' in LSP floating windows #36596
- c3991b8ef4f0 lsp: show notification with empty hover response (#35014)
- 5b1b46ea5a4f lsp: show title when global winborder is set (#35181)
- 8a94daf80ead lsp: simplify semantic tokens range request logic #36950
- 4ed597389c33 lsp: snippet preview blocked completionItem/resolve request #38428
- 0197f13ed4fa lsp: sort items when completeopt include fuzzy #36974
- d53d542359de lsp: stop and close timer when `Capability` is destroyed
- a768d0a95b52 lsp: stop repeatedly resuming dead coroutine #35743
- 1d8e9b5d070c lsp: store result id for unchanged diagnostic reports
- 8b5d8dfc732e lsp: support `containerName` in symbol requests #35029
- 17c18efbe561 lsp: support v:count in selection_range() #34551
- a1895f024a4c lsp: support workspace/configuation with no section #27510
- bd225422a5b7 lsp: tests for :lsp, rename start/stop
- e69b81ad94da lsp: treat 2-triggers-at-once as "last char wins" #35435
- 1f63735f175d lsp: treat nil inlay hint result as empty array (#35458)
- f67306cc67e8 lsp: typos in method names #36077
- 29c6176f0842 lsp: unify LSP error logging prefixes #38354
- 9139c4f90ff8 lsp: update capability maps (#35227)
- db1b7f74129e lsp: update completion items on `TextChangedP`
- 7a8d31687940 lsp: update metamodel (#38174)
- 6c3e9b557341 lsp: update on `CursorHoldI` cause users unable to `select()`
- 848c7a789470 lsp: update window title when cycling through signatures #35407
- 006101360d6f lsp: use LSP method type in more places (#36069)
- 36db6ff2c128 lsp: use LSP textEdit range for completion start boundary (#37491)
- 34c769dd897d lsp: use `bufnr` when getting clients in `symbols_to_items` (#33760)
- 807bc00dd68d lsp: use `vim.notify` with action-less `showMessage` requests (#34720)
- 5fbc5ab81073 lsp: use correct `workspace.diagnostics` capability key (#35937)
- 00ad477419f2 lsp: use correct deprecation function (#34518)
- 6fe68abdf5a3 lsp: use entire line as completion word (#37949)
- 1d7823451e2a lsp: use vim.notify for all message types #34489
- f90cd620c56b lsp: vim.lsp.completion clean up triggers on client detach (#38009)
- 5c4b64aae59d lsp: wait for exit_timeout on quit #37597
- 6bb6b4793327 lsp: wait to display exit message #37925
- 5554fcc28683 lsp: warn on missing config in :checkhealth #33087
- 0cda01834514 lsp/diagnostic: key resultId by client and identifier
- 7a5e9ef0aab8 lsp/diagnostic: use diagnostic provider identifier for code actions #38401
- f0c0c24ed777 lsp/health: always use vim.inspect to show root_markers (#34667)
- 5ad01184f3c3 lsp/health: ensure valid table before concatenating (#34092)
- 1906da52dbc9 lua: close vim.defer_fn() timer if vim.schedule() failed (#37647)
- 103ddaf9ae80 lua: correct line number reporting for options set in coroutines (#37463)
- b986fd96bc8d lua: coverity "unreachable" warning #35874
- 40f5115ac430 lua: disable `strict_indexing` when converting LSP positions
- 1264d1156ce1 lua: don't leak timer when vim._watch.watch() fails (#35768)
- c08139d790b7 lua: don't remove first char of non-file stacktrace source (#37008)
- 9a5641b4b570 lua: drop support for boolean `buf` in `vim.keymap` #38432
- 66066d0f6a22 lua: extra CR (\r) in `nvim -l` output #38048
- b87bdef2a864 lua: relax `vim.wait()` timeout validation #36900
- 6a330f893bf1 lua: report error in Lua Funcref callback properly (#35555)
- 1aa26f5d5555 lua: separate vim.{g,b,w,t} types #37081
- 94144d46787f lua: vim._with() doesn't save boolean options properly (#37354)
- 89b946aa87d2 lua: vim.diff is nil in uv.new_work() thread #34909
- 40351bbbbe78 lua: vim.validate `message` param #33675
- bc0635a9fc9c lua: vim.wait(math.huge) fails #36885
- b3324be0d8a1 man.lua: :Man ignores section of gzipped manpage #38235
- 87bd16e470b2 man.lua: :Man slow/hangs if MANPAGER is set #36689
- 5333d6371bfa man.lua: E95 when piping to :Man #33068
- a8dd5c7e41dd man.lua: noisy "ENOENT" error on Windows #33409
- 46220afef806 man.lua: show_toc condition may cause infinite loop #36979
- b8763cb21525 man.lua: useless executability check #33438
- 84d3bbef23d0 map: use names like Map_key_value not Map_keyvalue
- 218ea9fff775 mappings: always include replace_keycodes in mapping dicts (#37272)
- 3341ab07764e marks: clamp conceal_lines corrected line number #33464
- 5773f0e99463 marks: make jumpoptions=view work with 'smoothscroll' (#38339)
- 064ff74cdbe6 marks: wrong display after inserting/deleting lines #33389
- 033f1123cd91 marks: wrong line('w$', win) with conceal_lines (#37047)
- 37c0efb21cfb marktree: fix edge case bug regarding changing intersections
- 2154d325d526 memfile: avoid potential crash on OOM (#37946)
- 5e470c7af556 menu: fix listing of submenus (#34315)
- 8f9278d7c258 menu: right-click menu fails with E335 when using V after i_ctrl-o #37349
- b47b0caba858 message: concatenate multi-chunk nvim_echo({err}) for exception message #38131
- 3d5ef97a9829 message: no wait return for delayed exception error #35881
- 2de284e50b6d message: set replace_last for completion "scanning" messages #37967
- 3b85046ed5f2 messages: "list_cmd" kind for :command, :version (#34529)
- ac670989980a messages: "list_cmd" kind for mark commands #33874
- dc3a30cfbb83 messages: 'exrc' / secure messages
- 96e1acfa427f messages: add "list_cmd" kind to :colorscheme #37561
- 29f2cb89f01b messages: add append parameter to history entries (#34467)
- 8bdfd286e584 messages: adjust msg_show "empty" kind logic (#37427)
- 83037cf21857 messages: allocate message history kind string #38292
- c85313bac7e6 messages: always assign msg_id to msg_show events #37671
- bf1d4e9793fc messages: capture execute("messages") with ext_messages (#34342)
- 276860b5380d messages: clear 'showmode' message after insert_expand #33607
- 1b2b715389c5 messages: disallow user-defined integer message-id #38359
- 81828e66b99a messages: emit empty msg_show event for :echo #38467
- 53aad276b62a messages: exclude "search hit BOTTOM" msg from history #36961
- 73157c994db4 messages: heap-buffer-overflow with shell command (#37855)
- 7a490d65c57e messages: increment message ID without ext_messages #37714
- 912388f51786 messages: list_cmd kind for buffer line messages (#33855)
- d86d4bacc14b messages: make swapfile attention message part of prompt (#34414)
- 49c19a1fe3cb messages: message not flushed at end of command #37904
- 7c43f8e4336c messages: messages added to history missing from ext_messages "g<" #33907
- a81b059a45ba messages: non-fast and append for "shell_*" kinds #38188
- 10a03e83e357 messages: only msg_clear for UPD_CLEAR #34688
- e876a739eeb1 messages: recognize cmdline one_key/number prompt State (#34206)
- 96957d80c6c3 messages: reinstate 'showmode' message delay #37992
- e63346dfe91b messages: reset redirection message column at message start #38068
- a5f236291c0c messages: single event for multi-expr :echo (#34393)
- f1dcde6cba3b messages: single msg_show event for :global command #37728
- 986b92eb0713 messages: single msg_show event for multiple :set options #33555
- 3898f34c5a21 messages: spurious newline with --headless + cmdheight=0 #38494
- 41336a35905b messages: swedish translation #37395
- 39c4e0f33667 messages: unwanted ext_messages newlines for confirm() #38045
- 4260f73e1396 messages: unwanted newlines with ext_messages #37733
- 98f5aa2564c3 messages: verbose message emitted without kind #33305
- 18fa61049a9e mouse: crash with click on win-separator in statusline (#33091)
- 7432781e7184 mouse: do not fetch clipboard twice when pasting with middle button #33494
- 2f8fb4f28ab9 mouse: mouseclick after conceal_lines is miscalculated #33451
- 32325a66ca0d move: adjust for concealed lines above topline after scrolling up (#33211)
- 6ce2877327b1 move: consume skipcol before revealing filler lines (#34143)
- 2069be281c72 mpack: boundary values for negative integer encoding #37255
- b8ee354f127c msgpack: flush incomplete big UI event before packing RPC event
- 7f2d5d6883b5 msgpack: use fixstr encoding for strings of length 20-31 #36737
- 41068c77aa1b normal: assertion failure with "gk" in narrow window (#37444)
- 911337eb3c4c normal: crash using :norm from vim.ui_attach shell message event #38283
- 4485e715fb6a options: deprecate 'gdefault', 'magic'
- c2136e359008 options: increase t_Co buffer size (#35859)
- 9910445125bb options: make 'cdhome' take effect on any platform
- f4f1149292aa options: vim.opt fails for 'fillchars' #37141
- 1f2883e87976 outline: use 2-space indent instead of 1-space
- 3d37aa3116ab pack: account for Git's "insteadOf" in `:checkhealth` #38393
- bac4cde9cd43 pack: actually checkout proper version of submodules
- b02d1303b80f pack: add trailing newline to lockfile #38469
- 46648c38677d pack: close confirmation buffer's tabpage by ID #34971
- 0f73873d4f42 pack: close confirmation buffer, not tabpage #37756
- ee3239fcb682 pack: consistently use "revision" instead of "state"
- f00abc6a5669 pack: ensure `data` spec is passed in events during lockfile sync #38139
- d3bea4ace94a pack: ensure consistent order of changelog during update
- ed73ed828374 pack: ensure explicit default `version` in events (where possible)
- 14003bd1c563 pack: ensure plugin directory is created during first usage attempt
- 539b8027a309 pack: explicitly close confirmation window #37861
- fa3920282da0 pack: handle Git environment variables #35626
- 3b860653ca0c pack: handle lockfile in case of install errors #36064
- 3f34f083db06 pack: ignore 'loadplugins' when sourcing 'after/plugin' scripts
- 28e2a5c1513d pack: improve `vim.pack.add()` input validation
- 89a72f11e5fe pack: make newer version suggestions more robust
- 2e62f3576f7f pack: open confirmation buffer in tabpage after the current one
- e4e660594366 pack: relax minimal Git version to be 2.0 #36573
- f492f62c3d5f pack: rename confirmation buffer to again use `nvim-pack://` scheme
- 0fa96585dc1d pack: set `source` in progress report #38511
- 474e9e9408e3 pack: show more informative error message if no `git` executable
- 5468e6a45272 pack: skip :redraw! if headless #37782
- 8f0b8a2c279f pack: skip `git stash` during install
- b337c6e0fc0a pack: update `add()` to have default `load=false` during startup
- 1ee18b406114 pack: use 'coxpcall.lua' on non-LuaJIT
- 8200223ee7a8 pack: use `vim.pack:` as message/progress prefix
- f3f509563084 pack: use full hashes in lockfile and revision description
- eff01b7620cf pack: use more correct URI for confirmation buffer name
- 267bbe64cb4f pack: validate installed plugins in `update()` and `del()`
- a5d69326860f paste: don't use :echo immediately before :redraw (#35773)
- 42aae632beb0 plines: count 'showbreak' in EOL inline virt_text in line size (#35921)
- 6291256868f0 process: avoid buffering unnecessary UI event with PTY CWD (#37582)
- 19a3b6778979 process: avoid unexpected behavior when PTY chdir failed (#37614)
- e05171890809 process: don't limit PTY master remaining data size
- 97509aa2be00 process: handle poll() interrupted by a signal (#38024)
- 8a4719e11744 process: use poll() to drain PTY master on Linux (#38005)
- 974bc1b0444b process: wrong exit code for SIGHUP on Windows (#38242)
- e5ba875a956c progress: memory leak on progress-message with history=false
- 2415d8f4247e progress: message-id not sent to ui with history set to false
- 7bf83cc2a651 progress: require "source" for progress-message #38514
- 0af01948f30a progress: show progress-status only in curwin #38458
- bc6737250d61 progress: simplify ui-event, introduce default presentation #35527
- 25000be8457f prompt: "%" prefix repeated on newlines with formatoptions+=r #34584
- ed4c549ea243 prompt: also store column info in ': mark #36194
- a5eb023a5393 prompt: clear undo when changing/appending prompt
- 807a65b2da53 prompt: cursor on prompt line, disallow ":edit" #34736
- 689a149b0890 prompt: don't implicitly set 'modified' #38118
- dbb3986f331f prompt: ensure prompt-mark col gets reseted properly #37669
- 1349233cd150 prompt: heap-buffer-overflow in prompt_setprompt
- 4afbc2543282 prompt: heap-buffer-overflows with invalid ': col
- bf9d3e4bf8d3 prompt: lnum update via nvim_buf_set_lines if buf != curbuf #34833
- b3096b5860ca prompt: ml_get error with invalid ': lnum
- ed7ff848a02d prompt: prompt mark not placed after text edits correctly #34671
- 602cbbe1d930 prompt: prompt_setprompt cursor col adjustment
- 3a10405214ac prompt: prompt_setprompt does not adjust extmarks, no on_bytes
- 2a5d687cc92b prompt: prompt_setprompt sets cursor col unnecessarily
- 16bf7652b7b2 prompt: prompt_setprompt with unloaded buffer, ': with lnum 0
- 51dc752e6cfa prompt: wrong changed lnum in init_prompt
- 7641177c5f98 prompt: wrong cursor col after prompt_setprompt, no on_lines
- 466b2ac1929a prompt: wrong cursor position with cursor keys (#36196)
- acb99b8a6572 prompt_buffer: plugins can't set `':` mark #35624
- b4906577c9f1 provider: misleading :checkhealth if user sets g:loaded_python3_provider=1 #32696
- 51aa64488ddd provider: support python3.14 #38419
- 7be4e4dd6596 pty: prevent orphan conhost.exe on Windows 10 #38244
- ef0386fe9ae2 pum: adjust info window column offset when scrollbar is present (#37069)
- 76fdd9b88248 pum: crash when resizing grid with pumborder set (#36404)
- 2681e1fce3c4 pum: fix heap-buffer-overflow with 'rightleft' (#33146)
- 7d569abb2067 pum: handle RightDrag on parent grid properly (#33626)
- 922816877feb pum: hide info floating window when insufficient space (#37107)
- d87972f92000 pum: keep info window aligned with pum when above #38251
- 445cb751e6cb pum: pumborder=shadow not blending properly (#37328)
- 0712a9c87bfe pum: separate scrollbar from shadow border (#37448)
- 686e7aca40b8 pum: simplify 'pummaxwidth' truncation and avoid crash
- 5a6532168443 pum: text overflows into border on truncation (#37438)
- 106cacc93be1 pumblend: do not apply special highlight attrs from bg layer #36186
- c80bb5b63e0a pumborder: wrong layout with pumborder=none #36208
- 6256adde2f8b quickfix: always split from current window #33807
- 69c379dc4411 quickfix: use correct lnume when appending (#34611)
- 7ed8e969941c redraw: update curswant for Visual selection (#34241)
- a141fd2c4d21 remote: remote-ui connect timeout on slow networks #36800
- 39d8aa0a1ac1 rpc: don't overwrite already received results on error (#37339)
- abd0c882b37a rpc: handle more cases when identifying loopback #36100
- e142e01d570c rpc: include write failure reason in log (#37959)
- db2b774a1641 runtime: 'includeexpr' with non-Nv…
MariaSolOs pushed a commit to MariaSolOs/neovim that referenced this pull request Apr 15, 2026
Following is a list of commits (fixes/features only) in this release.
See `:help news` in Nvim for release notes.

BREAKING
--------------------------------------------------------------------------------
- 9acb52c8f386 diagnostic: remove deprecated diagnostic APIs (#33072)
- 79bfeecdb483 editor: insert-mode ctrl-r should work like paste #35477
- f72c13341afb lsp: pass entire entry to format function (#34166)
- fe23168e2bc1 lsp: reimplement `textDocument/codeLens` as decoration provider
- caa941935545 optwin.lua #36505
- c123b7245c43 path: support RFC3986 in path_with_url() #36564
- a57c7238f9c3 plugins: remove shellmenu #35815
- ade58885c478 provider: drop Python 3.7, 3.8 support #33088
- 59eadebe335f runtime: move "tohtml" to pack/dist/opt/ #34557
- 1d5b3b5b4c86 treesitter: apply `offset!` directive to all captures #34383
- fd1e019e90e7 treesitter: get_parser return nil on error #37276
- a728eb7af162 treesitter: remove "all" option of Query:iter_matches #33070
- 4369d7d9a780 ui: decouple ext_messages from message grid #27963

FEATURES
--------------------------------------------------------------------------------
- 78f4994627b7 ":restart +cmd [cmd]" #34788 #35045 #35223
- b40ca5a01c39 channel: support :detach, :restart on Windows #37977
- ce2742313207 ":wall ++p" creates parent dirs for each buf #36121
- f3c2eb49bab3 vim.Pos, vim.Range #36397
- 9044d64af94d has('terminfo')
- 70d797943956 render tuple types for API methods
- 5151f635ca29 serverlist({peer=true}) returns peer addresses #34806
- 7ba043f0f31c api: add "max_height" argument to nvim_win_text_height (#32835)
- e80d19142bdb api: add nvim_open_tabpage
- 6ebeb07c5614 api: experimental nvim__exec_lua_fast #35758
- 1e7406fa38ee api: nvim_cmd supports plus ("+cmd", "++opt") flags #30103
- 8b171852a925 api: nvim_echo can emit Progress messages/events #34846
- 612b2e785087 api: nvim_get_commands returns function fields #36415
- 4d04d0123d25 api: nvim_set_hl{update:boolean} #37546
- 4998b8d7b5f9 api: nvim_win_set_config accepts unchanged "noautocmd" #36463
- e2a0748cb28f api: nvim_win_set_config can move floatwin to another tabpage
- 094b297a3b33 api: nvim_win_set_config can move split to other tp as floatwin
- 88774965e5c0 api: relax contract, allow return-type void => non-void #34811
- 85d33514f999 api: set nvim_echo() kind for ext_messages (#33998)
- cf0f90fe14f5 async: add `vim._async`
- e1ffa8d33b5e build: HAVE_UNIBILIUM
- 1f004970f00b build: build.zig MVP: build and run functionaltests on linux
- dc6cf3add95a build: build.zig windows support
- e25b99c5b63c build: make build.zig run unittests
- c4501e98f2c3 build: make build.zig use luajit on main plattforms
- 8e0692cdc501 build: support full runtime distribution work
- 6d9031390cfc build.zig: add option to use system dependencies
- 5ec0c1ca07f9 build.zig: install parsers in install step
- 75fe54050081 checkhealth: emoji for OK/WARN/ERROR #33172
- 63323a9c81a8 checkhealth: trigger FileType event after showing report #33677
- 9722bd7b1b47 clipboard: g:clipboard="foo" forces the "foo" clipboard tool #33235
- 3a35fdc3471e clipboard: wayclip primary clipboard and correct mimetype (#33990)
- 6228acb74f94 cmdline: completion for :TOhtml #37045
- 3bdebfb87f11 defaults: don't enable treesitter query linter
- 41cac54325e9 defaults: exclude temp dirs from 'shada' oldfiles #37631
- 5d06eade2599 defaults: map "grt" to LSP type_definition #34642
- 06befe1e348b defaults: map "grx" to vim.lsp.codelens.run() #37689
- 249f305bbcdd defaults: per-platform 'guifont' default #37175
- d77d961b350d defaults: shelltemp=false #33012
- b10cb0296ae2 defaults: store spellfile in stdpath('data') #33048
- 4fae013a21a9 diagnostic: add `enabled` filter (#33981)
- 2f24ae8de471 diagnostic: add `format` option to `setloclist`/`setqflist` (#33977)
- c65817774d66 diagnostic: add `on_jump` callback option
- 7e09fedf43fa diagnostic: config.status  #36693
- caf780859197 diagnostic: custom status format function #36696
- 01666aae64d1 diagnostic: fromqflist({merge_lines}) #37416
- 410744210386 diagnostic: highlights in diagnostic.status() #36685
- 68e316e3f910 diagnostic: jump to related info location from `open_float` #34837
- 2767eac320ef diagnostics: stack DiagnosticUnnecessary,DiagnosticDeprecated highlights #36590
- a5b8cf145d1f diff: merge adjacent blocks using inline:word (#37085)
- 45b4bbac281b difftool: replace old "nvim -d" automatically #38057
- d5cfca5b768c docs: numbered listitems
- 4dabeff30822 editor: 'autowriteall' on SIGHUP/SIGQUIT #32843
- 55a0843b7cf7 editor: :source can run Lua codeblock / ts injection #36799
- f5829957f25c env: remove VIM_VERSION_NODOT macro #34890
- 551bb63d449f events: MarkSet event, aucmd_defer() #35793
- 23bf4c0531ac exrc: search in parent directories (#33889)
- 8d397fa458a9 exrc: stop searching in parent directories by unsetting 'exrc'
- dc67ba948eec exrc: user must view and explicitly run ":trust" #35069
- bffca6e26bf3 extmark: support end_col=-1 if strict=false #28169
- 302e59f734ec extui: assign 'filetype' to extui windows (#33924)
- f2988e05db45 extui: don't enter pager for routed message #34679
- 8defe1afb2d1 extui: route to "more" window if it is open (#34190)
- 3c9484b550eb extui: show dismissed message in cmdline (#34745)
- 94677318655e extui: support paging in the dialog window (#35310)
- 7526fb449de3 extui: use winborder for msg window #34859
- 8a626e5c4a52 float: 'statusline' in floating windows #36521
- 216cc893bf1b float: 'winborder' "bold" style #33189
- dcbe5bdd9674 ftplugin: treesitter default highlighting for markdown
- c1fa3c7c377b gen_help_html: generate helptags.json, helptag.html #35442
- 322a6d305d08 glob: new Glob implementation based on Peglob #33605
- 8c63d84be157 health: check `vim.ui.open()` tool #37569
- 13ed22505410 health: create a bug report #31842
- 043f5a291a7c health: show available queries for `treesitter` (#37005)
- 5a94edad70f9 health: summary in section heading #33388
- 47b0a718c3d9 help: gx opens help tag in web browser #35778
- 16f7440cc7b5 help: super K (":help!") guesses tag at cursor #36205
- cb8c9186e6ff highlight: support more SGR attributes #37901
- 0aabe7ae7680 inspect: update to a8ca312
- 8a0cbf04d6a6 iter: peek(), skip(predicate) for non-list iterators #37604
- 448f15ca396a json: pretty-format (indent) with vim.json.encode() #35424
- a897cc17a5ee json: vim.json.encode() sort_keys #35574
- abfe6c9ef7f4 logging: rename ".nvimlog" => "nvim.log" #37935
- 4eed85f9bd0e logs: show full paths in lsp logs (#33886)
- 7486c2f6aa6d lsp: <Plug> mapping for signature help cycling #34039
- 903335a6d50b lsp: `Client:stop()` defaults to `exit_timeout` #36783
- 6577d72d819d lsp: `root_markers` can control priority #33485
- d6a6eed4f3bc lsp: attach to buftype=help buffers #38412
- 63abb1a88f2c lsp: builtin :lsp command
- 7c9b865bdd1a lsp: deprecate `vim.lsp.stop_client` (#36459)
- b877aa34cf36 lsp: detach LSP clients when 'filetype' changes #33707
- 371aa1c5663c lsp: diagnostic related documents support
- 15ff45444325 lsp: display codelens as virtual lines, not virtual text #36469
- 63594ffa04cc lsp: do completionItem/resolve if completeopt=popup #32820
- c5c6ddba91b4 lsp: document method types (#35934)
- d08b26511154 lsp: enable document_color by default #35086
- 66339e06412d lsp: generate method to client capability map
- acfb9bc614ed lsp: graduate ClientConfig `exit_timeout` #36750
- 957093da0da9 lsp: handle deprecated document symbols (#34751)
- 492ea28612b2 lsp: handle disabled code actions (#34453)
- 8876413e2dcc lsp: highlighting the symbol being renamed (#37390)
- d26db4bfbfd6 lsp: improve signature help display #35190
- f99e3a8a2a3f lsp: incremental selection via "textDocument/selectionRange" #34011
- e82aef2e22a5 lsp: incremental-selection operator-pending mode #36575
- a4b2192690d7 lsp: lsp.enable() auto-escalates forced shutdown  #36458
- 4430c9a42477 lsp: migrate `document_color` to capability framework (#38344)
- e855a23c02a7 lsp: on_accept can return item to customize behavior #37092
- 729e0acd269f lsp: pass client ID in code action filter (#36046)
- 32f30c4874a0 lsp: pass resolved config to cmd() #34550
- 8ed68fda5014 lsp: semantic token range improvements #37451
- 23ddb2028bce lsp: semanticTokens/range #36705
- 3e8a4e10920d lsp: show color preview in completion items #32138
- 145548a24ae6 lsp: show snippet preview if completeopt=popup #32553
- 654303079baa lsp: skip invalid header lines #36402
- 4bc7bac88425 lsp: start/stop LSPs as necessary during vim.lsp.enable() #33702
- d75ffa59344b lsp: static registration support (#34371)
- cc518cf9bab0 lsp: support CompletionItem.labelDetails #38403
- 8f5bd569c541 lsp: support `documentColor` dynamic registration #33800
- 4745270bf124 lsp: support `textDocument/colorPresentation` (#34823)
- 9ff12396347b lsp: support `textDocument/documentColor`
- 05bd4398c507 lsp: support `textDocument/documentLink` (#37644)
- 0e70aa0e8687 lsp: support `textDocument/inlineCompletion`
- 77e3efecee4e lsp: support `textDocument/onTypeFormatting` (#34637)
- 03d6cf7aae4a lsp: support `version` in `textDocument/publishDiagnostics` #36754
- 965468fca1e7 lsp: support `workspace/codeLens/refresh`
- 835f11595fb0 lsp: support annotated text edits (#34508)
- 02cd56489650 lsp: support auto-force escalation in client stop (#36378)
- 02067a989207 lsp: support diagnostic refresh request
- 2031287e9329 lsp: support diagnostic related information (#34474)
- 0f3e3c87b738 lsp: support dynamic registration for diagnostics (#36841)
- c5167ffc185a lsp: support linked editing ranges #34388
- 76d213efbee8 lsp: support multiline semantic tokens #34458
- 9278f792c374 lsp: support range + full semantic token requests #37611
- 016335a7d09f lsp: support refreshing workspace diagnostics
- 7cc07e838332 lsp: support signature help noActiveParameterSupport #34838
- d7e0d46ffa8f lsp: use stricter types for methods
- c22b03c77166 lsp: user-specified sorting of lsp.completion multi-server results #36401
- e406c4efd620 lsp: vim.lsp.get_configs() #37237
- 6888f65be177 lsp: vim.lsp.inline_completion on_accept #35507
- 03d378fda68f lsp: vim.lsp.is_enabled() #33703
- 054eaf8493cb lsp: warn about unknown filetype #36910
- cb4559bc3204 lsp: workspace diagnostic support (#34262)
- 90d15227c55c lsp: workspace_required #31824
- a8edf6e4459d lsp.util: deprecate vim.lsp.util.stylize_markdown
- 98f8224c1948 lua: `vim.pos`/`vim.range`
- 0c46ea7d38dc lua: add `Iter:unique()` (#37592)
- cf9b36f3d97b lua: add vim.list.unique()
- 7499c9f9a754 lua: conversion between cursor positions
- 62b45b8fe4ce lua: conversion between extmark positions
- 9f5b309d824a lua: conversion between vim and lsp position/range
- 047a10bfde53 lua: function `behavior` for tbl_extend, tbl_deep_extend #33819
- 4d3a67cd6201 lua: replace `buffer` with `buf` in vim.keymap.set/del #38360
- 6e1745e96e3d lua: support vim.Range:has(vim.pos) #37879
- 7ed8cbd09580 lua: vim.list.bisect() #35108
- d8a88256794f lua: vim.wait() returns callback results #35588
- f68a5c40f01d messages: add "prev_cmd" argument to msg_history_show (#34779)
- fc2dee17368d messages: cleanup Lua error messages
- 0d13945bbb0e messages: drop hardcoded 'showmode' delay #38029
- 0741d2520dd7 messages: hl-StderrMsg, hl-StdoutMsg #33429
- 0ee5a4d48155 meta: vendor luv meta files
- 7cd5356a6f89 net: vim.net.request(), :edit [url] #34140
- f29b3b5d458b net: vim.net.request(outbuf) writes response to buffer #36164
- fb0dc825e9bb option: custom chars in 'winborder' #33772
- 28e31f5d3d16 options: default statusline expression #33036
- 5973328edaed options: per-buffer 'busy' status #34493
- 0412527a4078 outline: smaller indentation #34005
- 2728b4efe030 pack: add `[[` and `]]` mappings in confirmation buffer
- a9db6ec6fa12 pack: add `active` field to `PackChanged` event data
- d21b8c949ad7 pack: add built-in plugin manager `vim.pack`
- 4a637107d071 pack: add checkhealth
- 98e3a571ddf4 pack: add code actions in confirmation buffer
- d7db552394ea pack: add initial lockfile tracking
- 8c28507fcf6f pack: allow choosing update target in `update()`
- dd828690c747 pack: allow function `opts.load` in `add()`
- c9965491d01f pack: allow running `update()` without Internet connection
- acff86601efd pack: allow skip install confirmation in `add()`
- a41703d107da pack: confirm "Always" to install all plugins #35733
- c339b83a4ab9 pack: hint in confirmation buffer that plugin is not active
- dc8235c48c8b pack: prefer using revision from lockfile during install
- c522cb0e96da pack: support user-defined `data` in plugin spec #35360
- 2e533e364e2d pack: update `add()` to handle source change for installed plugin
- 069be911064d pack: use `nvim_echo{kind=progress}` to report progress #35625
- a20396153505 pack: use colored `nvim_echo` chunks to show progress report
- 7853cde29a08 pack: vim.pack.get() gets VCS info #35631
- fec02ae8e411 plugins: nvim.difftool can compare directories #35448
- 8a12a0146665 progress: better default format + history sync #35533
- 7b7e8cc72458 progress: disable cmdline progress msg via messagesopt' #36730
- 4b643d7068e8 progress: set Progress-event pattern to "source" #38495
- 24684f90eac2 progress: status api, 'statusline' integration #35428
- 286371b4d22a prompt: multiline prompt input #33371
- 8ab511bba524 prompt: plugins can update prompt during user input #37743
- a940b77cb25a prompt: prompt_appendbuf() appends to prompt buffer #37763
- 5ae41ddde350 prompt: prompt_getinput() gets current input #34491
- 5f8d4a248a97 provider: detect venv python via "pynvim-python" tool #35273
- f01419f3d563 runtime: accept predicates in take and skip (#34657)
- 8c81ed86786a runtime: revert cfilter, ccomplete to legacy Vim
- 9e1d3f487070 runtime: undotree #35627
- c9d846802030 search: increase `MAX_COUNT` to 999
- 6ba32713ada1 secure: allow 'path' parameter for trust action 'allow' (#38001)
- 71455173b482 shada: don't store jumplist if '0 in 'shada'
- 840cdb958969 shada: shada should not store nobuflisted buffers #21818
- 701258921ed1 snippet: highlight active tabstop (#35378)
- 4e1644d4d3cb spell: opt-out of confirm when downloading spellfiles #36836
- 1d40f677760d ssh: SSH configuration parser #35027
- cf874cee330d startup: provide v:argf for file arguments #35889
- 32aee065a898 startup: warn if NVIM_LOG_FILE is inaccessible #38070
- 4719b944437b statusline: option to specify stacking highlight groups #37153
- b79ff967ac91 statusline: vim.diagnostic.status() #33723
- 72a63346d866 stdlib: vim.fs.ext() returns file extension #36997
- 6b4ec2264e1d stdlib: vim.json.decode() can allow comments #37795
- eac2f0443e03 tag: respect jumpoptions=view when popping tagstack (#37021)
- a94568644489 term: increase max scrollback to 1000000
- 6bc0b8ae870c terminal: detect suspended PTY process (#37845)
- 03377b955233 terminal: include sequence terminator in TermRequest event (#37152)
- 71f3a9c5900f terminal: parse current buffer contents in nvim_open_term() (#33720)
- 2368a9edbd6c terminal: support SGR dim, overline attributes #37997
- c8693051a8b6 terminal: surface exit code via virttext + nvim_get_chan_info #37987
- b38173e49333 terminal: synchronized output (mode 2026) #38284
- 72d3a57f270f treesitter: incremental selection
- 586b1b2d9bcf tui: add nvim_ui_send (#35406)
- 981ea41abbec tui: ghostty builtin terminfo #36963
- 8eb096453788 tui: native progress bars for Progress events #35973
- de87ceb3beaa tui: support APC queries in TermResponse (#34426)
- 977e91b424f4 tui: use DA1 response to determine OSC 52 support
- abb40ecedd92 ui: "append" parameter for "msg_show" UI events
- fafc329bbd1e ui: 'pumborder' (popup menu border) #25541
- 649bb372f665 ui: :connect command #34586
- 7ba0f623d75a ui: avoid setting 'cmdheight' with vim.ui_attach()
- 2b4c1127ad1c ui: emit "msg_clear" event after clearing the screen (#34035)
- 2c1c0b7af50b ui: ext_cmdline/messages for the TUI #27855
- f29856d03444 ui: include compositor info with multigrid
- 9bbbeb60e355 ui: no delay for errors with ext_messages (#33693)
- 07d0da64ed51 ui: overlay scrollbar on 'pumborder' #36273
- a2b92a5efbb4 ui: show "empty" cursor behind unfocused floatwin #37624
- 97549ad7cf23 ui: specify whether msg_show event comes from typed command
- 8ae9a44d3841 ui: support grid=0 in nvim_input_mouse #32535
- 08c484f2ca4b ui: use builtin completion popupmenu with ext_cmdline (#31269)
- fbac2e5edc8b ui2: configure maximum window heights #38392
- 32e0d05d53f4 ui2: configure targets per message kind #38091
- 9fc985bc9868 ui2: more predictable routing #35028
- db2a54996ecf ui2: replace message by its ID #37672
- e268760e46ae ui2: show active paging keys in dialog float title #37919
- 875212c5b3b8 ui2: support routing "typed_cmd" trigger to target
- 81d2d88f70e0 undotree: set 'filetype' #36091
- 9595f074255c ux: sexy intro #38378
- 51961625402b version: support multiple Vim versions
- 361671870e14 vim-patch.sh: -M lists all ported patches
- 7fe02126f948 vim-patch.sh: add n flag to list possible N/A patches (#36431)
- 2f0fbdaa480c vim.fs: root() can specify "equal priority" #34276
- eae2d3b145c7 vim.hl: allow multiple timed highlights simultaneously #33283
- ea124068f246 vim.pack: lockfile support #35827
- 773075b2bce8 vim.version: add `vim.version.intersect()`
- aeb8bca12ddf vim.version: make `tostring()` return human-readable version range
- e42050f4aed5 vimscript: log function name in "fast" message #32616
- 6edae880528b vimscript: scripts can detect 'android', 'termux' #38218

FIXES
--------------------------------------------------------------------------------
- b233f71b1bd6 :ball w_locked check, reset b_nwindows in free_all_mem() #38484
- f2e60d000ed3 `fn.exists()` typos (#34390)
- 379c37fa0b1b bug in stylize_markdown
- 2c9d21f722f9 cursor shape don't resume after `:append`
- 7fdf9f739923 define `vim.mpack`
- bc4bddbb214f don't use logical diagnostic position in `get_prev` and `get_next` #35282
- 3567b7d75175 ignore Nvim local config #37805
- fd45bc8caba2 lsp.enable() don't work correctly inside FileType event #37538
- 0694ca8822b5 map wincmd instead of remap #34635
- eeba0dc2ed4e memory leak from double buffer initialization in read_stdin #35413
- dfa5d79d05d8 misc typos #37471
- cd4c98fded94 nvim_open_tabpage cleanup, fixes, more tests
- 874e2149931f remove exec permission from .gitattributes #33140
- bcc9242bc75e remove quotes around `nil` deprecation alternatives (#36047)
- 7b99e1f0c307 remove typo from buffer-local LSP docs (#35841)
- e991133058f2 remove unnecessary `nvim -l` from `gen` command #33676
- 92b2a2677239 resolve all remaining LuaLS warnings in `src/`
- 431004dda2bb screenchar()/screenstring() with hidden floating windows #35560
- 1999c4cdc11c screenchar()/screenstring() with multigrid #32494
- 9204b7541d27 silence LuaLS's `no-unknown` warnings in `src/`
- 020d5e0f7e7f stale lines("w$") after nvim_win_set_height when splitkeep=screen #36056
- 2e68e9c051dc temporarily disable 0.12 deprecation tests
- 3b6084ddf4f0 type fixes
- 38aac21083a5 type of nvim_echo
- d21e2463fd98 update deps hash for zig 0.14.0
- fa8e4e65caeb update lua types for commands
- 9170178ee5af use correct window dimension for range estimation
- 62ba6e8a76f3 use nvim namespace convention #34010
- 28157738e3de vim.lsp.omnifunc should not throw away other items #35346
- 71a22e20ad15 vim.ui_attach handles messages during `-l`/`--headless` #36884
- 9c5ade9212d8 wait() checks condition twice on each interval (#37837)
- 9287c73df9f5 :connect: don't use freed memory (#38512)
- 7cd22e916bbb :connect: formalize connect event #38543
- 49d7f694a850 :ls: check for finished terminal properly (#37303)
- 6af1b7e5e8da :print: don't use schar_from_ascii() for illegal byte (#34046)
- 5cfbc35aa838 api: add missing nargs field to user command Lua callbacks #34210
- eeacd7bd718a api: adjust fix for reconfiguring float "relative" (#34287)
- 3cb462a9608f api: autocmds mess up nvim_get_option_value's dummy buffer
- 612cd99a0017 api: buffer overflow in nvim_buf_get_extmarks overlap #37184
- 006361fc6b98 api: buffer updates in quickfix buffer #31105
- 76d0206342a2 api: count parameter in nvim_parse_cmd, nvim_cmd #34253
- c553008e74e5 api: crash when moving curwin to other tabpage #35679
- b7070778b98a api: cterm type in highlight keyset #37802
- 853eea859fd3 api: disallow moving window between tabpages in more cases
- 0bef1c88f362 api: do not allow opening float to closing buffer
- ef084b5c225c api: don't config split as floatwin relative to itself
- 4362132b101a api: don't re-apply minimal style if unchanged #38152
- 3165e94a64b0 api: ensure win_get_config() "border" is reciprocal (#34322)
- c7c3f9fc9c3a api: fix crash in command preview with % #35228
- 7b9512e613e1 api: fix not capturing output in cmdline mode (#35322)
- d788864cdea7 api: ignore split_disallowed when opening a float
- 3115e3d0d11e api: improve external window validation
- d707ccf98808 api: inconsistent scrolling when deleting before topline (#36301)
- 137d5ab01dfa api: merge split window config only on success
- 22df6492101f api: nvim_create_user_command addr option should allow ranges #35077
- 6f12663de56b api: nvim_get_option_value FileType autocmd handling #37414
- 7e2e11634369 api: nvim_get_option_value dummy buffer crashes
- 0c1ed63c05fe api: nvim_open_tabpage "after" like :[count]tab
- 97b064c9ac84 api: nvim_open_tabpage positional "enter"
- d7472c061759 api: nvim_open_win default to half-size for splits (#36088)
- 19f5f05ac2b9 api: nvim_open_win respects requested split window size (#35601)
- 652c3e76c712 api: nvim_parse_cmd "range" when ea.addr_count=0 #33536
- 72b0bfa1fb7e api: nvim_parse_cmd handle nextcmd for commands without EX_TRLBAR (#36055)
- f3ec657ebc02 api: nvim_parse_cmd on range-only, modifier-only commands #36665
- c7f38e3bc8fb api: nvim_parse_cmd parses :map incorrectly #34068
- 63cbc95d4517 api: nvim_set_current_win doesn't reset Visual mode (#37340)
- 9383a096eb7e api: nvim_set_hl boolean false corrupts underline styles (#38504)
- d19dc6339de7 api: nvim_set_hl crashes when url= key is passed
- ec18ebcb417b api: nvim_set_keymap() throws error even in pcall() #33228
- 7da4d6abe249 api: on_bytes gets stale data on :substitute #36487
- 2211953266f7 api: on_detach consistently before buf_freeall autocmds
- a2b97209395e api: open_win leak from naughty autocommands
- 5226801be264 api: parse_expression crash with ident and curly
- a5e5ec8910ea api: parse_expression crash with unopened ] and node
- d523750de0b3 api: populate lhsrawalt in nvim_get_keymap response
- 88dc44260f83 api: preserve WinConfig style when converting float to split #37264
- 963308439a5d api: reconfiguring float "relative" does not clear "win" (#34271)
- e13e85051751 api: redraw after setting minimal style
- 7be4ae796faa api: relax config validation for "win"
- 1901832f26fa api: return "style" in nvim_win_get_config() #38122
- 15d57ab0ba5e api: single-line visual block insert triggers extra on_lines #35098
- f5d03ec93089 api: style=minimal not applied immediately for unmoved split
- 0ee8323f2b5c api: unnecessary errors when not moving split
- af82f36108ce api: update topline when flushing with nvim__redraw() (#34346)
- 99529577cc9f api: use E226 instead of E227 for duplicate abbreviation (#33159)
- 0d73ec583465 api: use original LHS in keymap error message #33135
- 680d25e5b3c1 api: use standard error messages
- 1ec74fa7b1ba api: win_config `border` type #38030
- c924c2a7b316 api: win_config_float_tp grid removal, redraw
- da39966a3a0a api: win_set_config error message for splitting from a float #35650
- 65170e8dad90 api: wrong return value with reverse range + overlap #32956
- 285c04e2d0e3 api,lsp: call on_detach before wiping out the buffer #35355
- acecdbff1f57 api,lua: handle converting NULL funcref/partial (#37060)
- 4daa8eb5abca appimage: wrong $ARCH used by linuxdeploy #36712
- 5871d2677909 autocmd: 'cmdheight' OptionSet with valid window grids (#34619)
- 19379d125555 autocmd: deferred TermResponse lacks "data", may not fire (#37778)
- 05a83265f9a4 autocmd: fire TabClosed after freeing tab page
- f36dd7557a98 autocmd: heap UAF with :bwipe in Syntax autocmd
- 6d2330f50d07 autocmd: parsing of comma-separated buflocal patterns
- d945a93d69c9 autocmd: potential TabClosed UAF, always set abuf
- 1cde71233fcf autocmd: skip empty comma-separated patterns properly
- f9ef1a4cab74 buffer: defer w_buffer clearing to prevent dict watcher crash #36748
- 14d65dae91b1 buffer: don't allow changedtick watcher to delete buffer (#36764)
- 23aa4853b3fd buffer: don't reuse 1-line terminal buffer (#37261)
- 2700f6642aef buffer: switching buffer should respect jumpoptions+=view (#36969)
- fa24df32641c bufwrite.c: handle invalid byte sequences #37363
- c26f989b2fe1 build: also check os_win sources with uncrustify in CI
- 8069df266150 build: build.zig: use luajit for windows
- 576e8f62c262 build: disable problematic marktree assert in RelWithDebInfo builds
- 88b45614e945 build: gen_help_html fails #36359
- f0d981544b38 build: glibc 2.43 happened
- e69beb9b1aba build: invalid help tags cause reports to fail #36356
- 3268f51d202f build: musl libc build.zig
- f98b5ee61921 build: remove .tar.gz workaround for bug fixed in zig 0.15.2
- a2b0be19bf8f build: remove deprecated aliases in build.zig removed for zig 0.15
- b4db223d33e7 build: treesitter parsers are not ReleaseSafe
- 921f8b0df728 build: use correct cmake expression for $<CONFIG>
- ec8a0c73402b build: workaround errors in zig build due to stale cache
- 6741c134e17f build: zig build can has git version
- 41bc3020c46f build.zig: format build.zig to keep lines under 100 chars
- 565cfa04eb00 build.zig: replace slashes in filepaths #37111
- 64ce5382bd53 channel: crash on failed sockconnect() (#37811)
- 886efcb8535e channel: possible hang after connecting with TCP times out (#37813)
- 4399250e9063 channel: unreference list after callback finishes (#37358)
- 5f9f5bc04d0b checkhealth: check g:loaded_xx_provider for all providers #33168
- e87d2ae3836c checkhealth: check outdated pynvim version properly #33175
- 78d2e0b43e7a checkhealth: don't override user "q" keymap #33132
- 16fbde83c46f checkhealth: don't wrap command in cmd.exe (#38158)
- bd45e2be634b checkhealth: wrong ABI version for treesitter parsers #35327
- ad22d0ace996 cjson: fix `strbuf_set_length` incorrectness #35565
- f5cbf1164421 client: avoid :connect race with server detach
- 2483d5ad8af7 clint.py: replace deprecated codecs.open #36593
- 41199c45d6bb clipboard: avoid using stale register width (#36178)
- 95dfb063daa7 clipboard: correct blockwise register width computation (#35038)
- ac12dc49cc35 clipboard: enable cache for function providers #34470
- 310d01d8faa5 clipboard: tmux clipboard data may be stale #36787
- d00f680c0d2c clipboard: use tmux only in a tmux session #36407
- 8aacce90b4b6 cmake: linker flags, doc generation for cross-compilation #38215
- 9763834170dd cmake: use host nlua0 binary when cross-compiling #38089
- 69cae6259e91 cmd: :update does not write new, unmodified buffer #35929
- fcf752476a33 cmd: :update writes new file buffers only for real files #35939
- a5c55d200b18 cmd: bar "|" not allowed after :fclose #34613
- 5de2ec76a3b0 cmdline: :checkhealth completion with multiple args (#35060)
- f4ee0ab2f1a1 cmdline: avoid empty @: register after :<CR> (#33126)
- fde1c07891e0 cmdline: cmdline_block events for :lua debug.debug() #38171
- 0015a105ca7c cmdline: do not move UI cursor when entering cmdline #33729
- 236d831d77d6 cmdline: don't treat c_CTRL-D as wildmenu (#36067)
- 95ab723995f1 cmdline: empty ext_cmdline block events for :<CR> #33118
- 7f2298ad32a6 cmdline: fix inconsistent behavior with ext_popupmenu (#35688)
- 677446c70f8c cmdline: make sure pum is removed on leave (#36608)
- dc05598d0201 cmdline: set search cursor after ui_flush() (#34418)
- 5977bdba0566 cmdline: trigger CmdlineChanged after command preview (#35254)
- efd0fa55c8b1 cmdline: validate 'incsearch' cursor for "cmdline_show" redraw (#34630)
- 28ff4deda7a0 colorscheme: adjust `StatusLine[NC]` for diagnostics #36719
- 4a706a709282 column: don't count signs on lines beyond eob #33410
- b40e658717b3 column: missing redraw with virt_lines_leftcol (#34650)
- 8f78591f9ac0 column: wrong alignment and highlight with empty 'display' (#35495)
- 69419f8b3e76 completion: CompleteDone reason="discard" when candidate text remains #38169
- 51caf0a3af59 completion: avoid freeing uninitialized value (#33459)
- b25838217697 completion: complete drive-letter filepath on Windows #36353
- 634f6424aaac completion: set 'wrap' and scrolloff=0 in preview window (#37327)
- 3f10bb87efad completion: wrong CompleteDone reason for auto-inserted sole match #38280
- e1b3ca66291a compositor: clear old position with last known dimensions #38229
- 6f632a8615e0 compositor: don't blend uninitialized background cells #34364
- 150490d365a3 conceal: assert tripped during startup #36136
- ad8bce667496 conceal: check for concealed lines on invalid row (#36084)
- ab72799841c8 coverity/530026,530028: free resources on early exit in nlua_exec_file #33502
- 079159410143 coverity/530033: free lp->sl_info to fix resource leak #36198
- 0ed5e00077dc coverity/532324: free skip_until to prevent leak #36109
- 3e303231350e coverity/554963: preallocate msg.items to avoid FORWARD_NULL #34484
- 501a21f33390 coverity/637363: out-of-bounds write #37878
- c5b8ed870b8e coverity/644326: NULL ptr deref in socket_address_is_tcp #38010
- 20b2dd39ccfe decor: clamp last column by decor provider range
- ca16b54c866b decor: enable decoration provider in on_start #33337
- 6adf48b66d52 decor: extmark highlight not applied (#33858)
- 9492df027d07 defaults: 'guifont' "monospace" fallback, trim spaces #37930
- 57b4fb5c5318 defaults: enable :terminal [[,]] motion in operator-pending mode #33217
- 3ebde5ea147c defaults: keywordprg=:help on Windows #33336
- 9567fb050795 defaults: silent `gx` if no `textDocument/documentLink` support #37969
- dc6fc11b8753 defaults: start exrc search from parent directory
- cb247e06f0ba defaults: visual-mode [[,]] for :terminal shell prompts #33201
- 1c96b72dfa41 deps: make script/bump_deps.lua update build.zig.zon versions in sync
- 6e12ef4a7b4c desktop: cannot open filename with spaces using OS file manager #33161
- 2e0158650a3b diagnostic: accept multiple namespace in `open_float()` (#34073)
- c681336e3c35 diagnostic: accept multiple namespaces when setting loclist/qflist (#33982)
- d567f899efb7 diagnostic: allow virtual_{lines,text} cursor exclusivity #33517
- 3ac76977bca5 diagnostic: check for extmark in get_logical_pos #37127
- 68eece8b849d diagnostic: check if the buffer is loaded #35125
- dbe17da1206d diagnostic: deprecate `float` in `vim.diagnostic.Opts.Jump` (#34037)
- efa6d91132c7 diagnostic: display 1-based related information line/col numbers (#37093)
- 2b21c9c23f88 diagnostic: ensure autocmd always is always sent diagnostics
- e34e2289c228 diagnostic: fix flaky error
- 583308f5991c diagnostic: handle stale diagnostic extmark ids #38060
- 88a72efb465c diagnostic: open_float() handles config.float function #31577
- 09266830bdf4 diagnostic: show diagnostics on buffer load #35866
- 9833f0da5f35 diagnostic: unstable sorting by severity #37154
- f7b573f80a33 diagnostics: assert adjusted diagnostic position #37210
- 7a051a4c3894 diagnostics: avoid jumping to diagnostics in deleted ranges #35088
- 9641ad9369f6 diagnostics: diagnostic just after EOL is not highlighted #34085
- e4a100a1e1c0 diagnostics: extend conversion support from/to quickfix format (#34006)
- 19efabafc568 diagnostics: fixed virtual_text cursormoved autocmd error (#34017)
- 0a113013fb85 diagnostics: position diagnostics using extmarks #34014
- a1bc5d0ae6a9 diagnostics: showing stale diagnostics in handlers #35890
- 3594c213a7fe diagnostics: validate opts.signs #34565
- 60d0b7d0c3f7 diff: fix incorrect item size of dout_ga (#34338)
- 0b8a9bde0eee diff: set default diff flags properly (#35450)
- aaec3e5b0dab difftool: add check for window number when cleaning up layout #36161
- c1e60f36f3fb difftool: don't reset quickfix list when closing quickfix window #38088
- c9b74f8b7e38 difftool: ensure split layout, use systemlist #36145
- c6113da5a999 difftool: fully resolve symlinks when comparing paths #36147
- a88c7962a82f difftool: handle "no differences found" #36671
- d59064462096 difftool: silence :only command in setup_layout #36168
- 97a625944252 display: adjust setting winline info for concealed lines (#33717)
- cb2ca54331cd display: cursor moves when searching with "n", "*" #29446
- ce0c0c31a089 display: scroll logic does not take into account concealed topline (#33054)
- 5b1561bb717e display: scroll redrawing doesn't account for virt_lines above fold #33374
- 7e8b7bba21cf display: wrong cursor column with 'concealcursor' = "n" and virt_text (#33218)
- 5582005ac766 docs: add `--clean` arg to LSP bug report (#36530)
- e74753a221f8 docs: callback annotation for `vim.ui.input` #34507
- 4a910a2a4ed6 docs: dev.txt is "new layout"
- 9da316fcc45c docs: force blank line after numbered list items #35950
- 4397c4b117d1 docs: improve adjacent list items
- 8a76129d9f61 docs: include `?` in list items #35945
- b2722181b001 edit: clear showcmd after clearing last put char (#34517)
- 9a864d0a3c91 edit: handle cindent properly with completion (#36711)
- 3647b821ea69 editor: respect [+cmd] when executing :drop #33339
- 966b1da1831e editorconfig: a custom property is treated as a section (#34445)
- b618511ef906 editorconfig: use 4 spaces indentation for zig files
- fd973c0a4ec0 env.c: drop envmap, free os_getenv() result #32683
- df9e4a037ad6 eval: 0 should mean current tabpage in gettabvar() (#36891)
- 8156eece2413 eval: fix crash with :breakadd expr when calling user func
- 981d4ba45ed1 eval: winnr('$') counts non-current hidden/unfocusable windows #34207
- 1e1619de830e eval: winnrs of unfocusable/hidden windows #35474
- 57c6b61cf2d1 event-loop: don't call uv_stop() when loop isn't running (#37984)
- 1dbede5b932f events: avoid superfluous CursorMovedI on first autocmd (#33588)
- 0b61bc898230 events: crash on SIGTSTP (Ctrl-Z) #33258
- 0a0c349b6fee events: crash on WinScrolled #35995
- 29494f042c28 ex: error handling for `:lsp` #37061
- 2f352217742c excmd: :trust executed even when inside false condition (#36032)
- c1f142322b20 excmd: correct :connect abbreviation
- 781ea5b41b2d exit: stop listening before closing channels (#38480)
- ed9abb1851e3 exrc: ensure consistent 'exrc' loading sequence #35148
- f7c939fa7af9 exrc: exrc knows its own location (#34638)
- a39334767321 extmark: adjust invalidate range by one for deleted lines #37897
- 589232c0e065 extmark: wrong eol_right_align width calculation (#37034)
- 6dee1672ccc9 extui: "box" window width calculated on last line (#33881)
- ff95d7ff9a04 extui: adjust "more" window routing (#34251)
- cc78f882012b extui: adjust which messages are sent to "more" window
- 9784bc134624 extui: append consecutive :echon messages
- e512efe3696b extui: attempt to perform arithmetic on field 'last_emsg' (#35047)
- 70eb4164591e extui: better message highlighting after carriage return (#34034)
- 9e968635efc4 extui: check if buffers/windows exist before deleting (#34886)
- 3c7c824bdc08 extui: check option values after VimEnter (#33768)
- 5046ef4c8f8d extui: clear cmdline buffer for first message (#34490)
- db702782e016 extui: close cmdwin to enter "more" window (#33860)
- c916bdf32986 extui: close message window with `q`
- 39a5b7f239fb extui: cmdline visibility, cmdheight cursor position (#33774)
- 5e4700152b79 extui: copy window config to new tabpage (#34308)
- 8c6ea76ebcdf extui: disable cmdline highlighter when showing a message (#34887)
- 9efdd4fe98e7 extui: drop "more" window that is no longer floating #33861
- be5a4851eaa5 extui: ensure temporary cmdline config is not restored #35301
- 1256daeead27 extui: ensure windows are valid in scheduled on_key (#35106)
- cd7cf4bd16e7 extui: error on :call input('') (#35515)
- 4d56dc43c0ea extui: handle carriage return in messages
- f1295fe76f49 extui: hide inactive "more" window (#33831)
- 3828856233d9 extui: incorrect cmdline cursor position (#34201)
- a59b052857ca extui: map wincmd instead of remapped key (#34151)
- d4ecfc423495 extui: message may overwrite active cmdline #33846
- 76f76fb08391 extui: only append messages exceeding 'cmdheight' to "more"
- 33b0a004eb20 extui: properly setup "more" window for changed buffer
- 5e83d0f5ad4a extui: reposition "more" window after entering cmdwin
- 7077c5929529 extui: reset message state after "search_cmd" message (#34119)
- 7e787f6a4f16 extui: route interactive messages to more-window (#33885)
- b2a5105c66e1 extui: search highlighting in extui "more" pager #33792
- d0aedd36dfe0 extui: set 'modifiable', 'noswapfile' for buffers (#34582)
- 56709ca1689a extui: setup buffers after activating `eventignorewin` (#35915)
- 8e8f4523c687 extui: translate <Tab> in cmdline text (#34055)
- cb036cae5fb1 extui: use visible to determine active "more" (#34327)
- a96665cf4867 extui: using tracked message column in cleared buffer (#34154)
- c973c7ae6f56 extui: write each message chunk pattern separately (#34188)
- 8af28ab9cb9a filetype: error when `vim.filetype.match{buf=fn.bufadd('a.sh')}` #34155
- 7500f76e6131 filetype: fix typo (#37286)
- 095b9f98f3e3 filetype: handle invalid `bufnr` in _getlines(), _getline() #36272
- e2cb67570522 filetype: move fallback logic to vim.filetype.match() #30141
- d131d67e67a8 float: clamp floating window above cmdline #37899
- 3ccba4cdffb8 float: crash from nasty :fclose autocmds (#36134)
- d4f2b9050dc6 float: cursor visible in "hidden" floating window #30866
- 66e4784f5ace float: ensure relative window grid is allocated (#34459)
- eb3201c77210 float: null pointer dereference, redundant call #36727
- 3b6e8e484edf float: prevent truncation of title that fits exactly #36880
- 31c814a0ed0e float: respect statusline=3, don't inherit local 'statusline' #36716
- 5943a81fe79a float: style=minimal leaks into normal windows #25185
- cb171ee7cba0 float: tail truncate long title #28387
- 9269a1da355b floatwin: handle viewport width properly at end of window (#35490)
- 66dddd8b515a folds: adjust filler text drawing for transparent folds
- 1d9990daac37 folds: avoid unnecessary loop with horizontal scrolling (#33932)
- d73cfefed5e4 folds: error when deleting lines at end of buffer #35396
- 19715e6e8a71 fs: expand drive-relative paths on Windows #37084
- d22fcf291746 gO: use non-breaking space #34197
- ac6cf5b03ba0 gen: alias /doc/user/helptag.html to /doc/user/helptag/ #38156
- 805dd5d04780 gen: prevent "make doc" failure due to temporary files
- 67fede0fc94b gen_help_html: ASCII art rendering in docs #35262
- a49bf5e1d3c8 gen_help_html: parser override
- 4b02d1f6f6e2 gen_vimdoc: unnecessary assert for non-source files
- d2ca90d87e32 glob: handle numeric literals in pattern matching (#37257)
- 3991f146215b glob: handling commas in letter pattern #34170
- aeebc5185171 grid: assert crash during extreme resize layouts #36847
- 1ad9cdd4036b grid: check allocated grid size when suspicious scrolling
- 856391bc7fa9 health: "q" keymap not set when health.style=float #37007
- a33284c2c068 health: accept TERM=tmux-direct #35511
- c28113dd9d09 health: add back `vim.cmd.redraw()` call (#37576)
- 3fb53abe2a7f health: attempt to concatenate table value #36369
- 8a901a52e1f0 health: avoid silent failure
- 2422fbdd5f90 health: bad format() call #34904
- 672f6e60c165 health: bug-report formatting, version check #36809
- 61678811d8d3 health: check more "old" files #38028
- 31cb37687a03 health: check shell performance using vim.fn.system() #36980
- 16c8a908ef67 health: check stable release for non-nightly build #36715
- d927a87ed607 health: checkhealth float opens extra empty buffer #33648
- f19653e3706d health: emit Progress message #37123
- cfe10b4014ec health: errors in :checkhealth with pyenv-virtualenv #35865
- bd37348939a7 health: expecting nonexistent "inotifywait" function #33312
- 28b7c2df5217 health: floating window closes when opening TOC (gO) #34794
- e4ce0c7270e5 health: git check and autocmd clean #36713
- 6152bcf42ef0 health: hard fail on invalid "python-*" bin #35382
- 6942dec9b29d health: highlight group conflicts with help #34616
- bfc7bae421fe health: improve version check for nightly builds #38147
- 07f048a8d764 health: message should mention "vim.provider" #33095
- e9d03b92b67c health: redraw after emitting progress message #37567
- 06e4b159ed08 health: show full curl output
- f311c96973a5 health: update advice for Python #35564
- ae93639ec440 health: use FileType autocmd for bug report winbar #37486
- 1c52e90cd57c help: :help can focus unfocusable/hide window #34442
- 4a4de7304306 help: better align local-additions #38097
- 25322a3a3b22 help: only set url for help files in $VIMRUNTIME #36165
- e49a59259507 help: retry once if async parsing fails #36592
- 62d3a2110df4 help: wrong tag url in third-party help docs #36115
- 625c59fe5fc2 highlight: Normal-linked groups shouldn't override CursorLine #35026
- 64966ba52cea highlight: allow ephemeral extmarks past final newline #35888
- e23c083d133b highlight: avoid null deref, misc issues #38164
- 444c195edb33 highlight: blend underline check and use struct key for attr cache
- d5a8c9d76667 highlight: correct change detection in do_highlight for gui colors
- e3c36f31e3a0 highlight: ensure extmark range is within buffer bounds #35928
- a7177e34c318 highlight: link HLF_8 to something more prominent #34910
- 3af43cffa028 highlight: no match highlight during :substitute prompt #33262
- 336b46a87945 highlight: preserve background transparency in 'winblend' #34302
- 5803994a1c4a highlight: preserve bg transparency with winblend=100 #34825
- bd12aef78476 highlight: refresh highlight attrs before message output #25737
- 6af89580555f highlight: respect 'winhighlight' in CursorLine Normal check #36927
- f8d59cfab958 highlight: setting 'winhl' doesn't work with global ns (#37868)
- 64753b5c37cf highlight: spurious underline in 'winblend' floating window #34614
- a26cdcb20e68 inccommand: skip input() during preview #35272
- f348c0ebba2c incsearch: include compsing characters with Ctrl-L
- a04c73cc17f5 input: discard following keys when discarding <Cmd>/K_LUA (#36498)
- 592582ba4886 input: don't exit on EOF when peeking for input with -es (#36948)
- 29c8dabd414c insexpand: update showmode when updating the screen (#34466)
- e0308dc14730 install: only install "tee" on Windows #36629
- cd7122125098 intro: crash on small screen #38397
- 4fe51dfdae84 iter: ArrayIter:last returns nil when filtered to empty #34697
- eaa9aca1308b jobs: jobstart(term=true) accepts width/height #33904
- 11e82c108da6 l10n: update Ukrainian translations #37654
- 16c133439958 langmap: assert failure on mapping to char >= 256 (#37291)
- 14fe37056436 logging: don't overwrite NameBuff (#38004)
- ea5007b37fbe lps: separate namespaces for pull/push diagnostics #37938
- bf4710d8c398 lsp: "attempt to index nil config" #36189
- f068386c9f70 lsp: "bold" border for vim.lsp.buf.hover #33395
- a9b8a8dc6c1f lsp: _cancel_all_requests() tries to cancel completed requests #34105
- 97ab24b9c7d9 lsp: _get_workspace_folders does not handle root_dir() function #36071
- a03ab03a10ad lsp: `:lsp restart` restarts on client exit #37125
- 6005fcf6719b lsp: `opts.wrap` always `true`
- 4b0700c618bf lsp: `vim.Range` check in `document_color.color_presentation()` (#38374)
- d6fffe6b321e lsp: access correct client capability path in `supports_registration`
- 3eaa6c5a6659 lsp: add `RequestFailed` error code constant #34645
- c3589753a0e1 lsp: add `vim.deprecate` call to `vim.lsp.with` (#37960)
- bd41f6eb6c66 lsp: add deprecation comment to `gen_lsp` (#36185)
- 9f99bf48ea8d lsp: add missing argument validations (#34519)
- 378435968f64 lsp: adjust codelens position based on the server-provided range
- 35756022cbcd lsp: advertise supported fold kinds (#34461)
- 4db58f78b49f lsp: announce `normalizesLineEndings` capability (#34175)
- bac133e4b6ea lsp: announce diagnostic tag support (#34436)
- fed9069b8da1 lsp: avoid `foldclose()` after current window-buffer changed #33901
- 2debe2f30a45 lsp: avoid automatic request after leaving insert mode (#35767)
- fde0b487fb61 lsp: avoid re-enabling `document_color` on `registerCapability` (#35774)
- 6f733f4a9bf0 lsp: avoid scheduling client deletion before LspNotify #37685
- 2ee896201c46 lsp: better handling of "*" configs
- 0501c5fd0959 lsp: call `on_list` before reading `loclist` #37645
- 653871da1b55 lsp: check `nvim.lsp.enable` before `doautoall` #36518
- e94d8f03b959 lsp: check for lens range in `vim.lsp.codelens.run()` (#35294)
- 1bc85d29c135 lsp: check for non-nil buffer state on reset (#36519)
- bbfcde3ab20e lsp: check if buffer is valid in scheduled client:on_attach() #35672
- c789d799663d lsp: check if buffer is valid when resolving code lenses (#35092)
- 0862c1036a8e lsp: check if client is stopping before reuse #33796
- 42f244bf18a1 lsp: check whether buffer is valid when scheduled #35461
- 0dc900d74443 lsp: clear document_color autocmds #34573
- ace254c9fff1 lsp: close floating preview window correctly #34946
- a702534c501f lsp: close timer when client exits (#36795)
- b4ba27c238ec lsp: codelens extmark line out of range (#35070)
- f2d0b06ecbb5 lsp: completion word includes leading space from label #38435
- 3342aead1df9 lsp: consistent use of `vim.notify`/logging with unsupported methods
- 55e3a75217d9 lsp: convert the encoded position to line byte (#34824)
- 8165427b4d92 lsp: correct capability checks for dynamic registration (#36932)
- 82d0883c2d96 lsp: correct diagnostic data support and related info capabilities (#34454)
- 2822c38f2e73 lsp: correct iteration through attached buffers (#36517)
- 213360c389de lsp: custom 'winborder' in make_floating_popup_options() #34868
- 342974773c53 lsp: cycling signatures with the default `config.focusable`
- 40aef0d02e1a lsp: decode 'null' in server responses as vim.NIL  #34849
- b67eff38fe19 lsp: deduplicate completion items #36166
- e62dd13f83a2 lsp: default ClientConfig.exit_timeout to false #36811
- 70ea589d79f6 lsp: deprecate `vim.lsp.get_buffers_by_client_id` (#36449)
- b938638d2d06 lsp: deprecate `vim.lsp.protocol.Methods` (#35998)
- f7802dd5d572 lsp: deprecate vim.lsp.set_log_level, vim.lsp.get_log_path #35274
- 83156974497d lsp: detect if Client:request resolved synchronously #33624
- 0cc4f53b4066 lsp: do not clear the codelens on the last line #38226
- 18e8839c804e lsp: don't create an `'LspAttach'` `document_color` autocommand
- 90abd2613d7f lsp: don't empty server start-boundary by next client response #37665
- 0472119fe61a lsp: don't immediately force shutdown when using a timeout (#36455)
- c2c5a0297e00 lsp: don't overlay insertion-style inline completions (#36477)
- afebbd0f34ca lsp: don't override `config.title` in `vim.lsp.buf.signature_help()` #35075
- 729111d3a3cd lsp: don't treat MarkedString[] with language id as empty #35518
- ff792f8e6908 lsp: enable insertReplaceSupport for use in adjust_start_col #36569
- 8495d9623809 lsp: ensure `bufstate` when calling `vim.lsp.document_color.is_enabled`
- f168d215cfa2 lsp: ensure augroup before querying autocmds #38254
- e239179871c4 lsp: ensure bufnr is passed for buffer-local requests (#36325)
- 40dc2d02a851 lsp: ensure the codelens on the first line is visible
- 9f77124b78ec lsp: error on omnifunc completion (#37790)
- 82b844fefef5 lsp: fallback to empty `capability_path` in `supports_registration`
- 927927e143bd lsp: fix error with InsertReplaceEdit events #33973
- 23f4fab0bdfe lsp: fix incorrect params because of typo (#36871)
- 34116bbd9b61 lsp: fix nil-index error for `:lsp enable` (#37411)
- 20a392fe3843 lsp: fix window to set cursor for inline completion (#36444)
- 4ee2e365a583 lsp: fix workspace diagnostic request to follow spec (#34674)
- 913b05bf630d lsp: format_item should return string (#36025)
- 7c3df3e2ea13 lsp: get_namespace signature (#38449)
- a8ffa6e323d8 lsp: guard dynamic capability attachment #38382
- abc96ba0ce30 lsp: handle `nil` buffer state in `documentColor` clear (#33746)
- 8e48c0206155 lsp: handle array with empty string when checking empty hover (#35423)
- 507cd63418ac lsp: handle completion/resolve response arriving after on_insert_leave
- 1de77c608fa9 lsp: handle nil request in semantic tokens #36780
- 26cc42e426d7 lsp: handle nil response in references request #35139
- 5653b25e9b8f lsp: handle non-string documentation in completion items #38291
- 95dce376f330 lsp: handle providers without subcapabilities
- eaacdc9bdffd lsp: ignore empty response on trigger completion #37663
- a0678a5849d3 lsp: ignore inline completions after leaving insert mode (#36476)
- 7ebfc5077512 lsp: ignore invalid fold ranges (#36708)
- 8bfb91accce7 lsp: ignore stale codelens resolve responses (#38153)
- 5d1fd4aca58c lsp: improper diagnostic end_col computation
- 1f558f8d0960 lsp: improve diagnostics handling and comments
- ed562c296abe lsp: improve dynamic registration handling #37161
- 5c15df449a87 lsp: improve error completion message #33812
- cd06e0c9d6be lsp: include client ID when receiving unknown fold kind (#34535)
- 6005bc68b29e lsp: include context for each client in multi-handler results (#34669)
- b459bf5961fd lsp: include missing LSP methods and update type annotations
- 18d6436ad2c6 lsp: inlineCompletion: ignore out-of-range items #35990
- 820fb89172b7 lsp: make thematic break parsing conform to GFM spec (#35162)
- 13cf80deefe7 lsp: map all LSP methods to server capabilities (#37910)
- 2f78ff816b03 lsp: misleading logs in non-applicable filetypes #35749
- d9768348649b lsp: nil error in ColorScheme autocmd
- 3c4acc0f1a2b lsp: noisy log message when enabling server without config #36264
- 91e116f3a671 lsp: only auto-detach lsp.config clients #33834
- e5c5b563ec1e lsp: only auto-detach lsp.config enabled clients #34325
- eb90f5d9e3a6 lsp: only resolve LSP configs once (#38007)
- 6926fc1615c9 lsp: opts.reuse_win does not jump if buf is already open #33476
- 4778a4c20179 lsp: prevent flicker in codelens virtual text #34888
- 9e93bfdb5fce lsp: prioritize showing active signature
- b98aefc5841a lsp: properly handle `documentColor` from multiple servers #33656
- c39d18ee939c lsp: raise error when lsp config is invalid type (#37508)
- addd408b3955 lsp: redraw codelens after request completed #38352
- 03032d1f73d8 lsp: remove `vim.lsp.diagnostic.reset()` (#35938)
- 285ea2525fdf lsp: remove extra notify on empty hover
- 34815777b280 lsp: remove side-effects if `vim.lsp.enable()` raises an error (#37571)
- 181df6053382 lsp: remove unused `ns` field
- 371ad48135ed lsp: replace `string` types with LSP method alias type annotations where appropriate. (#36180)
- 6a49a277f517 lsp: request diagnostics from all registrations
- 0da982767332 lsp: respect documentation markup kind in completion preview #38338
- 4ef562472988 lsp: restore Client:stop() force-stopping behavior (#35800)
- 0db8efcbe4fc lsp: restore virtual document color visibility (#38407)
- 4dd9137215f8 lsp: reuse_win prioritizes windows/tabs currently displayed #36486
- 70460d557c51 lsp: scope inline_completion autocmds to buffer (#35965)
- 323d5527eed6 lsp: set 'linebreak' in floating windows (#36275)
- 4b8980949cd4 lsp: set concealcursor='' in LSP floating windows #36596
- c3991b8ef4f0 lsp: show notification with empty hover response (#35014)
- 5b1b46ea5a4f lsp: show title when global winborder is set (#35181)
- 8a94daf80ead lsp: simplify semantic tokens range request logic #36950
- 4ed597389c33 lsp: snippet preview blocked completionItem/resolve request #38428
- 0197f13ed4fa lsp: sort items when completeopt include fuzzy #36974
- d53d542359de lsp: stop and close timer when `Capability` is destroyed
- a768d0a95b52 lsp: stop repeatedly resuming dead coroutine #35743
- 1d8e9b5d070c lsp: store result id for unchanged diagnostic reports
- 8b5d8dfc732e lsp: support `containerName` in symbol requests #35029
- 17c18efbe561 lsp: support v:count in selection_range() #34551
- a1895f024a4c lsp: support workspace/configuation with no section #27510
- bd225422a5b7 lsp: tests for :lsp, rename start/stop
- e69b81ad94da lsp: treat 2-triggers-at-once as "last char wins" #35435
- 1f63735f175d lsp: treat nil inlay hint result as empty array (#35458)
- f67306cc67e8 lsp: typos in method names #36077
- 29c6176f0842 lsp: unify LSP error logging prefixes #38354
- 9139c4f90ff8 lsp: update capability maps (#35227)
- db1b7f74129e lsp: update completion items on `TextChangedP`
- 7a8d31687940 lsp: update metamodel (#38174)
- 6c3e9b557341 lsp: update on `CursorHoldI` cause users unable to `select()`
- 848c7a789470 lsp: update window title when cycling through signatures #35407
- 006101360d6f lsp: use LSP method type in more places (#36069)
- 36db6ff2c128 lsp: use LSP textEdit range for completion start boundary (#37491)
- 34c769dd897d lsp: use `bufnr` when getting clients in `symbols_to_items` (#33760)
- 807bc00dd68d lsp: use `vim.notify` with action-less `showMessage` requests (#34720)
- 5fbc5ab81073 lsp: use correct `workspace.diagnostics` capability key (#35937)
- 00ad477419f2 lsp: use correct deprecation function (#34518)
- 6fe68abdf5a3 lsp: use entire line as completion word (#37949)
- 1d7823451e2a lsp: use vim.notify for all message types #34489
- f90cd620c56b lsp: vim.lsp.completion clean up triggers on client detach (#38009)
- 5c4b64aae59d lsp: wait for exit_timeout on quit #37597
- 6bb6b4793327 lsp: wait to display exit message #37925
- 5554fcc28683 lsp: warn on missing config in :checkhealth #33087
- 0cda01834514 lsp/diagnostic: key resultId by client and identifier
- 7a5e9ef0aab8 lsp/diagnostic: use diagnostic provider identifier for code actions #38401
- f0c0c24ed777 lsp/health: always use vim.inspect to show root_markers (#34667)
- 5ad01184f3c3 lsp/health: ensure valid table before concatenating (#34092)
- 1906da52dbc9 lua: close vim.defer_fn() timer if vim.schedule() failed (#37647)
- 103ddaf9ae80 lua: correct line number reporting for options set in coroutines (#37463)
- b986fd96bc8d lua: coverity "unreachable" warning #35874
- 40f5115ac430 lua: disable `strict_indexing` when converting LSP positions
- 1264d1156ce1 lua: don't leak timer when vim._watch.watch() fails (#35768)
- c08139d790b7 lua: don't remove first char of non-file stacktrace source (#37008)
- 9a5641b4b570 lua: drop support for boolean `buf` in `vim.keymap` #38432
- 66066d0f6a22 lua: extra CR (\r) in `nvim -l` output #38048
- b87bdef2a864 lua: relax `vim.wait()` timeout validation #36900
- 6a330f893bf1 lua: report error in Lua Funcref callback properly (#35555)
- 1aa26f5d5555 lua: separate vim.{g,b,w,t} types #37081
- 94144d46787f lua: vim._with() doesn't save boolean options properly (#37354)
- 89b946aa87d2 lua: vim.diff is nil in uv.new_work() thread #34909
- 40351bbbbe78 lua: vim.validate `message` param #33675
- bc0635a9fc9c lua: vim.wait(math.huge) fails #36885
- b3324be0d8a1 man.lua: :Man ignores section of gzipped manpage #38235
- 87bd16e470b2 man.lua: :Man slow/hangs if MANPAGER is set #36689
- 5333d6371bfa man.lua: E95 when piping to :Man #33068
- a8dd5c7e41dd man.lua: noisy "ENOENT" error on Windows #33409
- 46220afef806 man.lua: show_toc condition may cause infinite loop #36979
- b8763cb21525 man.lua: useless executability check #33438
- 84d3bbef23d0 map: use names like Map_key_value not Map_keyvalue
- 218ea9fff775 mappings: always include replace_keycodes in mapping dicts (#37272)
- 3341ab07764e marks: clamp conceal_lines corrected line number #33464
- 5773f0e99463 marks: make jumpoptions=view work with 'smoothscroll' (#38339)
- 064ff74cdbe6 marks: wrong display after inserting/deleting lines #33389
- 033f1123cd91 marks: wrong line('w$', win) with conceal_lines (#37047)
- 37c0efb21cfb marktree: fix edge case bug regarding changing intersections
- 2154d325d526 memfile: avoid potential crash on OOM (#37946)
- 5e470c7af556 menu: fix listing of submenus (#34315)
- 8f9278d7c258 menu: right-click menu fails with E335 when using V after i_ctrl-o #37349
- b47b0caba858 message: concatenate multi-chunk nvim_echo({err}) for exception message #38131
- 3d5ef97a9829 message: no wait return for delayed exception error #35881
- 2de284e50b6d message: set replace_last for completion "scanning" messages #37967
- 3b85046ed5f2 messages: "list_cmd" kind for :command, :version (#34529)
- ac670989980a messages: "list_cmd" kind for mark commands #33874
- dc3a30cfbb83 messages: 'exrc' / secure messages
- 96e1acfa427f messages: add "list_cmd" kind to :colorscheme #37561
- 29f2cb89f01b messages: add append parameter to history entries (#34467)
- 8bdfd286e584 messages: adjust msg_show "empty" kind logic (#37427)
- 83037cf21857 messages: allocate message history kind string #38292
- c85313bac7e6 messages: always assign msg_id to msg_show events #37671
- bf1d4e9793fc messages: capture execute("messages") with ext_messages (#34342)
- 276860b5380d messages: clear 'showmode' message after insert_expand #33607
- 1b2b715389c5 messages: disallow user-defined integer message-id #38359
- 81828e66b99a messages: emit empty msg_show event for :echo #38467
- 53aad276b62a messages: exclude "search hit BOTTOM" msg from history #36961
- 73157c994db4 messages: heap-buffer-overflow with shell command (#37855)
- 7a490d65c57e messages: increment message ID without ext_messages #37714
- 912388f51786 messages: list_cmd kind for buffer line messages (#33855)
- d86d4bacc14b messages: make swapfile attention message part of prompt (#34414)
- 49c19a1fe3cb messages: message not flushed at end of command #37904
- 7c43f8e4336c messages: messages added to history missing from ext_messages "g<" #33907
- a81b059a45ba messages: non-fast and append for "shell_*" kinds #38188
- 10a03e83e357 messages: only msg_clear for UPD_CLEAR #34688
- e876a739eeb1 messages: recognize cmdline one_key/number prompt State (#34206)
- 96957d80c6c3 messages: reinstate 'showmode' message delay #37992
- e63346dfe91b messages: reset redirection message column at message start #38068
- a5f236291c0c messages: single event for multi-expr :echo (#34393)
- f1dcde6cba3b messages: single msg_show event for :global command #37728
- 986b92eb0713 messages: single msg_show event for multiple :set options #33555
- 3898f34c5a21 messages: spurious newline with --headless + cmdheight=0 #38494
- 41336a35905b messages: swedish translation #37395
- 39c4e0f33667 messages: unwanted ext_messages newlines for confirm() #38045
- 4260f73e1396 messages: unwanted newlines with ext_messages #37733
- 98f5aa2564c3 messages: verbose message emitted without kind #33305
- 18fa61049a9e mouse: crash with click on win-separator in statusline (#33091)
- 7432781e7184 mouse: do not fetch clipboard twice when pasting with middle button #33494
- 2f8fb4f28ab9 mouse: mouseclick after conceal_lines is miscalculated #33451
- 32325a66ca0d move: adjust for concealed lines above topline after scrolling up (#33211)
- 6ce2877327b1 move: consume skipcol before revealing filler lines (#34143)
- 2069be281c72 mpack: boundary values for negative integer encoding #37255
- b8ee354f127c msgpack: flush incomplete big UI event before packing RPC event
- 7f2d5d6883b5 msgpack: use fixstr encoding for strings of length 20-31 #36737
- 41068c77aa1b normal: assertion failure with "gk" in narrow window (#37444)
- 911337eb3c4c normal: crash using :norm from vim.ui_attach shell message event #38283
- 4485e715fb6a options: deprecate 'gdefault', 'magic'
- c2136e359008 options: increase t_Co buffer size (#35859)
- 9910445125bb options: make 'cdhome' take effect on any platform
- f4f1149292aa options: vim.opt fails for 'fillchars' #37141
- 1f2883e87976 outline: use 2-space indent instead of 1-space
- 3d37aa3116ab pack: account for Git's "insteadOf" in `:checkhealth` #38393
- bac4cde9cd43 pack: actually checkout proper version of submodules
- b02d1303b80f pack: add trailing newline to lockfile #38469
- 46648c38677d pack: close confirmation buffer's tabpage by ID #34971
- 0f73873d4f42 pack: close confirmation buffer, not tabpage #37756
- ee3239fcb682 pack: consistently use "revision" instead of "state"
- f00abc6a5669 pack: ensure `data` spec is passed in events during lockfile sync #38139
- d3bea4ace94a pack: ensure consistent order of changelog during update
- ed73ed828374 pack: ensure explicit default `version` in events (where possible)
- 14003bd1c563 pack: ensure plugin directory is created during first usage attempt
- 539b8027a309 pack: explicitly close confirmation window #37861
- fa3920282da0 pack: handle Git environment variables #35626
- 3b860653ca0c pack: handle lockfile in case of install errors #36064
- 3f34f083db06 pack: ignore 'loadplugins' when sourcing 'after/plugin' scripts
- 28e2a5c1513d pack: improve `vim.pack.add()` input validation
- 89a72f11e5fe pack: make newer version suggestions more robust
- 2e62f3576f7f pack: open confirmation buffer in tabpage after the current one
- e4e660594366 pack: relax minimal Git version to be 2.0 #36573
- f492f62c3d5f pack: rename confirmation buffer to again use `nvim-pack://` scheme
- 0fa96585dc1d pack: set `source` in progress report #38511
- 474e9e9408e3 pack: show more informative error message if no `git` executable
- 5468e6a45272 pack: skip :redraw! if headless #37782
- 8f0b8a2c279f pack: skip `git stash` during install
- b337c6e0fc0a pack: update `add()` to have default `load=false` during startup
- 1ee18b406114 pack: use 'coxpcall.lua' on non-LuaJIT
- 8200223ee7a8 pack: use `vim.pack:` as message/progress prefix
- f3f509563084 pack: use full hashes in lockfile and revision description
- eff01b7620cf pack: use more correct URI for confirmation buffer name
- 267bbe64cb4f pack: validate installed plugins in `update()` and `del()`
- a5d69326860f paste: don't use :echo immediately before :redraw (#35773)
- 42aae632beb0 plines: count 'showbreak' in EOL inline virt_text in line size (#35921)
- 6291256868f0 process: avoid buffering unnecessary UI event with PTY CWD (#37582)
- 19a3b6778979 process: avoid unexpected behavior when PTY chdir failed (#37614)
- e05171890809 process: don't limit PTY master remaining data size
- 97509aa2be00 process: handle poll() interrupted by a signal (#38024)
- 8a4719e11744 process: use poll() to drain PTY master on Linux (#38005)
- 974bc1b0444b process: wrong exit code for SIGHUP on Windows (#38242)
- e5ba875a956c progress: memory leak on progress-message with history=false
- 2415d8f4247e progress: message-id not sent to ui with history set to false
- 7bf83cc2a651 progress: require "source" for progress-message #38514
- 0af01948f30a progress: show progress-status only in curwin #38458
- bc6737250d61 progress: simplify ui-event, introduce default presentation #35527
- 25000be8457f prompt: "%" prefix repeated on newlines with formatoptions+=r #34584
- ed4c549ea243 prompt: also store column info in ': mark #36194
- a5eb023a5393 prompt: clear undo when changing/appending prompt
- 807a65b2da53 prompt: cursor on prompt line, disallow ":edit" #34736
- 689a149b0890 prompt: don't implicitly set 'modified' #38118
- dbb3986f331f prompt: ensure prompt-mark col gets reseted properly #37669
- 1349233cd150 prompt: heap-buffer-overflow in prompt_setprompt
- 4afbc2543282 prompt: heap-buffer-overflows with invalid ': col
- bf9d3e4bf8d3 prompt: lnum update via nvim_buf_set_lines if buf != curbuf #34833
- b3096b5860ca prompt: ml_get error with invalid ': lnum
- ed7ff848a02d prompt: prompt mark not placed after text edits correctly #34671
- 602cbbe1d930 prompt: prompt_setprompt cursor col adjustment
- 3a10405214ac prompt: prompt_setprompt does not adjust extmarks, no on_bytes
- 2a5d687cc92b prompt: prompt_setprompt sets cursor col unnecessarily
- 16bf7652b7b2 prompt: prompt_setprompt with unloaded buffer, ': with lnum 0
- 51dc752e6cfa prompt: wrong changed lnum in init_prompt
- 7641177c5f98 prompt: wrong cursor col after prompt_setprompt, no on_lines
- 466b2ac1929a prompt: wrong cursor position with cursor keys (#36196)
- acb99b8a6572 prompt_buffer: plugins can't set `':` mark #35624
- b4906577c9f1 provider: misleading :checkhealth if user sets g:loaded_python3_provider=1 #32696
- 51aa64488ddd provider: support python3.14 #38419
- 7be4e4dd6596 pty: prevent orphan conhost.exe on Windows 10 #38244
- ef0386fe9ae2 pum: adjust info window column offset when scrollbar is present (#37069)
- 76fdd9b88248 pum: crash when resizing grid with pumborder set (#36404)
- 2681e1fce3c4 pum: fix heap-buffer-overflow with 'rightleft' (#33146)
- 7d569abb2067 pum: handle RightDrag on parent grid properly (#33626)
- 922816877feb pum: hide info floating window when insufficient space (#37107)
- d87972f92000 pum: keep info window aligned with pum when above #38251
- 445cb751e6cb pum: pumborder=shadow not blending properly (#37328)
- 0712a9c87bfe pum: separate scrollbar from shadow border (#37448)
- 686e7aca40b8 pum: simplify 'pummaxwidth' truncation and avoid crash
- 5a6532168443 pum: text overflows into border on truncation (#37438)
- 106cacc93be1 pumblend: do not apply special highlight attrs from bg layer #36186
- c80bb5b63e0a pumborder: wrong layout with pumborder=none #36208
- 6256adde2f8b quickfix: always split from current window #33807
- 69c379dc4411 quickfix: use correct lnume when appending (#34611)
- 7ed8e969941c redraw: update curswant for Visual selection (#34241)
- a141fd2c4d21 remote: remote-ui connect timeout on slow networks #36800
- 39d8aa0a1ac1 rpc: don't overwrite already received results on error (#37339)
- abd0c882b37a rpc: handle more cases when identifying loopback #36100
- e142e01d570c rpc: include write failure reason in log (#37959)
- db2b774a1641 runtime: 'includeexpr' with non-Nv…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants