A sixel past the capture bound loses its declared size, and the cursor no longer moves past it
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 1-2 days
- Newbie friendliness
- 55/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- rust
- Domain
- cli, testing-qa
Research direction
Start with graphics.rs around chunk() and the raster_size calculation, then trace how seq.rs handles DCS data in push_dcs. Read the capture_graphics documentation and existing sixel tests. Done means size() and cursor placement stay the same at capture bounds 0, a small bound, and the default; add regression tests for the reported cases.
Written by the indexing model from the issue text.
Description
What happens. With .graphics(Graphics::Sixel) and .cell_size(10, 20), a sixel "1;1;8;45 (8x45 px) painted at 1;1 is placed like this:
capture_graphics |
cursor after | size() |
|---|---|---|
| default | (2,1) |
Some((8,45)) |
20 |
(2,1) |
None |
0 |
(0,1) |
None |
Without raster attributes (5 painted bands, 30 px), the default bound gives cursor (1,1) and capture_graphics(16) gives (0,1).
Cause.
graphics.rs:1175computessize = raster_size(&self.data)from the retained data, which is emptied once the payload passes the bound.graphics.rs:1149measures the placement height on data thatseq.rs'spush_dcshas already cut atcapturebytes.
The claim.
- The
capture_graphicsdoc: "0keeps no data at all — the counters and every declared fact stay exact". - LIMITATIONS: a payload past the bound is "counted and described".
- The comment in
chunk(): the cursor moves "whatever this test chose to keep".
Kitty's s=/v= do survive the bound, because they come from the escape's head.
Fix direction.
- Parse the raster attributes from the DCS head, or keep a small separate prefix.
- Measure the painted height incrementally in
push_dcs(a band counter and the lowest set bit), not from the bounded body.
Done when size() and the cursor are the same at every capture bound, with tests at 0 and at a small bound.
- Dominant language
- Rust
- Stars
- 28
- Forks
- 24
- Avg merge
- 11h 23m
- Merged PRs (30d)
- 42
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from vyncint/termlens
-
documentation good first issue
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
Maintainers usually reply within 1 day
-
documentation good first issue
Difficulty 1/5 Under an hour Newbie friendliness 95/100
Maintainers usually reply within 1 day
-
Release notes show a broken link: `extract-changelog.sh` copies a reference but not its definitionOpenbug good first issue
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 67/100
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day
All issues in vyncint/termlens
Similar issues
-
priority middle
Difficulty 1/5 Under an hour Newbie friendliness 62/100
KATO-Hiro/AtCoderClans#12940 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 83/100
Maintainers usually reply within 1 day
-
o8 next debug build aborts on Glass to Dark appearance switch (nil identifier messaged before check)Openbug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
hurttlocker/o8#5112 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 79/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day