Documentmodus: wisselen tussen visueel en bron brengt je niet op dezelfde plek in de tekst #1566

Closed
opened 2026-08-19 08:02:50 +00:00 by brenno · 2 comments
Owner

Wat er gebeurt

Sta in de visuele modus met de cursor ergens midden in een lang document en schakel naar de bron (<>). De cursor staat daar niet op dezelfde plaats in de tekst, en de weergave scrollt niet naar waar je stond. Omgekeerd (bron → visueel) gebeurt hetzelfde.

Waarom dat erg is

Wisselen van stand is precies de handeling die je doet omdat je op één plek iets in de bron wilt zien of zetten. Je raakt je plaats kwijt en moet in een lang document opnieuw gaan zoeken. Daarmee kost het meer dan het oplevert en gaat de gebruiker de bronstand vermijden.

Stappen om het te zien

  1. Open een lang document (meerdere schermen tekst) in de documentmodus.
  2. Zet de cursor in de visuele stand in een alinea halverwege.
  3. Schakel naar de bronstand — de cursor/scroll staat bovenaan of op een oude positie.
  4. Zet de cursor in de bron ergens anders en schakel terug — idem.

Verwacht

Bij het wisselen van stand komt de cursor op de overeenkomstige plek in de andere weergave te staan, en die plek is in beeld. Precisie tot op het teken is niet nodig; de alinea/regel waar je stond wel.

Raakvlak

lib/widgets/markdown_editor/markdown_editor.dart (_transitionMode, _valueWithClampedSelection, _openVisualEditor), lib/widgets/document_editor_screen.dart (de wissel _DocViewMode.visual.source).

## Wat er gebeurt Sta in de visuele modus met de cursor ergens midden in een lang document en schakel naar de bron (`<>`). De cursor staat daar niet op dezelfde plaats in de tekst, en de weergave scrollt niet naar waar je stond. Omgekeerd (bron → visueel) gebeurt hetzelfde. ## Waarom dat erg is Wisselen van stand is precies de handeling die je doet omdat je op één plek iets in de bron wilt zien of zetten. Je raakt je plaats kwijt en moet in een lang document opnieuw gaan zoeken. Daarmee kost het meer dan het oplevert en gaat de gebruiker de bronstand vermijden. ## Stappen om het te zien 1. Open een lang document (meerdere schermen tekst) in de documentmodus. 2. Zet de cursor in de visuele stand in een alinea halverwege. 3. Schakel naar de bronstand — de cursor/scroll staat bovenaan of op een oude positie. 4. Zet de cursor in de bron ergens anders en schakel terug — idem. ## Verwacht Bij het wisselen van stand komt de cursor op de overeenkomstige plek in de andere weergave te staan, en die plek is in beeld. Precisie tot op het teken is niet nodig; de alinea/regel waar je stond wel. ## Raakvlak `lib/widgets/markdown_editor/markdown_editor.dart` (`_transitionMode`, `_valueWithClampedSelection`, `_openVisualEditor`), `lib/widgets/document_editor_screen.dart` (de wissel `_DocViewMode.visual` ↔ `.source`).
Author
Owner

Opgepakt in tak fix/visuele-modus-bron (worktree), samen met #1565 en #1567 — hetzelfde oppervlak.

Opgepakt in tak `fix/visuele-modus-bron` (worktree), samen met #1565 en #1567 — hetzelfde oppervlak.
Author
Owner

Opgelost op main in PR #1574 (merge f3389a49).

MarkdownCaretMap vertaalt de cursor nu heen en weer tussen de Markdown-bron en de platte tekst van de visuele editor. Per regel — de visuele editor zet elk blok op een eigen regel, laat lege bronregels weg en vervangt een tabel, een scheidingslijn of een afbeelding door één objectteken — en binnen een regel door bron en zichtbare tekst samen door te lopen; die zichtbare tekst is altijd een deelrij van de bron, want opmaak haalt tekens weg en voegt er nooit een toe. Zo klopt de kolom ook midden in **vet**. Na de wissel krijgt het schrijfvlak de focus, anders schuift het de cursor niet in beeld.

Wat er níet in zit: precisie tot op het teken in álle gevallen. Sta je middenin een opmaakteken, dan landt de cursor aan het begin daarvan. Dat staat zo in de gebruikersgids.

Getoetst met document_caret_across_modes_test.dart, dat de kaart naast de échte platte tekst van de omzetting legt in plaats van naast zelfbedachte getallen, en in beide richtingen in de draaiende app nagekeken.

Opgelost op main in PR #1574 (merge `f3389a49`). `MarkdownCaretMap` vertaalt de cursor nu heen en weer tussen de Markdown-bron en de platte tekst van de visuele editor. Per regel — de visuele editor zet elk blok op een eigen regel, laat lege bronregels weg en vervangt een tabel, een scheidingslijn of een afbeelding door één objectteken — en binnen een regel door bron en zichtbare tekst samen door te lopen; die zichtbare tekst is altijd een *deelrij* van de bron, want opmaak haalt tekens weg en voegt er nooit een toe. Zo klopt de kolom ook midden in `**vet**`. Na de wissel krijgt het schrijfvlak de focus, anders schuift het de cursor niet in beeld. **Wat er níet in zit:** precisie tot op het teken in álle gevallen. Sta je middenin een opmaakteken, dan landt de cursor aan het begin daarvan. Dat staat zo in de gebruikersgids. Getoetst met `document_caret_across_modes_test.dart`, dat de kaart naast de échte platte tekst van de omzetting legt in plaats van naast zelfbedachte getallen, en in beide richtingen in de draaiende app nagekeken.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#1566
No description provided.