Files
neovim/runtime/lua
Justin M. Keyes 96011df71a fix(redraw): screenpos(), winrestview(), conceal_lines edge cases #42642
Problem:
- An invalidated `conceal_lines` mark conceals the line it collapses
  onto.
- Treesitter: rechecking the last row of a `conceal_lines` mark deletes
  it, and that row's query may not return the capture (`#offset!`, or
  a capture shrunk by an edit). The rows stay unconcealed until a
  redraw.
- `screenpos()` of a char fully hidden by extmark-conceal returns
  `endcol` = `col - 1`.
- `screenpos()` of a char whose inline virt_text or TAB starts on a row
  above reports that row, with `curscol`/`endcol` past the window
  width.
- `winrestview({topline=N})` without "skipcol" keeps the skipcol of the
  previous topline.

Solution:
- Skip invalid marks in `decor_row_has_mark()`.
- Query the rows of a deleted `conceal_lines` mark that the row's query
  did not re-add.
- Report the cursor's row; clamp `col` to the row's first cell, and
  `endcol` to `col`.
- Reset skipcol when "topline" changes, unless "skipcol" is given.
2026-11-01 15:27:23 -05:00
..
2026-11-01 13:20:08 -05:00
2026-03-16 10:29:58 +01:00