<feed xmlns='http://www.w3.org/2005/Atom'>
<title>neovim/src/nvim/api/command.c, branch master</title>
<subtitle>Vim-fork focused on extensibility and usability</subtitle>
<id>http://git.waynecole.info/neovim/atom?h=master</id>
<link rel='self' href='http://git.waynecole.info/neovim/atom?h=master'/>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/'/>
<updated>2026-04-24T18:13:24Z</updated>
<entry>
<title>fix(api): leak preview callback LuaRef in nvim_create_user_command #39357</title>
<updated>2026-04-24T18:13:24Z</updated>
<author>
<name>Barrett Ruth</name>
<email>62671086+barrettruth@users.noreply.github.com</email>
</author>
<published>2026-04-24T18:13:24Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=393f687503a319a6f521e8335b4dd8030e3ea67b'/>
<id>urn:sha1:393f687503a319a6f521e8335b4dd8030e3ea67b</id>
<content type='text'>
Problem:
Invalid `nvim_create_user_command` calls can leak the
`preview` callback reference after Neovim has taken ownership of it.

1. build with {a,l}san
2. run:
    ```sh
    &lt;path/to/nvim&gt; --headless -u NONE --clean +'lua
    for i = 1, 100 do
      pcall(vim.api.nvim_create_user_command,
        "some very epic stuff" .. i,
        {}, -- NOTE: this is INVALID (not a function or string)
        { preview = function() end })
    end
    vim.cmd("qa!")
    ' +qa
    ```
3. see:
    ```
    100 lua references were leaked!
    ```

Solution:
Clear `preview_luaref` in `err:`.</content>
</entry>
<entry>
<title>test: lint naming conventions #39117</title>
<updated>2026-04-16T13:35:58Z</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-04-16T13:35:58Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=11a1ec7df3af48208fb1271907c02ae060172d01'/>
<id>urn:sha1:11a1ec7df3af48208fb1271907c02ae060172d01</id>
<content type='text'>
Problem:
Naming conventions are not automatically checked.

Solution:
Add a check to the doc generator. Eventually we should extract this
somehow, but that will require refactoring the doc generator...

Note: this also checks non-public functions, basically anything that
passes through `gen_eval_files.lua` and `gen_vimdoc.lua`. And that's
a good thing.</content>
</entry>
<entry>
<title>refactor(api): rename buffer to buf (positional parameters) #39013</title>
<updated>2026-04-15T13:48:21Z</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-04-15T13:48:21Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=d0af4cd9094f3439382622906da5b1c5cd82c294'/>
<id>urn:sha1:d0af4cd9094f3439382622906da5b1c5cd82c294</id>
<content type='text'>
In 3a4a66017b74, 4d3a67cd6201, df8d98173cbc we renamed "buffer" to "buf"
in dict parameters and return-values.

This commit renames positional parameters. This is only "cosmetic", but
is intended to make it extra clear which name is preferred, since people
often copy existing code despite the guidelines in `:help dev-naming`.</content>
</entry>
<entry>
<title>docs: misc</title>
<updated>2026-03-13T19:32:01Z</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-03-12T11:48:18Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=682c77805c9e592be8c5932541609c9934ec9d1a'/>
<id>urn:sha1:682c77805c9e592be8c5932541609c9934ec9d1a</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix(api): nvim_parse_cmd on range-only, modifier-only commands #36665</title>
<updated>2026-03-13T10:06:39Z</updated>
<author>
<name>glepnir</name>
<email>glephunter@gmail.com</email>
</author>
<published>2026-03-13T10:06:39Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=f3ec657ebc02e8fb68e7cf46213333932325fe2f'/>
<id>urn:sha1:f3ec657ebc02e8fb68e7cf46213333932325fe2f</id>
<content type='text'>
Problem: nvim_parse_cmd rejects valid commands like `:1` (range-only)
or `aboveleft` (modifier-only).

Solution: allow empty command when range or modifiers exist, and handle
execution using existing range command logic.</content>
</entry>
<entry>
<title>docs: misc, build, lsp</title>
<updated>2025-11-23T00:32:45Z</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2025-11-19T03:43:14Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=bf820b1b94d843d2797f26ae69b91a852a1817f0'/>
<id>urn:sha1:bf820b1b94d843d2797f26ae69b91a852a1817f0</id>
<content type='text'>
</content>
</entry>
<entry>
<title>vim-patch:8.1.2077: the ops.c file is too big</title>
<updated>2025-09-26T04:29:40Z</updated>
<author>
<name>Jan Edmund Lazo</name>
<email>jan.lazo@mail.utoronto.ca</email>
</author>
<published>2025-09-22T02:53:04Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=406f9e3c8c66be05bfa196ad589a385dea932920'/>
<id>urn:sha1:406f9e3c8c66be05bfa196ad589a385dea932920</id>
<content type='text'>
Problem:    The ops.c file is too big.
Solution:   Move code for dealing with registers to a new file. (Yegappan
            Lakshmanan, closes vim/vim#4982)

https://github.com/vim/vim/commit/4aea03eb875613e3eae2125b84f02b7cd898b2f8

Co-authored-by: Bram Moolenaar &lt;Bram@vim.org&gt;
</content>
</entry>
<entry>
<title>refactor(build): remove INCLUDE_GENERATED_DECLARATIONS guards</title>
<updated>2025-08-14T07:34:38Z</updated>
<author>
<name>bfredl</name>
<email>bjorn.linse@gmail.com</email>
</author>
<published>2025-08-03T09:16:30Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=442f297c633375074a88133a9b3d8c08cad58dd0'/>
<id>urn:sha1:442f297c633375074a88133a9b3d8c08cad58dd0</id>
<content type='text'>
These are not needed after #35129 but making uncrustify still play nice
with them was a bit tricky.

Unfortunately `uncrustify --update-config-with-doc` breaks strings
with backslashes. This issue has been reported upstream,
and in the meanwhile auto-update on every single run has been disabled.
</content>
</entry>
<entry>
<title>fix(api): fix not capturing output in cmdline mode (#35322)</title>
<updated>2025-08-13T12:12:47Z</updated>
<author>
<name>zeertzjq</name>
<email>zeertzjq@outlook.com</email>
</author>
<published>2025-08-13T12:12:47Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=7b9512e613e1cc01f5a3ec05c2309a1ad2fba890'/>
<id>urn:sha1:7b9512e613e1cc01f5a3ec05c2309a1ad2fba890</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix(api): fix crash in command preview with % #35228</title>
<updated>2025-08-12T20:43:56Z</updated>
<author>
<name>glepnir</name>
<email>glephunter@gmail.com</email>
</author>
<published>2025-08-12T20:43:56Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=c7c3f9fc9c3a97cc8f48ea5cfffa1d0fc79abb5d'/>
<id>urn:sha1:c7c3f9fc9c3a97cc8f48ea5cfffa1d0fc79abb5d</id>
<content type='text'>
Problem: parse_cmdline() sets eap-&gt;cmdlinep to address of local parameter,
causing invalid memory access when expand_filename() tries to modify it.
This leads to crashes when typing '%' in user commands with preview=true
and complete=file.

Solution: Change parse_cmdline() signature to accept char **cmdline,
allowing cmdlinep to point to caller's variable for safe reallocation.</content>
</entry>
</feed>
