cli: animate cursor blink on the output clock (--cursor-blink) #9

Merged
natsukium merged 1 commit from cursor-blink into main 2026-09-26 02:17:08 +09:00
Owner

Why

A blinking cursor rendered steady, so a video of an idle prompt looked frozen rather than live.

What

  • --cursor-blink (off by default): follows the config's cursor.blink mode (program/never/always) and cursor.blink_interval_ms like a felis window, with the phase taken from the output timeline (timeline::Blink) and restarted at each recorded cursor_state frame. The same recording blinks on the same frames every time.
  • Off by default so idle stretches stay identical and the GIF sink can merge them.
  • Golden test a_blinking_cursor_is_hidden_in_its_off_half (frames 10 visible, 20 hidden); unit tests for the phase and the 50 ms floor.
  • Design, README and backlog updated.

Verification

fmt, clippy, tests green locally. pi review (luna): PASS, no findings.

## Why A blinking cursor rendered steady, so a video of an idle prompt looked frozen rather than live. ## What - `--cursor-blink` (off by default): follows the config's `cursor.blink` mode (program/never/always) and `cursor.blink_interval_ms` like a felis window, with the phase taken from the output timeline (`timeline::Blink`) and restarted at each recorded `cursor_state` frame. The same recording blinks on the same frames every time. - Off by default so idle stretches stay identical and the GIF sink can merge them. - Golden test `a_blinking_cursor_is_hidden_in_its_off_half` (frames 10 visible, 20 hidden); unit tests for the phase and the 50 ms floor. - Design, README and backlog updated. ## Verification fmt, clippy, tests green locally. pi review (luna): PASS, no findings.
cli: animate cursor blink on the output clock (--cursor-blink)
All checks were successful
ci / cargo fmt / clippy / test / deny (pull_request) Successful in 1m5s
74fe9fbf0c
A recording of a blinking cursor rendered steady, so a video of an idle
prompt looked frozen rather than live. --cursor-blink follows the
config's cursor.blink mode and interval like a felis window, but takes
the phase from the output timeline and restarts it at each recorded
cursor_state frame, so the same recording always blinks on the same
frames. Blinking stays opt-in: a steady cursor keeps idle stretches
identical, which is what lets the GIF sink merge them.

Assisted-by: Claude Code
natsukium deleted branch cursor-blink 2026-09-26 02:17:08 +09:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
natsukium/felis-reel!9
No description provided.