Houd de zichtbare documentpositie vast bij Visueel ↔ Bron (#2322) #2350

Merged
brenno merged 1 commit from issue-2322-document-position into main 2026-10-07 14:34:39 +00:00
Owner

Samenvatting

  • Eén logisch Markdown-anker bij standwissels: de caret als die in beeld is of er niet is gescrold, anders het eerste zichtbare blok — via MarkdownCaretMap, geen pixelafstand.
  • De doelstand springt het vertaalde anker na de opbouw expliciet in de viewport (direct op de scroll-controller; de ingebouwde caret-reveal van beide editors hangt aan focus/timing en is hiervoor onzeker).
  • Zelfde reveal-garantie voor zoeksprongen en de automatische Bron-fallback: de probleemregel komt echt in beeld.
  • Logica in nieuwe _DocPosition-klasse (het scherm zat op zijn regelplafond); file- en klassebaselines verlaagd naar nieuwe stand + speelruimte.

Acceptatiecriteria

  • Visueel → Bron toont de bijbehorende bronregel
  • Bron → Visueel toont de bijbehorende alinea
  • Alleen scrollen houdt het dichtstbijzijnde zichtbare blok vast
  • Soft-wrap/tabellen/afbeeldingen: anker is logisch, geen pixels
  • Bron-fallback brengt de probleemregel in beeld
  • Inhoud ongewijzigd, geen undo-stap (alleen selection onder _applyingExternal)
  • Widget-test toetst de viewport naast de selectie

Test plan

  • make check volledig groen in schone worktree
  • 5 nieuwe widgettests + 12 bestaande caret-tests groen
  • Visuele beeldkeuring (geen computer-use beschikbaar in deze sessie)

Generated with Devin

## Samenvatting - Eén logisch Markdown-anker bij standwissels: de caret als die in beeld is of er niet is gescrold, anders het eerste zichtbare blok — via `MarkdownCaretMap`, geen pixelafstand. - De doelstand springt het vertaalde anker na de opbouw expliciet in de viewport (direct op de scroll-controller; de ingebouwde caret-reveal van beide editors hangt aan focus/timing en is hiervoor onzeker). - Zelfde reveal-garantie voor zoeksprongen en de automatische Bron-fallback: de probleemregel komt echt in beeld. - Logica in nieuwe `_DocPosition`-klasse (het scherm zat op zijn regelplafond); file- en klassebaselines verlaagd naar nieuwe stand + speelruimte. ## Acceptatiecriteria - [x] Visueel → Bron toont de bijbehorende bronregel - [x] Bron → Visueel toont de bijbehorende alinea - [x] Alleen scrollen houdt het dichtstbijzijnde zichtbare blok vast - [x] Soft-wrap/tabellen/afbeeldingen: anker is logisch, geen pixels - [x] Bron-fallback brengt de probleemregel in beeld - [x] Inhoud ongewijzigd, geen undo-stap (alleen `selection` onder `_applyingExternal`) - [x] Widget-test toetst de viewport naast de selectie ## Test plan - [x] `make check` volledig groen in schone worktree - [x] 5 nieuwe widgettests + 12 bestaande caret-tests groen - [ ] Visuele beeldkeuring (geen computer-use beschikbaar in deze sessie) Generated with [Devin](https://devin.ai)
De caret vertaalde MarkdownCaretMap al sinds #1566, maar de doelstand
opende bovenaan: een goed gezette cursor kon buiten het venster liggen
en "alleen gescrold" ging helemaal verloren. Nu is er één logisch
Markdown-anker — de caret als die in beeld is of er niet is gescrold,
anders het eerste zichtbare blok — dat na de opbouw van de doelstand
expliciet in de viewport wordt gesprongen.

De logica zit in een eigen kleine klasse `_DocPosition` (het scherm zit
op zijn regelplafond); een dunne extensie delegeert zodat bestaande
aanroepen ongewijzigd blijven. Ook de zoeksprong en de automatische
Bron-fallback krijgen dezelfde reveal-garantie. De krappe file- en
klasseplafonds zijn verlaagd naar de nieuwe stand plus speelruimte.

Widget-regressietest toetst naast de selectie ook dat de caret of het
doelblok echt binnen de editor-viewport ligt — in beide richtingen, bij
alleen scrollen, en bij de fallback.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
brenno merged commit 083a515096 into main 2026-10-07 14:34:39 +00:00
Sign in to join this conversation.
No description provided.