* build(deps): bump tree-sitter to baad4174e
* build(deps): bump wasmtime to v48.0.0
Tree-sitter bumped their wasmtime dependency from v36 to v48 (the new LTS), so we must follow suit. This change brings in significant performance improvements for wasm parsers (although they are still significantly slower than native parsers).
Instead of setting it in the test runner (which runs in an Nvim instance
that already has a log file), make run_tests.zig set a $NVIM_LOG_FILE
fallback path like what RunTests.cmake does.
Sort vimpatch_commit_ignore.txt based on "git log" order
else "diff" fails to filter out reverted vim-patch tokens.
Put latest commit to revert on top of file.
Problem:
- `lhs` is not fully realized. E.g. for a "payload" mapping
`lhs` omits the `getchar()` payload during a mapping (vim-surround
`ds'` reports `lhs="ds"`). This means plugins like vim-repeat are
still needed...
- The "delta" fields of a CmdAtom are calculated too late.
- `<abuf>` and `changed` check whatever (wrong) buffer a command
(":bnext") might land in.
- CTRL-W_w between two windows on the same buffer reports type="motion".
Solution:
- `CmdOrigin` samples (buf/win/cursor/changedtick) at each "scope" entry
(CmdFrame, composite, Visual session, insert session).
- `dd<C-w>l` reports `changed=true` for the buffer it edited, regardless
of where the cursor ends up.
- New fields:
- `pos`: cursor position at command start.
- `moved`: indicates whether the cursor moved (in same buffer).
- `undoseq`: undo state at settlement.
- lhs now includes the payload: "ds)" reports lhs="ds)" instead of "ds".
- Easy for users to "replay" any atom.
- Rename: type "command" => "normal", "ex" => "excmd"; `arg` => `cmdarg`
- Drop `cascade` field (no reason to expose it)
Too many suggestions in
bcf116cc2f
Multi-line grep on the hunk contents before filtering by hunk header
prevents vim-patch.sh from detecting v8.1.2195 and v8.1.2219 as N/A.
Revisit multi-line parsing for `runtime/doc/*.txt`
when Vim v9.2+ has new runtime/doc/ patches
about features that require "has()/exists()" guards.
A line comment nested in a block comment (the comment plugin uses a
block comment on every line) break syntax highlighting and shade the
rest of the file as a comment.
closes: vim/vim#21109ee1517df53
Co-authored-by: Shay Hill <shay_public@hotmail.com>
Problem: Heap-buffer-overflow in spell_suggest() when the cursor is
beyond the end of the line, because a SpellFileMissing
autocommand changed the buffer (dvaave2025).
Solution: parse_spelllang() may run autocommands, so validate the cursor
position and re-take the saved position afterwards.
fixes: vim/vim#21097closes: vim/vim#21100
Supported by AI.
6073903cda
Co-authored-by: Christian Brabandt <cb@256bit.org>
Problem: Multiline messages exceeding 'cmdheight' not visible when a
mapping starts cmdline immediately after it (after 9.2.0967).
Solution: Revert patch 9.2.0967 and use a different solution (zeertzjq).
fixes: vim/vim#21098closes: vim/vim#21101fb4866a2dd
Problem:
An unreplayable Visual operation does not emit a CmdAtom event. That's
maybe not super important, but it hints at a flaw in how `vatom`
"voiding" is plumbed: `vatom.state=kVatomVoid` replaces the "kind", so
that info is lost to later parts in the lifecycle.
Solution:
- Define `VatomState` as "flags", so `kVatomVoid` can "poison"
`vatom.state` without losing its kind flag.
- Unify `lhs`: always report the original user input in `CmdAtom.lhs`,
for all kinds of user actions: visual, "translated"/"stuffed" cmds,
and dot-repeat (".") itself.
- Unreplayable Visual atom emits CmdAtom with non-empty `lhs` and empty
`keys`, like a mapping/macro composite.
vim-patch:8.1.2195: Vim does not exit when the terminal window is last window
vim-patch:8.1.2219: no autocommand for open window with terminal
vim-patch:8.2.0897: list of functions in patched version is outdated
vim-patch:8.2.3323: Vim9: Cannot use :silent with :endwhile
vim-patch:8.2.3589: failure when "term_rows" of term_start() is an unusual value
vim-patch:8.2.3597: Vim seems to hang when writing a long text to a terminal
vim-patch:8.2.3913: help for expressions does not mention Vim9 syntax
vim-patch:8.2.4153: MS-Windows: Global IME is no longer supported
vim-patch:8.2.4586: Vim9: no error for using lower case name for "func" argument
vim-patch:b09c32003 patch 8.2.4720: ABB Rapid files are not recognized properly
vim-patch:8.2.5000: no patch for documentation updates
vim-patch:eb4904187 release version 9.0
vim-patch:9.0.1818: dynamically linking perl is broken
vim-patch:6ffcc58be runtime(help): Updated documentation on editorconfig
vim-patch:b043ff34c runtime(doc): fix two typos in `vim9.txt` and `options.txt`
vim-patch:9.0.1994: inconsistent feature description
vim-patch:9.0.2026: win32: python3 dll loading can be improved
vim-patch:3c81f47a0 runtime(doc): correct <PageUp>/<PageDown> behavior in 'wildmenu'
vim-patch:a5a153475 runtime(doc): small updates to the documentation for varargs
vim-patch:5985879e3 runtime(doc): Fix typos in several documents
vim-patch:a56f02d82 runtime(doc): missing code formatting in if_pyth.txt
vim-patch:5f5131d77 runtime(doc): clarify bracketed paste mode
vim-patch:08b1c61e8 runtime(doc): clarify terminal capabilities for focus reporting
vim-patch:bee966d3f runtime(doc): clarify `:help inclusion` section
vim-patch:2c5240ec8 runtime(doc): Update usr_51.txt to be more inclusive
vim-patch:6ffe084e6 runtime(doc): document proper notation of gVim, document vim-security list
vim-patch:ca2eca7c7 runtime(doc): reference 'go-!' inside os_win32.txt for !start
vim-patch:0280c0b9a runtime(doc): sort option-list alphabetically
vim-patch:c23fc3647 runtime(doc): Update eval.txt
vim-patch:5872bcb6e runtime(doc): Create Changelog until v9.0.2175
vim-patch:59df9ad68 runtime(doc): Include Vim9 class features in version9.txt
vim-patch:74512e0ad runtime(doc): Add help tags to items in version9.txt
vim-patch:0ede5e361 runtime(doc): Update Version9.txt for release 9.1
vim-patch:6c1afa3d0 runtime(doc): add missing help tags
vim-patch:963fd7d6e runtime(doc): Fix typos in reltime() help.
vim-patch:7b7672d5c runtime(doc): Fix typos in version9.txt
vim-patch:9.1.0050: Win32 Keyboard handling is sub-optimal
vim-patch:1b7fbe726 runtime(doc): Update help for Wayland support
vim-patch:ec9c32637 runtime(doc): clarify expand() for :terminal windows
vim-patch:db7622ea8 runtime(doc): Fix typo in usr_41.txt
vim-patch:b1289f19e runtime(doc): Fix typo under *kitty-terminal* in term.txt
vim-patch:0e17f7e97 runtime(doc): clarify close behaviour for :term
vim-patch:7f0bba259 runtime(doc): Improve docs for empty(), len(), and string() on objects
vim-patch:9.1.0233: Vim9: string() output of enum is problematic
vim-patch:957402258 runtime(doc): Fill in a few details regarding :enums
vim-patch:9.1.0270: a few minor issues to fix
vim-patch:7b0c4b64e runtime(doc): typo in intro.txt
vim-patch:014b7759e runtime(doc): fix typos in starting.txt
vim-patch:a13290f82 runtime(doc): minor fixes to starting.txt
vim-patch:158673680 runtime(doc): minor spell fix in starting.txt
vim-patch:5400a5d42 runtime(comment): include a simple comment toggling plugin
vim-patch:ca4b81a7a runtime(doc): Add tags about lazyloading of menu
vim-patch:fb745756d runtime(doc): add MsgArea to 'highlight' option description
vim-patch:93e0d2e81 runtime(doc): update vi_diff.txt: add default value for 'flash'
vim-patch:e595e9c31 runtime(doc): clarify instal instructions for comment package
vim-patch:9.1.0417: if_py: find_module has been removed in Python 3.12.0a7
vim-patch:5cf5301e2 runtime(doc): clarify temporary file clean up
vim-patch:5f7571473 runtime(doc): clarify why E195 is returned
vim-patch:d801edfb1 runtime(doc): mention comment plugin at :h 'commentstring'
vim-patch:ce6fe84db runtime(man): update Vim manpage
vim-patch:5674c9a7d runtime(doc): add return type info for Vim function descriptions
vim-patch:c593b9ead runtime(doc): Added definitions of Vim scripts and plugins
vim-patch:c52a85607 runtime(doc): revert unintended formatting changes for termdebug
vim-patch:946f61c40 runtime(doc): clarify when text properties are cleared
vim-patch:84ac2126f runtime(doc): Fix typos in several documents
vim-patch:f0837ba0b runtime(doc): In builtin overview use {buf} as param for appendbufline/setbufline
vim-patch:950292152 runtime(doc): mention $XDG_CONFIG_HOME instead of $HOME/.config
vim-patch:49ddeefec runtime(doc): add reference to xterm-focus-event from FocusGained/Lost
vim-patch:b3c232215 runtime(doc): Correct shell command to get $VIMRUNTIME into shell
vim-patch:7298565c8 runtime(doc): autocmd_add() accepts a list not a dict
vim-patch:c5e24ee24 runtime(doc): add a note for netrw bug reports
vim-patch:6d6dffa61 runtime(doc): document global insert behavior
vim-patch:03d20aaac runtime(doc): 'cpoptions': Include "z" in the documented default
vim-patch:d24aaa998 runtime(doc): using wrong highlight for UTF-8
vim-patch:e7a4523b0 runtime(doc): fix typo "a xterm" -> "an xterm"
vim-patch:52e7cc26d runtime(doc): tweak documentation style a bit
vim-patch:90e1fe4b7 runtime(doc): fix a few style issues
vim-patch:ff1680722 runtime(doc): Remove mentioning of the voting feature
vim-patch:890f97ce5 runtime(doc): improve typedchar documentation for KeyInputPre autocmd
vim-patch:fd01eb21e runtime(doc): Update outdated man.vim plugin information
vim-patch:82f6134b1 runtime(doc): Update version9.txt and mention $MYVIMDIR
vim-patch:0b2285c96 runtime(doc): Fix typo in :help :hide text
vim-patch:fdd1819b5 runtime(doc): reword and reformat how to use defaults.vim
vim-patch:770b38df4 runtime(doc): fix typo in version9.txt nrformat -> nrformats
vim-patch:8ee0e0b8e runtime(doc): Fix to two-space convention in user manual
vim-patch:738ebfea4 runtime(doc): Fix style in documents
vim-patch:6e56484f0 runtime(doc): correct `vi` registers 1-9 documentation error
vim-patch:015c84ce5 runtime(doc): add missing usr_52 entry to toc
vim-patch:1961cafc9 runtime(doc): mention conversion rules for remote_expr()
vim-patch:5dcee3c72 runtime(doc): link help-writing from write-local-help
vim-patch:539349cb3 runtime(doc): improve the :colorscheme documentation
vim-patch:92b59c628 runtime(doc): Fix wrong Mac default options
vim-patch:d52fb2fab runtime(doc): Clean up minor formatting issues for builtin functions
vim-patch:b3ec5643c runtime(doc): include a TOC Vim9 plugin
vim-patch:6081c1789 runtime(doc): update help-toc description
vim-patch:ac2bb9dfe runtime(doc): add help specific modeline to pi_tutor.txt
vim-patch:39cd9061b runtime(doc): update default value for fillchars option
vim-patch:c9e864047 runtime(doc): Add pi_tutor.txt to help TOC
vim-patch:624bb8361 runtime(doc): Tweak documentation style a bit
vim-patch:18defabae runtime(doc): add a table of supported Operating Systems
vim-patch:dbf231a4b runtime(doc): mention option-backslash at :h CompilerSet
vim-patch:cb34507b5 runtime(doc): add helptag for :HelpToc command
vim-patch:a01148d2c runtime(doc): Expand docs on :! vs. :term
vim-patch:b534e8000 runtime(doc): Tweak documentation style a bit
vim-patch:73785accf runtime(doc): updated version9.txt with changes from v9.1.0905
vim-patch:9.1.0932: new Italian tutor not installed
vim-patch:9c3330de2 runtime(doc): fix some small errors
vim-patch:af0fed598 runtime(doc): Add a note about handling symbolic links in starting.txt
vim-patch:08be9ddc8 runtime(doc): move help tag E1182
vim-patch:ae01b9600 runtime(help): fix typo s/additional/arbitrary/
vim-patch:223d6c0a9 runtime(doc): update version9.txt for bash filetype
vim-patch:f6ba8defc runtime(doc): update for new keyprotocol option value (after v9.1.0969)
vim-patch:6de7191c3 runtime(doc): mention how NUL bytes are handled
vim-patch:34e271b32 runtime(doc): use standard SGR format at :h xterm-true-color
vim-patch:e80f345b5 runtime(doc): Tweak documentation about base64 function
vim-patch:27f2e473e runtime(doc): update index.txt
vim-patch:9598a6369 runtime(doc): add package-<name> helptags for included packages
vim-patch:6472e5836 runtime(doc): fix base64 encode/decode examples
vim-patch:71028a32d runtime(doc): rename last t_BG reference to t_RB
vim-patch:195fcc90d runtime(doc): Tweak documentation style a bit
vim-patch:9.1.1105: Vim9: no support for protected new() method
vim-patch:14e8208d8 runtime(doc): get rid of the titlestring hack for terminal-api
vim-patch:8d67cbfa1 runtime(doc): document vim syntax switches
vim-patch:7db96134c runtime(doc): Update doc 52.6
vim-patch:5f2a95955 runtime(doc): symlinking netrw.txt causes problems during install on Windows
vim-patch:9.1.1230: inconsistent CTRL-C behaviour for popup windows
vim-patch:932a535bf runtime(doc): update and correct str2blob() and blob2str() examples
vim-patch:92e109fc1 runtime(doc): Fix an omission in the documentation.
vim-patch:721be7fd0 runtime(doc): add back help tag "pi_netrw.txt"
vim-patch:1c2f47585 runtime(doc): Update the tuple help text
vim-patch:9.1.1274: Vim9: no support for object<type> as variable type
vim-patch:2afdb3a65 runtime(doc): Fix minor typo in options.txt
vim-patch:2525573de runtime(doc): rename wrong option to 'pummaxwidth'
vim-patch:0ed11ba22 runtime(doc): Tweak documentation style a bit
vim-patch:f39de6060 runtime(doc): style: clarify to prefer 2 spaces after a sentence
vim-patch:b753d80e5 runtime(doc): clarify return type for findfile()/finddir()
vim-patch:ba0062b0c runtime(helptoc): the helptoc package can be improved
vim-patch:9.1.1368: GTK3 and GTK4 will drop numeric cursor support.
vim-patch:ba19b6589 runtime(doc): fix typo in description of :redrawtabpanel
vim-patch:9.1.1418: configures GUI auto detection favors GTK2
vim-patch:d65cdadb7 runtime(doc): Fix typos and language in documentation for tabpanel.
vim-patch:6b2c1ad05 runtime(doc): clarify behaviour of set maxcombine=0
vim-patch:8f7256a5e runtime(doc): fix some style issues and remove obsolete docs
vim-patch:b657310bd runtime(doc): Fix modeline in wayland.txt
vim-patch:651edf33e runtime(doc): Tweak documentation style
vim-patch:57d6d0043 runtime(doc): Add documentation style
vim-patch:9.1.1529: Win32: the toolbar in the GUI is old and dated
vim-patch:bc84fd145 runtime(doc): handle newlines in base64 string encode example
vim-patch:d3170f59e runtime(doc): Tweak documentation about tab pages
vim-patch:9340aa1bf runtime(helptoc): add s keymap to split and jump to selected entry
vim-patch:fc3c204bb runtime(doc): Fix style and typos in builtin.txt and usr_41.txt
vim-patch:6b9cf3139 runtime(doc): update :call with a range and remove space
vim-patch:308a3130b runtime(doc): Update help for the items() function
vim-patch:39a67920f runtime(doc): Fix missing heading in remote.txt
vim-patch:dc725a04f runtime(doc): update termguicolors default description
vim-patch:e0196f3e2 runtime(doc): Tweak documentation style
vim-patch:6a2d0496a runtime(doc): add missing da1 value to TermResponseAll doc
vim-patch:5f8e31fec runtime(doc): remove documentation for t_Ms terminal code
vim-patch:b2e21cccc runtime(doc): Tweak documentation in vi_diff.txt
vim-patch:9.1.1743: Haiku: no full-screen support
vim-patch:5291fe89b runtime(doc): mention hl-PreInsert in version9.txt
vim-patch:f35a2af8e runtime(doc): improve 'complete' option description
vim-patch:450d59145 runtime(doc): tweak documentation style
vim-patch:235e77a3a runtime(doc): Tweak documentation style more in options and ft_hare
vim-patch:f9dad9e39 runtime(doc): Fix typos in eval.txt
vim-patch:f79e262ff runtime(doc): clarify how to call complete() funcs
vim-patch:a73963ed8 runtime(doc): fix typo, reorder, mention zip plugin at :h changed-9.2
vim-patch:a7680a1a6 runtime(doc): mention improved rendering with 'termguicolors'
vim-patch:07c68245d runtime(doc): MS-Windows: Improve documentation about VTP support
vim-patch:377339dff runtime(doc): make order of verbs match order of operators
vim-patch:4aa4a5690 runtime(doc): update getwininfo() documentation about popups
vim-patch:3b1901eb5 runtime(doc): Tweak documentation style
vim-patch:a67f2699b runtime(doc): update if_perl after v9.1.1822)
vim-patch:9.1.1826: Patch v9.1.1230 causes confusion about Ctrl-C behaviour
vim-patch:c58f91c03 runtime(doc): Whitespace updates
vim-patch:7bb56b49e runtime(doc): Fix option markup at :help 'pumborder'
vim-patch:9.1.1882: Vim9: Not able to use a lambda with :defer
vim-patch:07da26710 runtime(doc): Fix a few typos
vim-patch:7f60105cb runtime(doc): fix typo in "appendbufline()", builtin.txt
vim-patch:4bb44b287 runtime(doc): Change termdebug_config debug value to v:true in terminal.txt
vim-patch:911ecdcd0 runtime(doc): fix return value in 'exists' and 'exists_compiled()'
vim-patch:e9a983326 runtime(doc): Tweak documentation style in eval.txt and options.txt
vim-patch:a2b45646a runtime(doc): Update version9.txt for v9.1.1966
vim-patch:fdd21ca37 runtime(doc): fix wrong help tag reference in eval.txt
vim-patch:93d9d196e runtime(doc): use codepoint consistently
vim-patch:a820a4540 runtime(doc): Fix "Vim script" formatting at :help clipboard-providers
vim-patch:3913f13a7 runtime(doc): Improve :help builtin-function-list table formatting
vim-patch:08953f711 runtime(doc): Minor updates to version9.txt
vim-patch:745335c87 runtime(doc): fix return type in getqflist() and getloclist()
vim-patch:5268b9515 runtime(doc): clarify the help style a bit
vim-patch:7599a1899 runtime(doc): Mark the use of "\n" in the tabpanel as experimental
vim-patch:f39e7a89f runtime(doc): update win_findbuf() return value
vim-patch:db4ff9a40 runtime(doc): Add Swedish to help-translated list
vim-patch:f73bd2546 runtime(doc): clarify term_cols allowed range in terminal.txt
vim-patch:52507a733 runtime(doc): Mark 'scrollfocus' as non-functional
vim-patch:b8f58dd69 runtime(doc): Fix typos in version9.txt
vim-patch:ac1d379f3 runtime(doc): correct XDG runtimepath
vim-patch:48677d774 runtime(doc): Update version9.txt, update the description of getwininfo()
vim-patch:9ebb666b8 runtime(doc): Update runtimepath default locations
vim-patch:06a604dc8 runtime(doc): Mention xdg.vim in version9.txt
vim-patch:3c1594533 runtime(doc): update option type of 'termresize' option (after v9.2.0139)
vim-patch:751b59e53 runtime(doc): clarify :silent usage for system()/systemlist()
vim-patch:7a9548c40 runtime(doc): Update help tags references
vim-patch:3f53a2ce2 runtime(doc): Fix typo in cmdline.txt
vim-patch:9.2.0198: cscope: can escape from restricted mode
vim-patch:9.2.0205: xxd: Cannot NUL terminate the C include file style
vim-patch:9.2.0248: json_decode() is not strict enough
vim-patch:0646047b6 runtime(doc): clarify term_start() I/O behavior for Unix pty and MS-Windows ConPTY
vim-patch:9d9381fb2 runtime(doc): Tweak documentation style a bit
vim-patch:01e967021 runtime(doc): Update documentation on statusline click handler
vim-patch:9.2.0336: libvterm: no terminal reflow support
vim-patch:4b6f3f1d1 runtime(doc): Tweak documentation style in options.txt
vim-patch:32a30cb5a runtime(doc): Update docs about tabpanel
vim-patch:9.2.0404: redraw_listener_add() does not check secure flag
vim-patch:30b424073 runtime(doc): Update docs related to tabpanel
vim-patch:9.2.0412: channel: term_start() out_cb/err_cb no longer deliver raw chunks
vim-patch:e7e35b9e3 runtime(doc): clarify that viminfo file should be trusted
vim-patch:f793e9806 runtime(doc): clarify separator cell on status line rows
vim-patch:37d61dae7 runtime(doc): update doc for clipboard provider
vim-patch:07dc94023 runtime(doc): document new GTK4 GUI in version9.txt
vim-patch:d0af3bcee runtime(doc): fix help tags for removed/reused error codes
vim-patch:6574102fb runtime(doc): Tweak documentation style
vim-patch:9.2.0534: GTK UI does not support fullscreen mode
vim-patch:18c6b91ca runtime(doc): fix a typo in :write-plugin
vim-patch:66a42052e runtime(doc): document that +multi_byte is always enabled
vim-patch:4bc842b0b runtime(doc): Tweak some documentation style
vim-patch:9.2.0723: term_start() does not support "noclose"
vim-patch:26dfed583 runtime(doc): Add installer updates to version9.txt
vim-patch:5680e3b29 runtime(doc): clarify behaviour of 'title' and 'iconstring'
vim-patch:7b11d840c runtime(doc): Improve fuzzy file picker doc
vim-patch:648d16e4c runtime(doc): clarify 'icon' and 'title' interaction for screen 5
vim-patch:726ce3094 runtime(doc): improve suggested detection method for WSL
vim-patch:02c0a9040 runtime(doc): document &t_8u as &t_8f and &t_8b
vim-patch:ac78f14b9 runtime(doc): Tweak documentation style a bit
vim-patch:4a997e146 runtime(doc): GTK: document that "font" in a highlight group has no effect
vim-patch:b4ae16ca3 runtime(doc): clarify 'laststatus' effect
vim-patch:7203411bc runtime(doc): add a few more references to 'guiligatures'
vim-patch:9.2.0916: configure: honor `--disable-hardcopy-pango` with GTK UI
vim-patch:95e8f2e93 runtime(doc): v:windowid is x11 only
vim-patch:b4b3a62a4 runtime(doc): mark the GTK4 GUI as still experimental
vim-patch:a0f057dac runtime(doc): Tweak documentation style a bit
vim-patch:1d14eea96 runtime(doc): Add clipboard provider example for WSL
vim-patch:9.2.0973: Vim9: internal error when a class member is initialized with a closure
vim-patch:9.2.0974: tests: Test_clientserver_serverlist_list() is flaky
vim-patch:9.2.0975: Vim9: assignment to a member of an object member fails
vim-patch:9.2.0977: tests: test_terminal_visual_empty_listchars() is flaky
Problem: tests: test_substitute leaves swapfiles behind
Solution: Close open buffer using :bw!
be66c98572
Co-authored-by: Christian Brabandt <cb@256bit.org>
Remove the note about "this function is called only once per :find
command invocation".
fixes: vim/vim#21062bce3eb1fae
Co-authored-by: Christian Brabandt <cb@256bit.org>
Problem:
`signal_ignore_deadly` doesn't work for Windows, where the console still
may terminate Nvim during teardown (after `signal_teardown`), while it
is already trying to exit. Besides interrupting any housekeeping we are
doing, it results in an unpredictable exit code (flaky tests).
[Process exited -1073741510] // 0xC000013A STATUS_CONTROL_C_EXIT
Solution:
Register our own CTRL_CLOSE_EVENT handler which "blocks" the signal.
Note: if exit takes longer than 5s, Windows will consider the process
"hung" and kill it anyway.
Problem:
A deadly signal arriving during teardown can kill Nvim while it is
preserving swapfiles. `os_exit()` ignores deadly signals via
`signal_reject_deadly()`, but `signal_teardown()` => `uv_signal_stop()`
resets them to the default behavior, so SIGHUP arriving after that
kills the process:
[Process exited 129] // 128 + SIGHUP
This is a race when closing a pty: kernel sends SIGHUP to foreground
process group *and* the reads return EOF, so `chanclose()` on a TUI job
prepares to exit twice. This means it is unpredictable whether Nvim
exits 1 or is terminated.
Solution:
Ignore deadly signals once the watchers are closed. Only SIGKILL
interrupts it now.
Problem: Crash when closing the new current window during CTRL-W_x.
Solution: Remove a duplicate redraw of a window that should normally be
already mark for redraw in the previous call.
Notes:
- 8.2.1614 also flips searchcount()'s "recompute" default to FALSE;
- 8.2.1620 flips it back, so the default stays true here.
vim-patch:8.2.1601: Vim9: cannot use 'true" with garbagecollect()
2df4731042
vim-patch:8.2.1602: Vim9: cannot use 'true" with getbufinfo()
036c2cf719
vim-patch:8.2.1603: Vim9: cannot use "true" with getchar()
c08cc72947
vim-patch:8.2.1604: Vim9: cannot use "true" with getcompletion()
d217a87755
vim-patch:8.2.1614: Vim9: cannot pass "true" to searchcount()
597aaac9d2
vim-patch:8.2.1615: Vim9: cannot pass "true" to searchdecl()
30788d3d37
vim-patch:8.2.1616: Vim9: cannot pass "true" to synID()
fcb6d7082d
vim-patch:8.2.1617: Vim9: cannot pass "true" to win_splitmove()
4b9bd692bd
vim-patch:8.2.1619: Vim9: cannot pass "true" to spellsuggest()
7c27f337bf
vim-patch:8.2.1620: searchcount() test fails
4140c4f3ff
N/A patches:
vim-patch:8.2.1606: has() takes no second argument in Nvim
04637e243d
vim-patch:8.2.1610: list2str()/str2list() take no "utf8" argument
a48f786787
vim-patch:8.2.1611: nr2char() ignores its "utf8" argument
ed6a430fae
switch/case and goto labels v9.0.1481 and similar patches
from auto-N/A.
Blacklist as much as possible to auto-N/A later crypt patches.
Hunks without header in "*.h" is valid if only littered with #ifdefs
or change is isolated to 1st line
but "src/feature.h" should be mostly N/A
after Nvim removed "FEAT_" guards.
Wonder if certain patches with only "*.h" changes were mistakenly
marked N/A.
Problem: b:match_words groups "{" with the if/for/while/switch keywords
and "}" with "break" which breaks % matching on braces
Solution: Drop the brace and bracket groups, matchit appends
'matchpairs' by itself (Matthias Bruns).
matchit counts every alternative in a group instead of pairing the
alternatives with each other. Listing `{` alongside the if, for,
while, switch, struct and class keywords therefore makes a line such
as `for (...) {` count as two openers, and listing `break` alongside
`}` lets a brace pair with a break statement. As a result % on the
opening brace of a function does not move at all, and % on
`switch (x) {` jumps to `break;` instead of the closing brace.
Braces and brackets do not need to be listed: matchit appends
'matchpairs' to b:match_words by itself. Drop them and leave the
preprocessor group unchanged.
closes: vim/vim#2106408c74ce09a
Co-authored-by: Matthias Bruns <matthiasbruns35@gmail.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Problem:
The zh_TW catalog was stale, omitted 743 messages from the current source, and contained empty, fuzzy, and format-unsafe translations.
Solution:
Regenerate the catalog with the official translation build, preserve the focused translation repairs, and translate the reported E5200 diagnostic.
Problem:
As it turns out, when you have 17 different ways to "exit", you need to
plug 17 different holes.
Leak still reported by ASAN CI, even after 1eae512285f238788601.
ERROR: LeakSanitizer: detected memory leaks
strbuf_init src/cjson/strbuf.c:62:22
json_create_config src/cjson/lua_cjson.c:635:5
lua_cjson_new src/cjson/lua_cjson.c:2060:5
nlua_state_add_stdlib src/nvim/lua/stdlib.c:840:3
nlua_state_init src/nvim/lua/executor.c:973:3
Analysis:
`os_breakcheck()` may process a `exit_event` placed by
`exit_on_closed_chan()` during shutdown. This would re-enter
`preserve_exit()`, which then skips everything because it sees
`really_exiting=true`.
Solution:
Set `exiting` in `preserve_exit()`, not only in `getout()`.
Problem:
SIGTERM received during `os_exit()` can cause it to "nest":
os_exit src/nvim/main.c:720
preserve_exit src/nvim/main.c:910
deadly_signal src/nvim/os/signal.c:205
on_signal src/nvim/os/signal.c:240
signal_event src/nvim/event/signal.c:45
multiqueue_process_events src/nvim/event/multiqueue.c:159
event_teardown src/nvim/main.c:178
os_exit src/nvim/main.c:720
Solution:
Call `signal_reject_deadly()` at the start of `os_exit()` like
`preserve_exit()` already does.
Problem:
TSan CI, always at exit:
WARNING: ThreadSanitizer: use of an invalid mutex (e.g. uninitialized or destroyed)
#1 uv_mutex_lock
#2 tui_flush src/nvim/tui/tui.c:1708
#3 ui_client_event_flush
#4 parse_msgpack src/nvim/msgpack_rpc/channel.c:259
...
#10 event_teardown src/nvim/main.c:187
#11 os_exit src/nvim/main.c:720
...
#19 tinput_done_event src/nvim/tui/input.c:184
Analysis (guess):
`rpc_close_event()` may run during `event_teardown()` and reattach to
a restarted server, then `ui_client_attached=true` gets set and redraws
resume in an already-stopped TUI.
Solution:
Check `!exiting` in `rpc_close_event`, like we already do in
`channel_proc_exit_cb()`.
Problem:
Unreliable test on slow CI (ASAN/TSAN):
FAILED .../tui_spec.lua @ 3054: TUI exits immediately when stdin is closed
retry() attempts: 1
Expected: vim.NIL
Actual: { name = "nvim", pid = 33201, ppid = -1 }
The test asserts "immediate" exit of the Nvim process, but this may be
subject to OS delays outside of our control.
Solution:
Make the "timed out waiting for DA1" log conditional on the actual
timeout, and assert the logs in the test.
Problem:
Leak reported by ASAN CI, always at Lua state init.
ERROR: LeakSanitizer: detected memory leaks
strbuf_init src/cjson/strbuf.c:62:22
json_create_config src/cjson/lua_cjson.c:635:5
lua_cjson_new src/cjson/lua_cjson.c:2060:5
nlua_state_add_stdlib src/nvim/lua/stdlib.c:840:3
nlua_state_init src/nvim/lua/executor.c:973:3
...
SUMMARY: AddressSanitizer: 1055 byte(s) leaked in 2 allocation(s).
Analysis:
`getout()` may run during `free_all_mem()` (that's why it checks
`!entered_free_all_mem`). If that happens, the second `os_exit()`
returns early from `free_all_mem()` then `exit()` is called and Lua
state is never closed.
Solution:
Always call `nlua_free_all_mem()` in the early-return case.
Problem:
- Dot-repeat of a Visual selection prepared by a `<Cmd>` mapping,
results in E1255 and leaves Visual mode active.
- Visual-mode capture is implemented as a second, parallel "capture
engine": it re-composes a CmdSpec from cmdarg_T per key and decides
replayability from its own table of "void" key classes.
Solution:
- Model nested `normal_execute()` as a `CmdFrame` stack,
instead of a single module-scoped `stage`.
- Capture `<Cmd>` ":norm …" commands as subatoms from its nested frames.
- Produce every command exactly once; atom_push_raw() routes the atom to
the Visual composite while a selection is open, like it already does
for mapping composites.
- `v/pat<CR>d` is now repeatable and cascades.
Problem:
Flaky test:
RUN T1158 nvim.zip reports an incorrect archive password: 11092.84 ms FAIL
The prompt is detected only if the pty output *ends* with "password: ",
but a read may return the prompt plus following bytes.
Solution:
- Match anywhere in the output since the last password was sent. The
buffer is cleared before each send, so won't match stale text.
- Assert on the reported message, so a failure shows what was reported.
Problem:
With the addition of the `:help al` text object, you can now easily
format the whole buffer with `gqal`. However, `vim.lsp.formatexpr` only
uses `textDocument/rangeFormatting` which some language servers (like
gopls) don't support.
Solution:
- Fall back to `textDocument/formatting` if the whole buffer is being formatted
and the server doesn't support `textDocument/rangeFormatting`.
- In theory, these two methods should return the same response if the whole
buffer is being formatted, but I preserved the existing behaviour of
prioritising `textDocument/rangeFormatting` in case that does not hold (i.e.
LS bug).
- Also: `vim.lsp.formatexpr` had no tests at all, so actually add tests for it.
Native Lua modules loaded with `require` or `package.loadlib` resolve Lua
C API symbols from the nvim executable itself. Those symbols must stay in
the binary even when nothing inside nvim references them.
`rdynamic` is enough on Linux. On macOS the linker dead-strips
unreferenced symbols before rdynamic exports them, so `_lua_tothread` is
missing from the executable and loading such a module fails with:
symbol not found in flat namespace '_lua_tothread'
Disable section garbage collection so all non-static symbols are kept.
vim-patch:8.2.0514: several global functions are used in only one file
vim-patch:8.2.1814: missing change to remove "static"
vim-patch:8.2.2860: adding a text property causes the whole window to be redawn
vim-patch:8.2.3276: Vim9: exists() can only be evaluated at runtime
vim-patch:8.2.3753: Vim9: function unreferenced while called is never deleted
vim-patch:8.2.4669: in compiled code len('string') is not inlined
vim-patch:9.0.1821: Vim9 constructors are always static
vim-patch:9.0.1953: Misplaced comment in errors.h
vim-patch:9.1.0349: Vim9: need static type for typealias
vim-patch:9.1.0584: Warning about redeclaring f_id() non-static
vim-patch:ae3a8664b runtime(doc): Add explanation for Vim's IME
vim-patch:9.1.2033: tests: Test_terminal_cwd flaky when using ConPTY
vim-patch:9.2.0026: The ss_pending_cmds variable is visible globally
vim-patch:9.2.0643: Missing Image ifdefs
vim-patch:381da9f85 CI: Bump github/codeql-action
vim-patch:9.2.0965: GTK4: blurry text rendering
vim-patch:9.2.0966: GTK4: window opens two lines too small
vim-patch:0b7700e1a runtime(doc): add PREVENT LOADING section for pi_getscript.txt
vim-patch:068657ffc runtime(vimlogo): remove coincident lines and reshade vimlogo.svg
vim-patch:8.2.0149: maintaining a Vim9 branch separately is more work
vim-patch:8.2.0173: build fails with old compiler
vim-patch:8.2.0191: cannot put a terminal in a popup window
vim-patch:8.2.0194: some commands can cause problems in terminal popup
vim-patch:8.2.0196: blocking commands for a finished job in a popup window
vim-patch:8.2.0202: when 'lazyredraw' is set the window title may not be updated
vim-patch:8.2.0204: crash when using winnr('j') in a popup window
vim-patch:8.2.0320: no Haiku support
vim-patch:8.2.0328: no redraw when leaving term-normal mode in popup terminal
vim-patch:8.2.0364: printf test failing on Haiku
vim-patch:8.2.0367: can use :pedit in a popup window
vim-patch:8.2.0399: various memory leaks
vim-patch:8.2.0516: client-server code is spread out
vim-patch:8.2.0557: no IPv6 support for channels
vim-patch:8.2.0574: ipv6 feature not shown in :version output
vim-patch:8.2.0588: Putty does not use "sgr" 'ttymouse' by default
vim-patch:8.2.0596: crash in test49
vim-patch:8.2.0611: Vim9: no check for space before #comment
vim-patch:8.2.0613: Vim9: no check for space before #comment
vim-patch:8.2.0624: Vim9: no check for space before #comment
vim-patch:8.2.0641: Vim9: not expanded in :hardcopy and syn-include
vim-patch:8.2.0650: Vim9: script function can be deleted
vim-patch:8.2.0653: using uninitialized pointer
vim-patch:8.2.0656: MS-Windows: redrawing right screen edge may not be needed
vim-patch:8.2.0694: Haiku: channel and terminal do not work
vim-patch:8.2.0718: gcc warning for returning pointer to local variable
vim-patch:8.2.0747: cannot forcefully close all popups
vim-patch:8.2.0748: cannot get a list of all popups
vim-patch:8.2.1601: Vim9: cannot use 'true" with garbagecollect()
vim-patch:8.2.1602: Vim9: cannot use 'true" with getbufinfo()
vim-patch:8.2.1603: Vim9: cannot use "true" with getchar()
vim-patch:8.2.1604: Vim9: cannot use "true" with getcompletion()
vim-patch:8.2.1606: Vim9: cannot use "true" with has()
vim-patch:8.2.1610: Vim9: cannot pass "true" to list2str() and str2list()
vim-patch:8.2.1611: Vim9: cannot pass "true" to nr2char()
vim-patch:8.2.1614: Vim9: cannot pass "true" to searchcount()
vim-patch:8.2.1615: Vim9: cannot pass "true" to searchdecl()
vim-patch:8.2.1616: Vim9: cannot pass "true" to synID()
vim-patch:8.2.1617: Vim9: cannot pass "true" to win_splitmove()
vim-patch:8.2.1619: Vim9: cannot pass "true" to spellsuggest()
vim-patch:8.2.4597: LuaV_debug() not covered by tests
vim-patch:8.2.4648: handling LSP messages is a bit slow
vim-patch:8.2.4650: "import autoload" only works with using 'runtimepath'
vim-patch:8.2.4653: "import autoload" does not check the file name
vim-patch:8.2.0528: Vim9: function arguments insufficiently tested
vim-patch:9.0.0375: the footer feature is unused
vim-patch:9.1.0202: leaking memory in add_user() on failure
Problem: The hit-enter prompt fires whenever a message scrolls the screen.
When this happens while a mapping is being processed, it consumes
the mapping's next key, causing unexpected behavior for users.
Solution: Similar to what 9.1.1969 did for stuffed characters, skip the
hit-enter prompt when there are still keys pending from a mapping
in the typeahead buffer.
related: neovim/neovim#38298
related: neovim/neovim#20635
related: neovim/neovim#30890
closes: vim/vim#20753
AI assisted.
6025ea9e02
Co-authored-by: XiaowenHu96 <me@xiaowenhu.com>
Problem: A SAL rule longer than MAXWLEN is silently truncated to an
empty lead. set_sal_first() then reorders the sl_sal entries
by their index byte and can move the terminating sentinel out
of the last slot, so spell_soundfold_wsal() reads past the end
of the array, e.g. when soundfold() or spellsuggest() is used
(Erick Alex).
Solution: Bound the sound-folding loops against sl_sal.ga_len.
closes: vim/vim#210766ac008db96
Co-authored-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Problem: string_reduce() copies *rettv into argv[0] before calling
eval_expr_typval(). When the evaluator fails early, rettv is
never reset and still aliases argv[0] v_string.
clear_tv(&argv[0]) frees it, leaving rettv dangling and when
in vim9script get_func_tv() frees it again (Ave Dva).
Solution: Set rettv->v_type = VAR_UNKNOWN like what is done in
list_reduce() and tuple_reduce(), use tv_get_string_strict()
in f_reduce()
closes: vim/vim#21048
Supported by AI.
cd59994c45
Co-authored-by: Christian Brabandt <cb@256bit.org>