8000 chore: prep 0.1.7 release, and correct the README's slideshow docs by msample · Pull Request #41 · gominimal/kittyview · GitHub
[go: up one dir, main page]

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Changelog

## upcoming
## 0.1.7

- **Slideshow images render fully under tmux, without the flash**: Ghostty through 1.3.1 renders placeholder images delivered as an in-place pane update blank or clipped -- with the data confirmed present in the terminal via the reply channel -- while a full repaint out of tmux's own grid renders them correctly. That is why switching tmux panes completes an image that came out partial. Every draw under a lone tmux layer now ends with `tmux refresh-client`: the same client repaint a pane switch triggers, re-sending nothing (the image is already in the terminal's store, the placeholder cells already in tmux's grid) and costing nothing visible. It replaces the alternate-screen rebuild 0.1.6 used for the same purpose, so slide changes no longer flash the pane underneath, nor pay the 250ms settle that rebuild needed. The repaint is issued after the arrival check, never before, since tmux drops passthrough while a redraw is pending and would eat the question with it; the draws that skip that check -- animations, and the message slide shown for a file that will not load -- wait the same interval before the repaint instead, since they carry passthrough of their own. Where a repaint cannot reach -- screen, which has no equivalent command, and tmux nested in another multiplexer, whose outer layer would receive the repaint as one more in-place update -- slide changes still rebuild by way of the pane's main screen; that rebuild remains the last-attempt fallback when transmissions are being lost, and what the `r` key forces by hand.
- `examples/placeholder_probe` gained a second group of variants (`manual`, `refresh`, `nudge`, `rewrite`, `cycle-refresh`) that bisect the *repair* rather than the draw: given a slide that rendered wrong, which nudge completes it. On Ghostty 1.3.1 + tmux only the two that force a full client repaint do -- unrelated terminal traffic does not, and re-sending the placeholder cells in place does not -- which is what settled the fix above.
Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "kittyview"
version = "0.1.6"
version = "0.1.7"
edition = "2024"
rust-version = "1.87"
license = "Apache-2.0"
Expand Down
24 changes: 14 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ Every release binary carries a [build provenance attestation](https://docs.githu
```sh
gh attestation verify kittyview-linux-amd64.tar.gz \
--repo gominimal/kittyview \
--source-ref refs/tags/v0.1.6 \
--source-ref refs/tags/v0.1.7 \
--deny-self-hosted-runners
```

Expand Down Expand Up @@ -77,18 +77,22 @@ When no file is given and stdin is piped, kittyview reads from stdin automatical

Giving kittyview more than one file opens an interactive slideshow on the terminal's alternate screen: each image is shown fitted to the window and centred, with a status line naming the file and its position in the list.

| Key | Action |
|----------------------------------|-------------------------------|
| Right, Down, Space, `n` | next image |
| Left, Up, Backspace, `p` | previous image |
| Home / End (also PgUp / PgDn) | first / last image |
| `r` | redraw the slide from scratch |
| Ctrl-Z | suspend (resume with `fg`) |
| `q`, Esc, Ctrl-C | quit |
| Key | Action |
|-------------------------------------|-------------------------------|
| Right, Down, PgDn, Space, `n` | next image |
| Left, Up, PgUp, Backspace, `p` | previous image |
| Home / End | first / last image |
| `r` | redraw the slide from scratch |
| Ctrl-Z | suspend (resume with `fg`) |
| `q`, Esc, Ctrl-C, Ctrl-D | quit |

Navigation stops at the ends of the list rather than wrapping. Files that fail to load show their error in place and are skipped past with the same keys. `--animate` plays animated slides on terminals that support the kitty animation protocol.

Under tmux, each slide change redraws by way of the pane's main screen -- a brief flash of the pane beneath, and `r` forces the same rebuild by hand. The flash buys reliability twice over: tmux silently drops passthrough sequences around pane redraws (kittyview also verifies each transmission's arrival over the protocol's reply channel, retries losses, and reports them in a diagnostics line on exit), and Ghostty releases through 1.3.1 render placeholder images delivered as in-place pane updates blank -- confirmed with the data verified present in the terminal -- while a full repaint renders them correctly. The same Ghostty releases can also render large placeholder images at the wrong size inside tmux (clipped or narrowed, [ghostty#13056](https://github.com/ghostty-org/ghostty/issues/13056)). Ghostty's nightly builds fix the rendering; kitty is unaffected.
Under tmux, each slide is repainted with `tmux refresh-client` once it is drawn -- the same full client repaint that switching panes triggers, and nothing visible changes when it runs. It re-sends no image data: the image is already in the terminal's store, and the cells that place it are ordinary text in tmux's grid. The repaint is what makes the slide render at all on Ghostty releases through 1.3.1, which draw placeholder images delivered as an in-place pane update blank, or at the wrong size -- clipped or narrowed, [ghostty#13056](https://github.com/ghostty-org/ghostty/issues/13056) -- while a full repaint draws them correctly, confirmed with the data verified present in the terminal. Ghostty's nightly builds fix the rendering; kitty is unaffected.

Where a repaint cannot reach, each slide change instead rebuilds by way of the pane's main screen, at the cost of a brief flash of the pane beneath: GNU screen has no equivalent command, and tmux nested inside another multiplexer would hand the outer layer the repaint as one more in-place update. `r` forces that rebuild by hand on any stack.

Separately, tmux silently drops passthrough sequences around pane redraws, so kittyview verifies each transmission's arrival over the protocol's reply channel, retries losses, and reports them in a diagnostics line on exit.

The slideshow leaves the terminal exactly as it found it, on every exit path: quitting, errors, panics, and fatal signals all restore the screen, the cursor, and the terminal mode, and delete the transmitted images so the terminal's image memory is returned. `kill -9` is the one exit nothing can clean up after -- `reset` recovers the terminal if it comes to that. Ctrl-Z suspends and resumes like any well-behaved fullscreen program.

Expand Down
4 changes: 2 additions & 2 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ claims to -- see [Verifying downloads](README.md#verifying-downloads) for why
```sh
gh attestation verify kittyview-linux-amd64.tar.gz \
--repo gominimal/kittyview \
--source-ref refs/tags/v0.1.6 \
--source-ref refs/tags/v0.1.7 \
--deny-self-hosted-runners
```

Expand All @@ -44,7 +44,7 @@ gh attestation trusted-root > trusted_root.jsonl
```sh
gh attestation verify kittyview-linux-amd64.tar.gz \
--repo gominimal/kittyview \
--source-ref refs/tags/v0.1.6 \
--source-ref refs/tags/v0.1.7 \
--deny-self-hosted-runners \
--bundle kittyview-provenance.intoto.jsonl \
--custom-trusted-root trusted_root.jsonl
Expand Down
2 changes: 1 addition & 1 deletion fuzz/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
0