Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

A sixel past the capture bound loses its declared size, and the cursor no longer moves past it

Open
#635 0 comments 0 reactions 0 assignees View on GitHub

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

bug

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:1175 computes size = raster_size(&self.data) from the retained data, which is emptied once the payload passes the bound.
  • graphics.rs:1149 measures the placement height on data that seq.rs's push_dcs has already cut at capture bytes.

The claim.

  • The capture_graphics doc: "0 keeps 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

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from vyncint/termlens

All issues in vyncint/termlens

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.