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

After ESC, the sequence tracker drops to ground on a C0 control, where the parser runs it and stays in escape

Open Beginner friendly
#627 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
83/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
rust
Domain
backend, testing

Research direction

Start in emu/seq.rs, especially the Esc and EscIntermediate arms near line 1747, and compare their transitions with the DEC parser behavior described in the issue. Add a test there for both provided inputs, checking that tracker output, the DSR response, and the BEL count match vte. Done when both inputs stay synchronized with the parser.

Written by the indexing model from the issue text.

Description

bug good first issue

What happens. A stray ESC before a control character puts termlens's tracker out of step with the vt100 parser:

  • \e(0\e\rqqqq\r\nxx gives a blank screen. The line-drawing characters the tracker stages are UTF-8, which vte ignores in the escape state, so the whole run and the xx after it vanish. Without the charset, the same input gives "qqq\nxx".
  • In \e\x07[6n, vte parses the CSI and the DSR is never answered, because the tracker saw no query. The BEL is not counted either (bells == 0).

Both come from a reviewer's unit probe and match the code.

Cause. emu/seq.rs:1747 has _ => State::Ground in the Esc arm, and the EscIntermediate arm is similar. vte 0.15's advance_esc executes 0x00–0x17, 0x19 and 0x1c–0x1f and stays in Escape. It ignores 0x7f and bytes ≥ 0x80.

Fix. Follow the DEC parser in Esc and EscIntermediate. Execute C0 (count BEL, apply SO/SI) without changing state, and ignore DEL and high bytes.

Done when both inputs track what vte does, with a test in emu/seq.rs.

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.