<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sl0ppij.git/src, branch main</title>
<subtitle>a sl0p.foo repository</subtitle>
<id>https://git.sl0p.foo/sl0ppij.git/atom/src?h=main</id>
<link rel='self' href='https://git.sl0p.foo/sl0ppij.git/atom/src?h=main'/>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppij.git/'/>
<updated>2026-08-12T16:44:24Z</updated>
<entry>
<title>sl0p: --purpose flag and tab-level purpose</title>
<updated>2026-08-12T16:44:24Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-08-12T16:44:24Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppij.git/commit/?id=2c67579398835d51e625085ce3b22c22bc8f0cba'/>
<id>urn:sha1:2c67579398835d51e625085ce3b22c22bc8f0cba</id>
<content type='text'>
Completes the two pieces deferred from the first workspace-hints pass.

`zellij run --purpose X` / `zellij action new-pane --purpose X` tag a pane at
spawn time, which is what an agent wants for panes it creates itself; the OSC
wrapper still works for programs that declare their own role. Not supported with
--in-place, which replaces another pane rather than being a pane of its own: clap
rejects the combination rather than accepting a flag that would do nothing.

`tab name="work" purpose="agent-work"` gives a whole tab a role, reported by
`list-tabs --json`. It rides the tab's ROOT layout node, reusing the pane field
because a tab's root is the tab container and never itself a pane -- asserted by a
test for the tightest case (a tab holding exactly one pane), since a leak there
would silently mislabel a pane.

