mirror of
https://github.com/neovim/neovim.git
synced 2026-11-06 05:16:52 +00:00
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.