Releases: jmylchreest/clipferry
Releases · jmylchreest/clipferry
Release list
v0.0.3
Changed
- W→X claims capture the payload before taking the X11 selection, so
they no longer depend on the Wayland source outliving the claim.
Bytes still move only on paste for X→W, and for the W→X copies the
backstop never claims — which is most of them — but a claim we do
make now costs one transfer.--eager-max-sizebounds the capture;
over-cap types are dropped and logged at WARN, since here "degrade to
lazy" means the type is lost. Pastes arriving mid-capture are held
and replayed rather than refused (event=park/event=unpark).
Fixed
- Screenshots (and any other Wayland copy) no longer need to be made
twice before an X11 or Xwayland app can paste them. Two defects, both
triggered by the same 0.3 ms echo:- Taking the X11 selection makes xwayland-satellite republish that
claim onto the Wayland clipboard, which cancels the source being
proxied —wl-copyexits and the content is gone before the first
paste arrives (event=paste reason=empty-source). Lazy proxying
cannot survive that, so the W→X path now captures first (above). - That republished claim was not recognised as our own: satellite
re-exports our X11TARGETSlist minusTARGETSitself, so the
mirror comes back carryingTIMESTAMP— a superset of what we
advertised, which failed the subset test. Content types are now
compared with X11 protocol atoms filtered out of both sides, and
any such atom fingerprints the offer as a bridge mirror outright
(event=coexist action=observe-own-claim). The mirror fingerprint
likewise no longer demands bothTARGETSandTIMESTAMP, which
satellite's mirrors never satisfy.
- Taking the X11 selection makes xwayland-satellite republish that
- Copies made while an X11 app holds the display no longer need to be
made twice before they can be pasted. When the backstop filled the
X11 gap, the Xwayland WM mirrored that proxy claim straight back as a
Wayland offer (~0.3 ms later); clipferry read it as a fresh copy and
destroyed the offer it was proxying, cancelling the real source — so
the whole chain, including a paste already streaming, dead-ended on
nothing. Our own claim is now recognised by identity and observed
rather than bridged (event=coexist action=observe-own-claim). - A Wayland source that goes away mid-transfer is refused instead of
being served as a successful empty payload: requestors were caching
that emptiness as the clipboard contents rather than retrying or
falling back to another target (event=paste reason=empty-source).
Full changelog: v0.0.2...v0.0.3
snapshot 0.0.3-dev.25+gf5882447
v0.0.2
Added
- backstop mode — claims land only in voids (§10.1) (#14)
- level= as a first-class logfmt field (#12)
- logfmt-style structured logging with journald priorities (#11)
- M5 — Landlock sandbox, packaging, release enablement (#7)
- M4 — translation table, eager mode, --primary, --skip-sensitive (#6)
- M3 — all-MIME passthrough and INCR in both directions (#5)
- M2 — bidirectional text sync with loop prevention by identity (#4)
- M1 — lazy Wayland→X11 text bridging (#3)
Fixed
- refresh stale claims on gap-fill; refuse mimes absent from the live offer (#19)
- causality pairing — a side updating while its fill is pending is the answer, not a new copy (#15)
- bound zero-progress waits at 2s — silence must never reach requestors (#13)
- abort X→W transfers when the owner window is destroyed (#10)
- synthesize text/uri-list for gnome-copied-files-only Wayland offers (#9)
Other
v0.0.1
Added
- backstop mode — claims land only in voids (§10.1) (#14)
- level= as a first-class logfmt field (#12)
- logfmt-style structured logging with journald priorities (#11)
- M5 — Landlock sandbox, packaging, release enablement (#7)
- M4 — translation table, eager mode, --primary, --skip-sensitive (#6)
- M3 — all-MIME passthrough and INCR in both directions (#5)
- M2 — bidirectional text sync with loop prevention by identity (#4)
- M1 — lazy Wayland→X11 text bridging (#3)
Fixed
- causality pairing — a side updating while its fill is pending is the answer, not a new copy (#15)
- bound zero-progress waits at 2s — silence must never reach requestors (#13)
- abort X→W transfers when the owner window is destroyed (#10)
- synthesize text/uri-list for gnome-copied-files-only Wayland offers (#9)