<feed xmlns='http://www.w3.org/2005/Atom'>
<title>neovim/src, 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-25T12:07:22Z</updated>
<entry>
<title>fix(channel): stack-buffer-overflow with exit during connection (#39387)</title>
<updated>2026-04-25T12:07:22Z</updated>
<author>
<name>zeertzjq</name>
<email>zeertzjq@outlook.com</email>
</author>
<published>2026-04-25T12:07:22Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=4ed2e66d2ec20c2bf0325283b0e785ca3abb15c0'/>
<id>urn:sha1:4ed2e66d2ec20c2bf0325283b0e785ca3abb15c0</id>
<content type='text'>
Problem:  When Nvim exits while connecting to a socket it leads to
          stack-buffer-overflow.
Solution: Associate the handle with the Stream and use the Stream's
          internal_close_cb to update the "closed" status.</content>
</entry>
<entry>
<title>fix(build): add `_core/time.lua` to gettext #39384</title>
<updated>2026-04-25T09:24:43Z</updated>
<author>
<name>Olivia Kinnear</name>
<email>git@superatomic.dev</email>
</author>
<published>2026-04-25T09:24:43Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=fb795cee3e1603de5fe632a4aad11650a6da88d4'/>
<id>urn:sha1:fb795cee3e1603de5fe632a4aad11650a6da88d4</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat(tui): restore 'ttyfast' to control tty requests #38699</title>
<updated>2026-04-24T18:45:20Z</updated>
<author>
<name>Kyle</name>
<email>50718101+kylesower@users.noreply.github.com</email>
</author>
<published>2026-04-24T18:45:20Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=66149ca6681102ff758b516984a1ccfe2ce0d974'/>
<id>urn:sha1:66149ca6681102ff758b516984a1ccfe2ce0d974</id>
<content type='text'>
Problem:
When running nvim on a remote machine over SSH, if there is high ping,
then bg detection may not complete in time. This results in a warning
every time nvim is started. #38648

Solution:
Restore 'ttyfast' option and allow it to control whether or not bg
detection is performed. Because this is during startup and before any
user config or commands, we use the environment variable
`NVIM_NOTTYFAST` to allow disabling `ttyfast` during initialization.</content>
</entry>
<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>fix(api): LuaRef leak in nvim_set_keymap on LHS too long (&gt;=66 bytes) #39351</title>
<updated>2026-04-24T18:10:28Z</updated>
<author>
<name>Barrett Ruth</name>
<email>62671086+barrettruth@users.noreply.github.com</email>
</author>
<published>2026-04-24T18:10:28Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=58aad59e1cf89e2bee0fc2e02c42506d2b1feeaf'/>
<id>urn:sha1:58aad59e1cf89e2bee0fc2e02c42506d2b1feeaf</id>
<content type='text'>
Problem: `nvim_set_keymap` leaks the `callback` `LuaRef` when the
LHS is too long.

Solution: Make `set_maparg_lhs_rhs` transfer `rhs_lua` to
`MapArguments` up front so the caller always owns the ref.</content>
</entry>
<entry>
<title>fix(path): normalize path slashes on Windows #37729</title>
<updated>2026-04-24T17:20:25Z</updated>
<author>
<name>tao</name>
<email>2471314@gmail.com</email>
</author>
<published>2026-04-24T17:20:25Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=f130922744657b731c24a842a85fd8a9f8058073'/>
<id>urn:sha1:f130922744657b731c24a842a85fd8a9f8058073</id>
<content type='text'>
Problem:
On Windows, path separators may become inconsistent for various reasons,
which makes normalization quite painful.

Solution:
Normalize paths to `/` at the entry boundaries and always use it
internally, converting back only in rare cases where `\` is really
needed (e.g. cmd.exe/bat scripts?).

This is the first commit in a series of incremental steps.

Note:
* some funcs won't respect shellslash. e.g. `expand/fnamemodify`
* some funcs still respect shellslash, but will be updated in a follow
  PR. e.g. `ex_pwd/f_chdir/f_getcwd`
* uv's built-in funcs always return `\`. e.g. `uv.cwd/uv.exepath`

Co-authored-by: Justin M. Keyes &lt;justinkz@gmail.com&gt;</content>
</entry>
<entry>
<title>feat(api): nvim_echo(percent=nil) means "unknown" progress #39029</title>
<updated>2026-04-24T15:57:35Z</updated>
<author>
<name>Peter Cardenas</name>
<email>16930781+PeterCardenas@users.noreply.github.com</email>
</author>
<published>2026-04-24T15:57:35Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=27191e0f4f4f9086180a8fbe3e52c1c280a70b09'/>
<id>urn:sha1:27191e0f4f4f9086180a8fbe3e52c1c280a70b09</id>
<content type='text'>
Problem:
No way to signal "unknown" or "indeterminate" progress percentage.

Solution:
Treat percent=nil as "indeterminate" percent.</content>
</entry>
<entry>
<title>fix(options): repair stale UI state after `:set all&amp;` #39026</title>
<updated>2026-04-23T22:37:59Z</updated>
<author>
<name>Barrett Ruth</name>
<email>62671086+barrettruth@users.noreply.github.com</email>
</author>
<published>2026-04-23T22:37:59Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=c39be1713153ddb83843cc431bc56ef24558a3f9'/>
<id>urn:sha1:c39be1713153ddb83843cc431bc56ef24558a3f9</id>
<content type='text'>
Problem: `set all&amp;` resets option values directly and leaves UI-derived state stale for `guicursor`, `laststatus`, and `showtabline`.

Solution: Repair some of the stale UI state in the bulk reset path by reparsing `guicursor`, refreshing statusline state, and recomputing tabline/window rows.</content>
</entry>
<entry>
<title>feat(excmd): add :uptime command #39331</title>
<updated>2026-04-23T21:11:59Z</updated>
<author>
<name>Olivia Kinnear</name>
<email>git@superatomic.dev</email>
</author>
<published>2026-04-23T21:11:59Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=645a588aa60f4e816a704c97685e2036958af176'/>
<id>urn:sha1:645a588aa60f4e816a704c97685e2036958af176</id>
<content type='text'>
Problem
Nvim marks its v:starttime, but there is no user-friendly way to get Nvim's uptime.

Solution
Add :uptime (based loosely on uptime(1)).</content>
</entry>
<entry>
<title>fix(lua): don't strip debuginfo in precompile module #39191</title>
<updated>2026-04-23T16:42:41Z</updated>
<author>
<name>phanium</name>
<email>91544758+phanen@users.noreply.github.com</email>
</author>
<published>2026-04-23T16:42:41Z</published>
<link rel='alternate' type='text/html' href='http://git.waynecole.info/neovim/commit/?id=398f2c108d8ee3ce7ac950b60520a9569b63da67'/>
<id>urn:sha1:398f2c108d8ee3ce7ac950b60520a9569b63da67</id>
<content type='text'>
Problem:
debug.getinfo on bytecode module/func don't give you detail source info.

Solution:
- Use `loadstring`+`string.dump` to replace LUAC_PRG(`luac`/`luajit -b`)
- `string.dump(…,false)` to generate non-strip version bytecode
- `loadstring(…,fname)` to specify the full source name

BEFORE:

    $ nvim --clean +'=debug.getinfo(vim.fn.maparg("]&lt;Space&gt;", "n", 0, 1).callback, "Sl")' --headless +q
    {
      currentline = -1,
      lastlinedefined = 456,
      linedefined = 452,
      short_src = "?",
      source = "=?",
      what = "Lua"
    }

AFTER:

    $ nvim --clean +'=debug.getinfo(vim.fn.maparg("]&lt;Space&gt;", "n", 0, 1).callback, "Sl")' --headless +q
    {
      currentline = -1,
      lastlinedefined = 456,
      linedefined = 452,
      short_src = "/home/xx/b/neovim/runtime/lua/vim/_core/defaults.lua",
      source = "@/home/xx/b/neovim/runtime/lua/vim/_core/defaults.lua",
      what = "Lua"
    }</content>
</entry>
</feed>
