Plakken leest alleen platte tekst: structuur uit een webeditor gaat verloren #1595
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#1595
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Wat er nu gebeurt
Plakken uit een webeditor verliest de structuur van de tekst. OciDeck leest
alleen de platte-tekstvariant van het klembord (
Clipboard.kTextPlain), en veelwebtoepassingen zetten daar de gerenderde tekst neer: zonder inspringing,
zonder
#, zonder lijstniveaus.Vastgesteld in #1556 (M365 Copilot Notebook op macOS). De indiener leverde een
pbpaste | hexdumpvan 300 bytes: elke bullet op kolom 0 met-, geen enkelespatie of tab ervoor, en de
#van zijn H1 ontbrak ook. Diezelfde 300 bytesdoor ons plakpad (
parseClipboardTable+sanitizeMarkdownPaste) komen erbyte-identiek uit, op de rand-witruimte na. Er valt in dat pad niets te
repareren: de niveaus bestaan al niet meer als wij ze krijgen.
Wat het zou oplossen
Zo'n toepassing zet doorgaans óók een HTML-variant op het klembord, en dáár
staat de nesting wel in (
<ul><li><ul>…). Die variant lezen en naar Markdownomzetten lost niet alleen Copilot Notebook op, maar elk geval van "geplakt
vanuit een webeditor" — een terugkerende klasse, geen randgeval.
Plaats in de keten: de plakvolgorde in
document_editor_screen.dartis nuafbeelding → tabel → platte tekst. De HTML-variant komt er vóór platte tekst
tussen, met platte tekst als val. Eén naad, in de bestaande volgorde.
Wat het kost — de reden dat dit een apart issue is
pasteboard: ^0.5.0staat al inpubspec.yamlenheeft een
html-getter, maar die is alleen op Windows en Androidgeïmplementeerd; op macOS, Linux en iOS geeft hij
null(
lib/src/pasteboard_platform_io.dart). Voor macOS — het platform waarop ditgemeld is — moet er dus een
NSPasteboard-lezing vanNSPasteboardTypeHTMLbij, ofwel als eigen methodekanaal, ofwel als bijdragestroomopwaarts. Geen nieuwe afhankelijkheid alsjeblieft: een eigen kanaal
houdt de toeleveringsketen zoals hij is.
niveau, nadruk, links, code, tabellen. Géén stijlen, géén klassen, géén
ingesloten HTML.
nooit gerenderd. Er mag geen pad ontstaan waarlangs klembord-HTML bij een
renderer komt;
markdown_safety.dartblijft de grens.Reikwijdte-voorstel
Eerst macOS + de documentbroneditor, achter de bestaande plakvolgorde, met de
platte-tekstvariant als val zodra er geen HTML is of de omzetting niets bruikbaars
oplevert. Windows en Linux daarna, want daar is het gedrag per platform anders
en het is beter één keer goed dan drie keer half.
Toetsing
De omzetting zelf is zuiver en headless, dus tafeltests per constructie:
geneste lijst → inspringing per niveau; kop →
#; een<table>→ GFM-tabel; eneen tegenproef dat stijl- en klasse-attributen niets opleveren. De
platformlezing zelf valt buiten
flutter test— noem dat expliciet in de PR inplaats van te doen alsof er een test onder zit.
Herkomst
#1556, gemeld door Dany, met de klemborddump die het uitsluitsel gaf. Dat issue
is gesloten als "niet in het plakpad te repareren"; dit is het verzoek dat
eronder bleef liggen.
Opgepakt. Tak: feat/clipboard-html-paste. Verwachte reikwijdte: native HTML-lezing op macOS (methodekanaal), html-naar-Markdown-omzetting, de bestaande plakvolgorde in de documentbroneditor. Geen nieuwe klembordaflankelijkheid.
Op main in
2d3c373d9a. HTML-variant van het klembord wordt gelezen (macOS/Windows/Linux/web) en naar Markdown omgezet; de HTML zelf wordt niet gerenderd. Native NSPasteboard/GTK-lezing valt buiten flutter test. Niet in: iOS/Android.