graphics: smaller Kitty graphics differences from kitty to decide on #84
Labels
No labels
Area/ci
Area/cli
Area/client
Area/client-core
Area/daemon
Area/deps
Area/docs
Area/grid
Area/manual
Area/nix
Area/protocol
Area/pty
Area/render
Area/shaping
Area/skills
Area/transport
Area/vt
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Performance
Kind/Security
Kind/Testing
perf-regression-accepted
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Blocked
Status
Need More Info
Status
Upstream
No milestone
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
felis-terminal/felis#84
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?
Smaller differences from kitty found while auditing the Kitty graphics path. Each needs a follow-kitty-or-keep decision; several are documented as intended today.
I=).resolve_image_id(crates/felis-daemon/src/graphics.rs) usesI=as the image id. kitty assigns a fresh id perI=transmit, repliesi=<assigned>,I=<n>, anda=p,I=ntargets the newest image with that number. felis repliesi=n,I=nand replaces the image.i=together withI=should beEINVAL("Must not specify both image id and image number"); felis letsi=win.d=n/d=Nare answeredENOTSUP; kitty implements them and, like every successful delete, sends no reply.i=orI=. kitty sends none (finish_command_response). felis answersa=Twithout an id with\e_Gi=4294967295;OK\e\\(an internal allocated id) anda=t/a=qwithout an id with\e_G;OK\e\\, which an interactive shell echoes as garbage. A test pins the id-less OK (graphics/tests.rs).S=/O=ont=fandt=t.read_file_payload/read_temp_file_payloadread the whole file; onlyt=shonors size and offset. kitty applies them to files too.C=1that intersect the erased rows, whatever columns the erase covers:\e[Kat the far right of a row drops every such image spanning that row. kitty clears images only on ED 2/3, and EL never touches them, so a program rewriting a line across an image loses the image in felis.EIO(kittyEBADF); an undecodable PNG answersEBADF(kittyEBADPNG).graphics.c); felis keeps it until eviction.evict_oldest_to_fitevicts the oldest image first even when it is still placed: a placedi=1followed by twelve 64 MiB transmits is gone in felis (a=p,i=1answersENOENT) and still placeable in kitty.One more, from the placement identity fix: an id-less put gets a daemon-assigned placement id counted down from
u32::MAX. If a producer later puts the same image with that exactp=, felis moves the id-less placement to a fresh id and to the end of the table (the client mirrors this with a remove and a re-add), so among equal-z overlapping placements it now stacks above placements made after it. kitty keeps both refs in their original order, since an id-less ref has no client id to collide with. Matching kitty needs the wire to carry an id-less placement's identity separately from the producer'sp=, or a positioned insert.All items now follow kitty: replies and error codes (#95), erase, anonymous images and eviction (#98), S=/O= on file transmissions (#101), image numbers and d=n/d=N (#102).