aboutsummaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAge
* [extregs] implement tab completion for ~ menu.extregsJosh Rahm22 hours
|
* [extregs] update the register statusmsg to show the full extreg name.Josh Rahm24 hours
| | | | Now it shows something like `5 lines yanked into "~my.extreg`
* [extregs] implement dot redo functionality for extregs.Josh Rahm24 hours
|
* [extregs] fixed rebase.Josh Rahm40 hours
|
* [feat] comprehensive alias tests and fixes.Josh Rahm41 hours
| | | | Alias semantis are identical to using the full extreg name.
* [bugifx] extregs fix output for :registers to not include extregs if they ↵Josh Rahm41 hours
| | | | don't exist
* [extregs] add 'extregs' to has() function.Josh Rahm41 hours
| | | | Add tests for aliases.
* [extregs] Add support for :registers with extregs and aliases.Josh Rahm41 hours
|
* [extregs] implemented aliases.Josh Rahm41 hours
|
* [extregs] tests are passing (at least all those that pass in upstream/master)Josh Rahm41 hours
| | | | Added a big test suite for extregs
* [extregs] switch to a hash map for an arbitrary number of extregs.Josh Rahm41 hours
|
* [extregs] move extreg_commit into op_yank_reg.Josh Rahm41 hours
| | | | This is the lower level operation used by delete and change.
* [extregs] add support for extregs in setreg and getreg.Josh Rahm41 hours
|
* [extregs] implement support for esoteric register access.Josh Rahm41 hours
| | | | | | | - support for let syntax: let @~extreg_name = ... - support for expressions: let x = @~extreg_name - support for cmdline <C-r> - support for ex commands: <cmd>put ~extreg_name
* [extreg] syntax working for let @~extreg.name = ...Josh Rahm41 hours
|
* [feat] extregistersJosh Rahm41 hours
| | | | | | | | | | | | | | | | | | | | | Implements "extended registers" Extended registers provide access to a separate namespace of registers backed by custom lua callback functions. A new special register ("~) is introduced, which prompts the user for the name of an extregistr to yank or paste from. This enables file-backed or cloud-synced or other arbitrary register behavior. One can now use: `"~file_extreg<cr>yy` to yank into the "file_extreg" register. AI-assisted: Qwen3-Coder
* docs(help): specify h4 "function signature" format #42434masterJustin M. Keyes2 days
| | | | | | | | | | | | | | | | | | | | | Work towards enabling ["flow" layout](https://github.com/neovim/neovim/blob/9244da12e400ec0291450a5e9400d995e7a29b83/src/gen/gen_help_html.lua#L86-L88) in all `:help` files. Problem: The final boss of vimdoc pseudo-structure: Vim's quasi-headings on function signatures and excmd docs is visually distinctive but too inconsistent for a nice parse rule. Solution: - Define the quasi-heading format as an "h4" variant, specified at `:help help-tag-heading`. - For simplicity and predictability, it is defined as any line that ends with a help tag(s) preceded by 2 or more spaces (or 1 tab). - Update existing docs. - This one-time update has a lot of changes, but is very unlikely to conflict with ported Vim-patches because (1) Vim rarely adds new *excmds* that we want, and (2) *function* docs are auto-generated. ref https://github.com/neovim/tree-sitter-vimdoc/issues/110
* feat(defaults): drop TAB from 'termpastefilter' #42433Justin M. Keyes2 days
| | | | | | | | Problem: By default, 'termpastefilter' removes TAB chars when pasting to a :terminal. Very annoying, and does not improve "security". Solution: Drop "HT" from the 'termpastefilter' default.
* docs: update version.c #42344github-actions[bot]2 days
| | | | | | | | | | | | | | | vim-patch:9.2.1181: patch 9.2.1181: MS-Windows: compile warnings with clang 23 vim-patch:9.2.1188: patch 9.2.1188: prop_type_get() does not return the "override" item vim-patch:ce7c78578 AGENTS.md does not explain how to write garbage collection tests vim-patch:9.2.1192: patch 9.2.1192: Compile warning when FEAT_DIFF is disabled vim-patch:9.2.1193: patch 9.2.1193: Vim9: dict type with type variable not checked in generic function vim-patch:3f1281d50 CI: enable Linux coverage for string-valued action input vim-patch:9.2.1202: patch 9.2.1202: Vim9: crash on error in a long "implements" list vim-patch:9.2.1181: patch 9.2.1181: MS-Windows: compile warnings with clang 23 vim-patch:9.2.1084: Cannot check a script without executing it vim-patch:9.2.1140: Vim9: :def in legacy script can create a script variable vim-patch:9.2.1184: the dry run feature not well received
* fix(options): out-of-range number in 'iskeyword' aborts Nvim (#42410)ump45nose3 days
| | | | | | | | | | | | Problem: A number in 'iskeyword', 'isfname' or 'isident' that overflows (e.g. via a modeline) hits abort() or an assert in getdigits_int(). Solution: Parse the numbers non-strictly so an out-of-range value gives E474. Fixes #42409 AI-assisted
* docs: flow layoutJustin M. Keyes3 days
| | | | | | | | | | Work towards enabling "flow" layout in most `:help` files. Since [tables are supported in help](https://github.com/neovim/tree-sitter-vimdoc#tables), it's now possible to render most help files as ["flow" layout](https://github.com/neovim/neovim/blob/9244da12e400ec0291450a5e9400d995e7a29b83/src/gen/gen_help_html.lua#L86-L88) instead of the legacy fixed-width layout. Besides [improved HTML rendering](https://github.com/neovim/neovim/pull/42381#discussion_r4285705739), flow layout will allow `:help` presentation-mode to un-hardwrap text blocks.
* docs: cleanup invalid help sourceJustin M. Keyes3 days
| | | | | | | | | | Work towards enabling "flow" layout in most `:help` files. Since [tables are supported in help](https://github.com/neovim/tree-sitter-vimdoc#tables), it's now possible to render most help files as ["flow" layout](https://github.com/neovim/neovim/blob/9244da12e400ec0291450a5e9400d995e7a29b83/src/gen/gen_help_html.lua#L86-L88) instead of the legacy fixed-width layout. Besides [improved HTML rendering](https://github.com/neovim/neovim/pull/42381#discussion_r4285705739), flow layout will allow `:help` presentation-mode to un-hardwrap text blocks.
* vim-patch:9.2.1198: memory leak with 'quickfixtextfunc' #42405zeertzjq3 days
| | | | | | | | | | | | Problem: The list returned by 'quickfixtextfunc' is never unreferenced, so it is not freed until garbage collection. Solution: Unreference the list after filling the quickfix buffer (Volodymyr Chernetskyi). closes: vim/vim#21437 https://github.com/vim/vim/commit/84d86c65d3bc612320c3d38c2fc987c5cdd81ae9 Co-authored-by: Volodymyr Chernetskyi <19735328+chernetskyi@users.noreply.github.com>
* Merge pull request #42404 from zeertzjq/vim-9.2.1196zeertzjq3 days
|\ | | | | vim-patch:9.2.{1196,1199}
| * vim-patch:9.2.1199: case-folded regexp matches can end inside a UTF-8 characterzeertzjq3 days
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: Case-folded regexp matches can end inside a UTF-8 character when the input is longer than the literal pattern. Solution: Return the input byte length after a successful comparison even when it exceeds the pattern byte length, and test literal replacements and backreferences (Volodymyr Chernetskyi). related: vim/vim#14756 related: vim/vim#21212 closes: vim/vim#21439 https://github.com/vim/vim/commit/c9a9517ce8498256b50576e8291709083b607d70 Co-authored-by: Volodymyr Chernetskyi <19735328+chernetskyi@users.noreply.github.com>
| * vim-patch:9.2.1196: NFA literal matches miss characters with different ↵zeertzjq3 days
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | case-folded widths Problem: NFA literal matches miss characters with different case-folded widths, including when retrying after a failed suffix match. Solution: Advance past the actual input character in both paths and test string and buffer searches (Volodymyr Chernetskyi). related: vim/vim#14294 closes: vim/vim#21438 https://github.com/vim/vim/commit/b3affdd29ea4b1017f5c870824a9e4576731fa95 Co-authored-by: Volodymyr Chernetskyi <19735328+chernetskyi@users.noreply.github.com>
* | docs: cleanup #42395Justin M. Keyes3 days
|/ | | | | | | | | | Work towards enabling "flow" layout in most `:help` files. Since [tables are supported in help](https://github.com/neovim/tree-sitter-vimdoc#tables), it's now possible to render most help files as ["flow" layout](https://github.com/neovim/neovim/blob/9244da12e400ec0291450a5e9400d995e7a29b83/src/gen/gen_help_html.lua#L86-L88) instead of the legacy fixed-width layout. Besides [improved HTML rendering](https://github.com/neovim/neovim/pull/42381#discussion_r4285705739), flow layout will allow `:help` presentation-mode to un-hardwrap text blocks. https://github.com/neovim/neovim/issues/31825
* fix(startup): respect --noplugin when used with --clean #42362Max Coplan4 days
| | | | | | | | | | | | | | | Problem: When starting Nvim with both `--clean` and `--noplugin` (in either order), `--noplugin` is silently ignored and built-in runtime plugins are loaded anyway. `command_line_scan()` sets `p_lpl = false` for `--noplugin`, and `--clean` sets `params.use_vimrc = "NONE"` and `params.clean = true`, which later overwrites `p_lpl` back to `true` via `p_lpl = vimrc_none ? params.clean : p_lpl`. Solution: Only reset `p_lpl = false` when `vimrc_none && !params.clean`, preserving `p_lpl = false` if `--noplugin` was passed. AI-assisted
* docs: cleanup tables, highlights.scm #42381Justin M. Keyes4 days
| | | highlights.scm: `#match` is slow, prefer `#lua-match`.
* vim-patch:9.2.1197: :autocmd completion fails after ++args (#42384)glepnir4 days
| | | | | | | | | Problem: Cannot complete the command after ++once or ++nested for :autocmd. Solution: Skip over these flags in set_context_in_autocmd() (glepnir). closes: vim/vim#21429 https://github.com/vim/vim/commit/cf57ec0db8a9bc9926c7ede86a8586f057545723
* fix(options): extend dry-run validationLewis Russell4 days
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: nvim_set_option_value() dry runs skip checks in did_set_* callbacks. This logic also prepares values needed to apply the option, such as tab widths or a compiled regexp. Moving the checks into validation callbacks needs a way to save that work for did_set_*. Solution: Store prepared values in optset_T so did_set_* can consume them after the option is stored. Dry runs perform the same validation, then free the prepared values without changing live state. This extends dry-run validation for: - 'cedit': reject invalid command-line window keys. - 'completeitemalign': require each completion column exactly once. - 'cursorlineopt': reject empty values and conflicting line modes. - 'encoding': accept only UTF-8 and its aliases. - 'fileencoding': reject lists and local changes with 'nomodifiable'. - 'messagesopt': require mandatory fields and enforce numeric limits. - 'spellcapcheck': return regexp errors, including under :silent!. - 'spellsuggest': reject conflicting suggestion modes. - 'varsofttabstop' and 'vartabstop': reject invalid tab widths. - 'wildmode': reject more than four completion stages. 'makeencoding' also uses the shared encoding preparation. Separating value preparation exposed a bug in 'vartabstop' and 'varsofttabstop': failed assignments could discard local tab widths, and global assignments could overwrite them. Fix this by preparing new widths separately and applying them only after a valid local assignment. AI-assisted
* feat(docs): generate PDFJustin M. Keyes4 days
| | | | | Generate PDF using `chrome`. TODO: we probably don't need the `typst` codepath.
* feat(docs): table renderingJustin M. Keyes4 days
| | | | | | Render tables in both `:help` and generated HTML. Use NBSP (nonbreaking space) char in empty table cells.
* fix(docs): listitems with codeblocks #42367Justin M. Keyes5 days
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: - `<` before a listitem (`< - foo`) is not concealed. - Codeblock HTML has extra blank lines. - Codeblock in a listitem ends the listitem, so HTML docs drop the rest of the item and its nesting. Example from `:h nvim_open_win()`: ``` • border: … the double-box style can be specified as: > [ "╔", "═" ,"╗", "║", "╝", "═", "╚", "║" ]. < If fewer than eight chars are given, they will be repeated. • bufpos: … tree-sitter-vimdoc v4.1.0: (block (line_li (prefix) (line) (codeblock (code (line))))) (block (line) ; "If fewer…" (line_li (prefix) (line) (line))) ; "bufpos" tree-sitter-vimdoc v4.2.0: (block (line_li (prefix) (line) (codeblock (code (line))) (line)) ; "If fewer…" (line_li (prefix) (line) (line))) ; "bufpos" ``` Solution: - Bump tree-sitter-vimdoc to v4.2.0. https://github.com/neovim/tree-sitter-vimdoc/pull/174 - gen_help_html: get listitem indent from its first line - gen_help_html: don't double codeblock newlines. - highlight query: conceal `<` in `line_li`. - docs: fix doc sources where a blank line was missing after listitems followed by non-listitem text.
* fix(search): crash on "//e" with only a substitute pattern (#42345)Jonas Örnfelt5 days
| | | | | | | | | | | | | | | vim-patch:9.2.1191: crash with "//e" when only a substitute pattern exists Problem: Crash when using "//e" or "//" while there is a substitute pattern but no previous search pattern (after v9.2.0374). Solution: Use the previous pattern selected for an empty pattern (Jonas Ornfelt). related: vim/vim#19998 closes: vim/vim#21533 AI-assisted https://github.com/vim/vim/commit/c58607c9a0579de0da909fc46f68144a01378af1
* docs: fix invalid vimdoc #42353Justin M. Keyes5 days
|
* fix(api): nvim_buf_call() from expression for window in non-current tabpage ↵Justin M. Keyes5 days
| | | | | | | | | | | | | | | | #42352 Problem: - nvim_buf_call() aborts (assert) when called from an expression evaluated for a window in another tabpage ('foldexpr', 'statusline'), because `curwin` is not in `curtab`. - After it returns, `curwin` is wrong if it switched windows. - `vim._with{win=…, keepcwd=true}` does not undo `:lcd` if `win` is in another tabpage. Solution: - Allow `curwin` outside `curtab`, and restore if it was outside `curtab` at `ctx_switch()`. - Find the target window in any tabpage when restoring its dirs.
* fix(api): nvim_set_option_value() "remove" ignores non-adjacent items #42351Justin M. Keyes5 days
| | | | | | | | | | | | | Problem: `nvim_set_option_value('fo', {'c','r','o'}, {operation='remove'})` does nothing on "jcqrol": the items are joined into one `:set-=` value, which only matches a contiguous substring. Removing map keys, e.g. {'eol','space'} from 'listchars', never matches. `vim.opt:remove{…}` inherits this. (Regression from f34ee3da80e8; 429338e74bf4 fixed the case where the flags are adjacent and in order.) Solution: Remove each item separately.
* fix(terminal): [Process exited] msg hides last line of full screen #42349Justin M. Keyes5 days
| | | | | | | | | Problem: If a job exits with cursor at last row, the `[Process exited]` message covers the text of that row. Solution: Start a new line before showing the message, like the old `\r\n[Process exited]` did.
* vim-patch:9.2.1183: fuzzy completion order is unstable (#42343)zeertzjq6 days
| | | | | | | | | | | Problem: Fuzzy completion sort order is unstable for equal scores. Solution: Remember the list position when a match is first scored and use it to break ties (glepnir). closes: vim/vim#21443 https://github.com/vim/vim/commit/8c735cae9e589d1e587127386d6bf6869caed93b Co-authored-by: glepnir <glephunter@gmail.com>
* vim-patch:9.2.1182: autocommand checks paths for non-existing events (#42342)zeertzjq6 days
| | | | | | | | | | | | | | | Problem: has_autocmd() expands file names for events without registered autocommands. Solution: Return early when no autocommand patterns exist for the event (Yasuhiro Matsumoto). With my configuration on MS-Windows startup goes from 259 ms to 246 ms (median of 9 runs). closes: vim/vim#21449 https://github.com/vim/vim/commit/97a721d6c599829b242649d13844c4baa0f16b8a Co-authored-by: Yasuhiro Matsumoto <mattn.jp@gmail.com>
* feat(multicursor): ]C [C use previous cursors if mc inactive #42267IOCRYPOSTO6 days
| | | | | | | | | | | | Problem: After clearing cursors, "]C" "[C" do nothing, although the previous cursor positions ("gQ") may still be useful as marks. Solution: If multicursor is not active, "]C" "[C" iterate the "nvim.multicursor.last" extmarks. They also work as an operator motion ("d]C"), since there is no cascade. AI-assisted
* fix(channel): emit ChanInfo for :detach! #42295Sanzhar Kuandyk6 days
| | | | | | | | | Problem: :detach! changes the channel's detach property without emitting ChanInfo, so plugins watching channel updates cannot react to changes. Solution: Schedule ChanInfo after setting detach=true. Add a test covering emit on :detach!. AI-assisted
* fix(terminal): missing "?" in theme-update sequence #42297Zoe Roux6 days
| | | | | | | | | | | | | | | | Problem: With DEC mode 2031 enabled, the terminal sends "CSI 997 ; Ps n" when background changes. The spec[1] defines the notification as "CSI ? 997 ; Ps n", same as the reply to "CSI ? 996 n" (which libvterm already sends correctly). Strict parsers (e.g. opentui) ignore it, so apps running in :terminal never follow theme changes. Nvim itself doesn't notice because its TUI accepts 997 DSRs without the marker. Solution: Send "CSI ? 997 ; Ps n". [1] https://contour-terminal.org/vt-extensions/color-palette-update-notifications/ AI-assisted
* fix(ops): '] and yank width of forced-blockwise motion #42321IcyJerry6 days
| | | | | | | | | | | | | | | Problem: `g@<C-v>j` and `y<C-v>j` set '] one char short of the block corner, so 'operatorfunc' cannot get the block. With 'virtualedit' "block", "y" also yanks a short last line one column narrow. Solution: - Decide `inclusive` from the motion's own type, before get_op_vcol() makes it blockwise (like Vim). - Never exclude the end of a block from '] (`g@<C-v>l`): a block includes its corner. Co-authored-by: IcyJerry <263879414+Icyjerry@users.noreply.github.com> Co-authored-by: Nagato Yuzuru <nagato@yuzuru.me>
* refactor(cmdatom): add payload in atom_from_frame() #42325Justin M. Keyes6 days
| | | | | | | Problem: Redundant code led to bugs like 2323746bfe4af534979249b051e7ada11c63b389 Solution: Append the payload in atom_from_frame().
* docs: update version.c #42229github-actions[bot]7 days
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | vim-patch:8.2.2338: patch 8.2.2338: Vim9: no error if using job_info() result wrongly vim-patch:9.0.1572: patch 9.0.1572: error messages are not translated vim-patch:86fcada95 translation(ru): adjust tutor/README.ru.utf-8.txt (#13789) vim-patch:9.1.0500: patch 9.1.0500: cannot switch buffer in a popup vim-patch:c5e24ee24 runtime(doc): add a note for netrw bug reports vim-patch:2e359b98f runtime(tutor): fix typo in Chapter 2 vim-patch:5ccf7f140 runtime(tutor): regenerated some translated tutor1 files vim-patch:0b5926f77 translation(it): include Italian version of tutor chapter 2 vim-patch:cdbbdb9ec runtime(tutor): fix another typo in tutor2 vim-patch:b183f5028 runtime(tutor): Reformat tutor1 vim-patch:802183082 runtime(tutor): updated Russian translation for tutor chapter 1 vim-patch:5f2a95955 runtime(doc): symlinking netrw.txt causes problems during install on Windows vim-patch:8322923b4 translation(ru): include Russian translation for chapter two of the tutorial vim-patch:721be7fd0 runtime(doc): add back help tag "pi_netrw.txt" vim-patch:951d025af runtime(tutor): Add Galician language versions of tutor1 and tutor2 vim-patch:ba19b6589 runtime(doc): fix typo in description of :redrawtabpanel vim-patch:30dcd0e1f runtime(tutor): apply fixes to runtime/tutor/tutor2 vim-patch:9.1.1494: patch 9.1.1494: runtime(tutor): no French translation for Chapter 2 vim-patch:477c893c0 runtime(tutor): remove duplicate tutor1.zh vim-patch:b87f133b0 runtime(tutor): Add a section on text objects and special registers to Chapter 2 vim-patch:0ef50d9d8 runtime(tutor): Update German translation for the tutor vim-patch:9cd512c7f runtime(tutor): Improve Spanish translation of chapter 1 vim-patch:58fafb654 runtime(tutor): Add Spanish translation for chapter 2 vim-patch:48940d94f runtime(tutor): Improve style for chapter 2 vim-patch:bbf616a9d runtime(tutor): Improve Spanish translations vim-patch:e74e40dc4 runtime(tutor): Improve Spanish translation for chapter 2 after 757b42a vim-patch:a4ee22529 translation(sv): Add Swedish translation of tutor2 vim-patch:0eb8e4de4 translation(sv): Update tutor1.sv to version 1.7 vim-patch:89296da39 translation(it): Add Italian translation of tutors README vim-patch:5979d7dd7 PR template duplicates the commit message and needs edits to fill in vim-patch:9.2.1170: patch 9.2.1170: GTK2 compile error when image feature is enabled vim-patch:9.2.1172: patch 9.2.1172: Vim9: crash when lambda assigns to item of outer argument vim-patch:2248250b4 CI: Bump msys2/setup-msys2 vim-patch:9.1.0807: tests: having 'nolist' in modelines isn't always desired
* fix(api): crash on invalid :tab address #42328glepnir7 days
| | | | | | | | Problem: nvim_parse_cmd("'btab", {}) and typing ":'btab" crash, parse_cmdline() continues with a NULL eap->cmd after an invalid :tab address. Solution: Fail if parse_command_modifiers() set an error.
* fix(ui): ext_messages/ui2: stale 'rulerformat' "[+]" after :write #42315Justin M. Keyes7 days
| | | | | | | | | | | | | | Problem: With 'ruler' in the cmdline ('laststatus=0') and ext_messages (ui2), a 'rulerformat' "%m" does not update the "[+]" indicator after ":write", until a cursor-move. Analysis: `redraw_buf_status_later()` only marks windows with a statusline or winbar. The symptom is hidden by the legacy message grid because the write message overwrites the cmdline, which redraws the ruler. Solution: Also mark the cmdline 'ruler', like `status_redraw_buf()`.
* fix(multicursor): Visual-mode mapping drops getchar() payload #42324Justin M. Keyes7 days
| | | | | | | | | | Problem: A Visual-mode mapping that reads input (`getchar()`) does not include that input when cascading to other cursors (they only see ESC). OTOH, Normal-mode mappings do replay the input. Solution: Append the payload to the Visual session's Lua-mapping subatom, and to the session-ending command (`:<C-u>…` mapping).