Skip to content

feat: v0.22.1 — screen nav ergonomics (#279) + public crossterm backend (#278)#280

Merged
subinium merged 2 commits into
mainfrom
release/v0.22.1
Jun 22, 2026
Merged

feat: v0.22.1 — screen nav ergonomics (#279) + public crossterm backend (#278)#280
subinium merged 2 commits into
mainfrom
release/v0.22.1

Conversation

@subinium

Copy link
Copy Markdown
Owner

Patch release closing two community issues. Additive only — no existing public items changed.

#279 — Navigate from inside ui.screen(...) closures

The documented screen-navigation example (docs/COMPLETE_REFERENCE.md §6.5) called screens.push(...) inside the ui.screen(...) closure, which never compiled: screen(...) holds a &mut ScreenState borrow for the closure's whole duration (E0499).

Fix: new Context::push_screen(name) / pop_screen() / reset_screen() record a deferred navigation that is applied to the active ScreenState the moment the closure returns — mirroring SLT's existing command-recording model, so app code navigates from inside the closure without the double borrow. The §6.5 example is corrected.

#278 — Public crossterm backend for custom render loops

Terminal, InlineTerminal, and event::from_crossterm are now pub, and the crossterm crate is re-exported as slt::crossterm. External integrations can drive SLT's render pipeline with their own event loop — the way ratatui exposes CrosstermBackend — without reimplementing the backend or risking a mismatched crossterm version.

Verification (full Core + Extended gate, all green locally)

fmt --check · check --all-features · clippy --all-features -D warnings · test --all-features (full suite + 5 new tests) · check --examples · typos · check --no-default-features · wasm target · cargo hack --each-feature · cargo audit · cargo deny check

Semver note

Adding public items is semver-minor; this is bumped as a patch (0.22.0 → 0.22.1) per the maintainer's call. cargo-semver-checks is a soft, non-blocking CI gate and will flag the patch accordingly — expected, not a failure.

Closes #278, #279.

🤖 Generated with Claude Code

subinium and others added 2 commits June 22, 2026 10:19
…nd (#278)

Patch release closing two community issues. Additive only — no existing
public items changed.

#279 — Navigate from inside `ui.screen(...)` closures:
- New `Context::push_screen`/`pop_screen`/`reset_screen` record a deferred
  navigation applied to the active `ScreenState` the moment the closure
  returns. `screen(...)` holds a `&mut ScreenState` borrow for the closure's
  duration, so calling `screens.push(...)` directly inside it never compiled
  (the only documented example was wrong). Deferring through the Context
  mirrors SLT's existing command-recording model and dodges the double borrow.
- `docs/COMPLETE_REFERENCE.md` §6.5 updated to the working pattern.

#278 — Public crossterm backend for custom render loops:
- `Terminal`, `InlineTerminal`, and `event::from_crossterm` are now `pub`,
  and the `crossterm` crate is re-exported as `slt::crossterm`. External
  integrations can drive SLT's render pipeline with their own event loop
  (the way ratatui exposes `CrosstermBackend`) without reimplementing the
  backend or risking a mismatched crossterm version.

Note: adding public items is semver-minor; cargo-semver-checks (a soft,
non-blocking CI gate) will flag the patch bump accordingly.

Closes #278, #279.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…install

`charmbracelet/vhs-action@v2` unconditionally runs its own bundled ffmpeg
installer, which is persistently broken on the GitHub runner ("Failed to
install ffmpeg", reproduced across reruns) and ignores a pre-installed ffmpeg.
Drop the action and install the toolchain directly: ffmpeg from apt, ttyd from
its upstream release binary, and vhs via `go install` (Go ships on
ubuntu-latest). The VHS Gallery job already carries `continue-on-error: true`,
so this only turns a perpetual red X green — it never gated merge.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@subinium subinium merged commit 8f35aa9 into main Jun 22, 2026
17 checks passed
@subinium subinium deleted the release/v0.22.1 branch June 22, 2026 02:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

slt Terminal / event::from_crossterm need pub visibility

1 participant