The interesting part is why the flag first shipped broken. There are TWO protobuf
boundaries -- the plugin API and the client-&gt;server IPC contract -- and a CLI flag
must cross the second one. Defaulting the field in the conversion (what "no
protoc" usually forces) compiles cleanly and then silently drops the value in
transit, so --purpose parsed, printed a pane id, and did nothing. Fixed by adding
the field to both contracts by hand, in the .proto AND the committed generated
prost, kept in lockstep so a future regeneration reproduces it: protoc is only
needed to regenerate, not to build. Both boundaries now have a round-trip test,
and the IPC one was confirmed to fail when the wire read is removed.

Sanitising moved to Grid::set_authoritative_purpose, the single choke point every
out-of-band source passes through, after the CLI path was observed delivering
`bad purpose; rm -rf /` intact into list-panes --json.
</content>
</entry>
<entry>
<title>Support the Kitty Image Protocol (#5428)</title>
<updated>2026-07-31T17:19:49Z</updated>
<author>
<name>Aram Drevekenin</name>
<email>aram@poor.dev</email>
</author>
<published>2026-07-31T17:19:49Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppij.git/commit/?id=0e6e4404027a187f1399a43bf91bdbd13d9636e1'/>
<id>urn:sha1:0e6e4404027a187f1399a43bf91bdbd13d9636e1</id>
<content type='text'>
* initial implementation - kinda working

* tests and fixes

* fix bounds

* tests and compatibility fixes

* fix: cursor scroll, clears, deletes, key tolerance, and host id range

* fix: keep images alive across resize, relayout and history scroll

* anchor to lines, not pixels

* fix image/text alignments

* config to allow disabling

* fix pinned pane issue

* never let host graphics replies reach the keyboard parser

* fix nested session

* properly handle fullscreening a pane

* rustfmt

* cleanup of ignored test

* add pr</content>
</entry>
<entry>
<title>More dependency upgrades for debian (#5421)</title>
<updated>2026-07-29T15:08:08Z</updated>
<author>
<name>Aram Drevekenin</name>
<email>aram@poor.dev</email>
</author>
<published>2026-07-29T15:08:08Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppij.git/commit/?id=cab75c58fec089d7ee97c0e7ca1abafa9ef5e33f'/>
<id>urn:sha1:cab75c58fec089d7ee97c0e7ca1abafa9ef5e33f</id>
<content type='text'>
* upgrade insta, rand, sha2, strum, thiserror, tokio-tungstenite, toml, which; drop unused semver and typetag

* upgrade sysinfo to 0.39.5, bump toolchain (msrv) to 1.95.0

* remote legacy yaml config converter and thus drop serde_yaml

* upgrade unicode-width to 0.2.2

* fix(tests): run ipc roundtrip test on a larger stack</content>
</entry>
<entry>
<title>Dep upgrades for debian (#5420)</title>
<updated>2026-07-28T10:05:38Z</updated>
<author>
<name>Aram Drevekenin</name>
<email>aram@poor.dev</email>
</author>
<published>2026-07-28T10:05:38Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppij.git/commit/?id=9969ed10b2cd95cb84ddaf8a783949483e2b038b'/>
<id>urn:sha1:9969ed10b2cd95cb84ddaf8a783949483e2b038b</id>
<content type='text'>
* chore(deps): upgrade base64 0.22, colored 3.1, crossterm 0.29, dialoguer 0.11, directories 6.0, highway 1.2, prost 0.12.6, strip-ansi-escapes 0.2.1, suggest 0.5.1

* chore(deps): upgrade miette 7.6, nix 0.30, notify 8.2, notify-debouncer-full 0.5

* vte 0.15

* clap 4.6

* workspaceify plugin deps

* don't send empty fs watch events</content>
</entry>
<entry>
<title>fix: input spam when moving mouse while typing by splitting the input bytes into their respective events (#5323)</title>
<updated>2026-07-17T13:24:52Z</updated>
<author>
<name>Pierre Kisters</name>
<email>1524059+lhns@users.noreply.github.com</email>
</author>
<published>2026-07-17T13:24:52Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppij.git/commit/?id=d9682a2eef5ac0236808f05337f4f224bcf9d55f'/>
<id>urn:sha1:d9682a2eef5ac0236808f05337f4f224bcf9d55f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Allow creating panes/tabs from the CLI without changing focus to them (#5346)</title>
<updated>2026-07-09T14:52:50Z</updated>
<author>
<name>Aram Drevekenin</name>
<email>aram@poor.dev</email>
</author>
<published>2026-07-09T14:52:50Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppij.git/commit/?id=4bfda976b110b5d3182fca004ee7031f6322253e'/>
<id>urn:sha1:4bfda976b110b5d3182fca004ee7031f6322253e</id>
<content type='text'>
* feat: allow opening panes and tabs from the cli without focusing them

* rustfmt

* fix flake

* rustfmt

* add pr</content>
</entry>
<entry>
<title>UI tweaks (#5337)</title>
<updated>2026-07-06T20:09:06Z</updated>
<author>
<name>Aram Drevekenin</name>
<email>aram@poor.dev</email>
</author>
<published>2026-07-06T20:09:06Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppij.git/commit/?id=5b310ada794559c8be459424db03e83548151700'/>
<id>urn:sha1:5b310ada794559c8be459424db03e83548151700</id>
<content type='text'>
* remove dimmed

* clearer list ui

* fix integration tests

* rustfmt

* move hint to tab-bar

* redesign stack list

* rustfmt

* fix e2e

* add pr</content>
</entry>
<entry>
<title>fix: more verbose startup errors (#5334)</title>
<updated>2026-07-06T06:55:09Z</updated>
<author>
<name>Aram Drevekenin</name>
<email>aram@poor.dev</email>
</author>
<published>2026-07-06T06:55:09Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppij.git/commit/?id=7b823f972ada878456d0dc91fc6b3472972f045a'/>
<id>urn:sha1:7b823f972ada878456d0dc91fc6b3472972f045a</id>
<content type='text'>
* fix: more verbose startup errors

* add pr</content>
</entry>
<entry>
<title>Title frames (#5318)</title>
<updated>2026-06-29T16:10:59Z</updated>
<author>
<name>Aram Drevekenin</name>
<email>aram@poor.dev</email>
</author>
<published>2026-06-29T16:10:59Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppij.git/commit/?id=245f5141c9bb7eb91f003efac4defc94470243fd'/>
<id>urn:sha1:245f5141c9bb7eb91f003efac4defc94470243fd</id>
<content type='text'>
* initial implementation

* improve single line title design

* hint text plugin infra

* add proto regen task

* display alt text in status bar

* don't display text with full frames

* style alt hover text

* fix + style control own pane hover

* make multiplayer indications responsive

* update snapshots

* plugin api

* single pane as tab

* better scroll styling

* fix tests

* tab-bar plus hover

* plugin surface tests

* integration tests

* adjust all integration tests

* reduce hover noise

* add pane id to in place

* more integration tests

* style: rustfmt

* update plugin assets

* update assets and snapshots

* add pr</content>
</entry>
<entry>
<title>chore: new test infra (#5269)</title>
<updated>2026-06-16T13:44:22Z</updated>
<author>
<name>Aram Drevekenin</name>
<email>aram@poor.dev</email>
</author>
<published>2026-06-16T13:44:22Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppij.git/commit/?id=8c7e41c9aaafc44520380a2c86db517fde54ad31'/>
<id>urn:sha1:8c7e41c9aaafc44520380a2c86db517fde54ad31</id>
<content type='text'>
* initial implementation

* refactoring and cleanups

* port basic e2e tests

* fix tab rotation

* migrate client and mouse tests

* migrate the rest of the tests

* remove old e2e tests

* rustfmt

* add e2e note

* fix stale test

* fix: cross platform locking/cleanup

* fix: change mode race discovered by tests

* rustfmt

* fix: attach/detach race in tests

* fix plugin test assertion

* add pr</content>
</entry>
</feed>
