<feed xmlns='http://www.w3.org/2005/Atom'>
<title>rneovim.git/runtime/lua/vim/_core/mcursor.lua, branch extregs</title>
<subtitle>Neovim fork with Rahm's personal hacks.</subtitle>
<link rel='alternate' type='text/html' href='http://git.josher.dev/rneovim.git/'/>
<entry>
<title>feat(multicursor): ]C [C use previous cursors if mc inactive #42267</title>
<updated>2026-10-13T14:58:50+00:00</updated>
<author>
<name>IOCRYPOSTO</name>
<email>aadityaiitian1515@gmail.com</email>
</author>
<published>2026-10-13T14:58:50+00:00</published>
<link rel='alternate' type='text/html' href='http://git.josher.dev/rneovim.git/commit/?id=544d8cd7e6289ca98e9104b55cdb963eeda51755'/>
<id>544d8cd7e6289ca98e9104b55cdb963eeda51755</id>
<content type='text'>
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</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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</pre>
</div>
</content>
</entry>
<entry>
<title>refactor(multicursor)!: drop nvim_mcursor #42156</title>
<updated>2026-09-30T11:11:40+00:00</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-09-30T11:11:40+00:00</published>
<link rel='alternate' type='text/html' href='http://git.josher.dev/rneovim.git/commit/?id=a8062120ad8c144d5da853a611dc9d51708f2d83'/>
<id>a8062120ad8c144d5da853a611dc9d51708f2d83</id>
<content type='text'>
Problem:
`nvim_mcursor` is not fully baked, and not strongly motivated,
currently. The main programmatic interface for cursors is the
"nvim.multicursor" extmarks namespace.

Solution:
Drop `nvim_mcursor`. Add an internal hook so that multicursor can react
when extmarks are added to the "nvim.multicursor" namespace.

TODO:
If extmarks/namespaces are clumsy to work with, we should _fix that_
rather than adding wrappers.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Problem:
`nvim_mcursor` is not fully baked, and not strongly motivated,
currently. The main programmatic interface for cursors is the
"nvim.multicursor" extmarks namespace.

Solution:
Drop `nvim_mcursor`. Add an internal hook so that multicursor can react
when extmarks are added to the "nvim.multicursor" namespace.

TODO:
If extmarks/namespaces are clumsy to work with, we should _fix that_
rather than adding wrappers.</pre>
</div>
</content>
</entry>
<entry>
<title>feat(multicursor): zq operator; cursor-local marks #42148</title>
<updated>2026-09-29T23:51:43+00:00</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-09-29T23:51:43+00:00</published>
<link rel='alternate' type='text/html' href='http://git.josher.dev/rneovim.git/commit/?id=ac9ddec6b855a54193899f95da2d94d8224b31af'/>
<id>ac9ddec6b855a54193899f95da2d94d8224b31af</id>
<content type='text'>
Problem:
- `[count]Q` and `{Visual}Q` are implemented as ad hoc utils, because
  `Q` is not an "operator".
- `Q` always "toggles", it is not "idempotent".
- Various *cursor-relative* marks (`'.`, `'[`) are not saved/restored
  per-cursor, so they don't work during cascade.
- Insert cascade clobbers the primary's `'^` and changelist.

Solution:
- Introduce the `zq{motion}` operator, which places cursors at every
  reachable `{motion}`.
  - `{Visual}Q` is now an alias to `{Visual}zqj`.
- Introduce `1Q` and `2Q` for idempotent cursor placement.
  - Drop `[count]Q`, it's redundant with `zqgn`.
- Classify cursor-relative marks as `type=motion` instead of
  `type=jump`. Save/restore per-cursor during cascade.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Problem:
- `[count]Q` and `{Visual}Q` are implemented as ad hoc utils, because
  `Q` is not an "operator".
- `Q` always "toggles", it is not "idempotent".
- Various *cursor-relative* marks (`'.`, `'[`) are not saved/restored
  per-cursor, so they don't work during cascade.
- Insert cascade clobbers the primary's `'^` and changelist.

Solution:
- Introduce the `zq{motion}` operator, which places cursors at every
  reachable `{motion}`.
  - `{Visual}Q` is now an alias to `{Visual}zqj`.
- Introduce `1Q` and `2Q` for idempotent cursor placement.
  - Drop `[count]Q`, it's redundant with `zqgn`.
- Classify cursor-relative marks as `type=motion` instead of
  `type=jump`. Save/restore per-cursor during cascade.</pre>
</div>
</content>
</entry>
<entry>
<title>fix(lua): enable nil-safety diagnostics in runtime code</title>
<updated>2026-09-25T09:28:19+00:00</updated>
<author>
<name>Lewis Russell</name>
<email>lewis6991@gmail.com</email>
</author>
<published>2026-09-24T12:30:07+00:00</published>
<link rel='alternate' type='text/html' href='http://git.josher.dev/rneovim.git/commit/?id=d7af8707026968887ea4ee3a4e6fa51fd4372033'/>
<id>d7af8707026968887ea4ee3a4e6fa51fd4372033</id>
<content type='text'>
Enable EmmyLua's need-check-nil diagnostic and resolve nullable values
through more precise types, explicit invariants, and guards for missing
runtime state. Keep analyzer-specific workarounds local and update the
affected API documentation.

Exclude the bundled re.lua from analysis so its nil-check warnings do
not fail CI.

AI-assisted
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Enable EmmyLua's need-check-nil diagnostic and resolve nullable values
through more precise types, explicit invariants, and guards for missing
runtime state. Keep analyzer-specific workarounds local and update the
affected API documentation.

Exclude the bundled re.lua from analysis so its nil-check warnings do
not fail CI.

AI-assisted
</pre>
</div>
</content>
</entry>
<entry>
<title>feat(multicursor): gQ restores primary-cursor position #42071</title>
<updated>2026-09-24T17:59:23+00:00</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-09-24T17:59:23+00:00</published>
<link rel='alternate' type='text/html' href='http://git.josher.dev/rneovim.git/commit/?id=db4ce62fccaf59de6ceb0268e638244d7e2f9821'/>
<id>db4ce62fccaf59de6ceb0268e638244d7e2f9821</id>
<content type='text'>
Problem:
Unlike "gv", "gQ" does not restore the primary-cursor position. This is
inconvenient for workflows where you temporarily clear the cursors,
navigate somewhere, then want to return to the multicursor session.

Solution:
Store the primary-cursor position at extmark-id 1 of the
`'nvim.multicursor.last'` namespace.

Note: users that *don't* want to restore the primary-cursor position can
delete extmark-id 1 from the `'nvim.multicursor.last'` namespace just
before `gQ`. (Intentionally undocumented because this interface is not
final, and should not block Nvim 0.13 release.)

    vim.keymap.set('n', 'gQ', function()
      local ns = vim.api.nvim_create_namespace('nvim.multicursor.last')
      pcall(vim.api.nvim_buf_del_extmark, 0, ns, 1)
      return 'gQ'
    end, { expr = true })</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Problem:
Unlike "gv", "gQ" does not restore the primary-cursor position. This is
inconvenient for workflows where you temporarily clear the cursors,
navigate somewhere, then want to return to the multicursor session.

Solution:
Store the primary-cursor position at extmark-id 1 of the
`'nvim.multicursor.last'` namespace.

Note: users that *don't* want to restore the primary-cursor position can
delete extmark-id 1 from the `'nvim.multicursor.last'` namespace just
before `gQ`. (Intentionally undocumented because this interface is not
final, and should not block Nvim 0.13 release.)

    vim.keymap.set('n', 'gQ', function()
      local ns = vim.api.nvim_create_namespace('nvim.multicursor.last')
      pcall(vim.api.nvim_buf_del_extmark, 0, ns, 1)
      return 'gQ'
    end, { expr = true })</pre>
</div>
</content>
</entry>
<entry>
<title>fix(multicursor): skip gQ during an active session #42068</title>
<updated>2026-09-24T15:46:31+00:00</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-09-24T15:46:31+00:00</published>
<link rel='alternate' type='text/html' href='http://git.josher.dev/rneovim.git/commit/?id=7c194c9ef986ef4a3e4ab52aadba507f2c3d0126'/>
<id>7c194c9ef986ef4a3e4ab52aadba507f2c3d0126</id>
<content type='text'>
Problem:
gQ is nonsense during an active multicursor session.

Solution:
Make it a no-op.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Problem:
gQ is nonsense during an active multicursor session.

Solution:
Make it a no-op.</pre>
</div>
</content>
</entry>
<entry>
<title>fix(multicursor): revert "]C"/"[C" cursor-plopping behavior #42034</title>
<updated>2026-09-22T09:25:15+00:00</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-09-22T09:25:15+00:00</published>
<link rel='alternate' type='text/html' href='http://git.josher.dev/rneovim.git/commit/?id=10d2592c29f4735142b20b2cc16419df621da806'/>
<id>10d2592c29f4735142b20b2cc16419df621da806</id>
<content type='text'>
Problem:
Jumping to a cursor adds one at the old position, so navigation has a
side-effect. "]CQ" no longer deletes a cursor, and returning with "[C"
after wandering off adds a cursor wherever you were.

This is useful in some cases, but as a default it is surprising. The
default behavior should be simple and composable.

Solution:
Revert the "]C"/"[C" cursor-plopping behavior.
Document a mapping for the "rotate" behavior.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Problem:
Jumping to a cursor adds one at the old position, so navigation has a
side-effect. "]CQ" no longer deletes a cursor, and returning with "[C"
after wandering off adds a cursor wherever you were.

This is useful in some cases, but as a default it is surprising. The
default behavior should be simple and composable.

Solution:
Revert the "]C"/"[C" cursor-plopping behavior.
Document a mapping for the "rotate" behavior.</pre>
</div>
</content>
</entry>
<entry>
<title>fix(multicursor): may exceed kitty cursors param limit #42029</title>
<updated>2026-09-21T21:12:08+00:00</updated>
<author>
<name>Justin M. Keyes</name>
<email>justinkz@gmail.com</email>
</author>
<published>2026-09-21T21:12:08+00:00</published>
<link rel='alternate' type='text/html' href='http://git.josher.dev/rneovim.git/commit/?id=adbe0493b3f5e72f4caf672621e5fdffc9b327a6'/>
<id>adbe0493b3f5e72f4caf672621e5fdffc9b327a6</id>
<content type='text'>
Problem:
If there are &gt;85 cursors on-screen, the terminal barfs the termcodes to
the screen.

Solution:
Emit the coords in chunks. Only "0;4" clears, so the groups accumulate.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Problem:
If there are &gt;85 cursors on-screen, the terminal barfs the termcodes to
the screen.

Solution:
Emit the coords in chunks. Only "0;4" clears, so the groups accumulate.</pre>
</div>
</content>
</entry>
<entry>
<title>feat(multicursor): color extra Kitty cursors #41935</title>
<updated>2026-09-18T09:24:45+00:00</updated>
<author>
<name>phanium</name>
<email>91544758+phanen@users.noreply.github.com</email>
</author>
<published>2026-09-18T09:24:45+00:00</published>
<link rel='alternate' type='text/html' href='http://git.josher.dev/rneovim.git/commit/?id=9047ee1460ede5aa8b0f0807c15bb554f5dcb8f1'/>
<id>9047ee1460ede5aa8b0f0807c15bb554f5dcb8f1</id>
<content type='text'>
Problem:
Extra cursors use shape 29 (follow primary), so they render identically
to the primary instead of using hl-MCursor colors.

Solution:
Send MCursor fg/bg as sRGB via shapes 30/40 before placing cursors.
Terminals without 30/40 support ignore the color sequences.

AI-assisted</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Problem:
Extra cursors use shape 29 (follow primary), so they render identically
to the primary instead of using hl-MCursor colors.

Solution:
Send MCursor fg/bg as sRGB via shapes 30/40 before placing cursors.
Terminals without 30/40 support ignore the color sequences.

AI-assisted</pre>
</div>
</content>
</entry>
<entry>
<title>fix(lua): add missing param annotations (#41911)</title>
<updated>2026-09-15T13:14:21+00:00</updated>
<author>
<name>Lewis Russell</name>
<email>lewis6991@gmail.com</email>
</author>
<published>2026-09-15T13:14:21+00:00</published>
<link rel='alternate' type='text/html' href='http://git.josher.dev/rneovim.git/commit/?id=c171a697cbee36c4f36535e14f1407909733ca4b'/>
<id>c171a697cbee36c4f36535e14f1407909733ca4b</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
