<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sl0ppij.git/CHANGELOG.md, branch main</title>
<subtitle>a sl0p.foo repository</subtitle>
<id>https://git.sl0p.foo/sl0ppij.git/atom/CHANGELOG.md?h=main</id>
<link rel='self' href='https://git.sl0p.foo/sl0ppij.git/atom/CHANGELOG.md?h=main'/>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppij.git/'/>
<updated>2026-07-31T17:19:49Z</updated>
<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>fix(build): remove manpage, honor CARGO_TARGET_DIR, add cargo argument passthrough, remove clippy (#5426)</title>
<updated>2026-07-30T14:50:12Z</updated>
<author>
<name>Aram Drevekenin</name>
<email>aram@poor.dev</email>
</author>
<published>2026-07-30T14:50:12Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppij.git/commit/?id=0ed2edea0cabf1ca7ce0983d7a0ec0430a33d621'/>
<id>urn:sha1:0ed2edea0cabf1ca7ce0983d7a0ec0430a33d621</id>
<content type='text'>
* fix(build): remove manpage, honor CARGO_TARGET_DIR, add cargo argument passthrough, remove clippy

* add pr</content>
</entry>
<entry>
<title>Nested session handling (#5417)</title>
<updated>2026-07-27T16:24:37Z</updated>
<author>
<name>Aram Drevekenin</name>
<email>aram@poor.dev</email>
</author>
<published>2026-07-27T16:24:37Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppij.git/commit/?id=ea07e2d5b6bbc9ea6f9c765b0838b3e91156a58d'/>
<id>urn:sha1:ea07e2d5b6bbc9ea6f9c765b0838b3e91156a58d</id>
<content type='text'>
* fix: theme query and updated pixel dimensions

* add no-ui-fullscreen key/action/capability

* protocol core

* integration test harness

* fix integration tests

* fix flaky tests

* nested ui (dimming) and directional focus initial implementation

* integration tests for nested ui dimming and directional focus

* initial full screen nesteed implementation

* fix: keep hidden floating panes hidden across nested no-ui fullscreen

* fix integration tests

* no ui fullscreen integration tests

* hardening behavior/tests

* fix(nested): re-derive descend/dim on host tab switch and new-tab so clicking dimmed chrome ascends

* initial modal implementation

* initial ui improvements

* fix integration tests

* improve nested selection ui

* nested session modal refactoring and tests

* improve integration test speed somewhat

* some ui adjustments

* simplify full/auto nested session handling

* hints in compact-bar

* guest stdin leak fix

* allow floating panes to be fullscreen

* make nested session handling configurable

* protocol reannounce

* refactor: naming confusion

* improve ux somewhat

* rustfmt

* merge fixes

* improve integration test rate limiting (fix ci)

* add pr</content>
</entry>
<entry>
<title>Switch from the unmaintained daemonize crate to a maintained fork (#4512)</title>
<updated>2026-07-27T11:08:50Z</updated>
<author>
<name>Fabio Valentini</name>
<email>decathorpe@users.noreply.github.com</email>
</author>
<published>2026-07-27T11:08:50Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppij.git/commit/?id=d0f829f3fdce2c67f8e68a076ade2af88b4ffcce'/>
<id>urn:sha1:d0f829f3fdce2c67f8e68a076ade2af88b4ffcce</id>
<content type='text'>
* Switch from the unmaintained daemonize crate to a maintained fork

c.f. https://rustsec.org/advisories/RUSTSEC-2025-0069.html

* add pr

---------

Co-authored-by: Aram Drevekenin &lt;aram@poor.dev&gt;</content>
</entry>
<entry>
<title>chore: replace unmaintained cassowary with maintained fork kasuari (#5416)</title>
<updated>2026-07-27T10:26:02Z</updated>
<author>
<name>Aram Drevekenin</name>
<email>aram@poor.dev</email>
</author>
<published>2026-07-27T10:26:02Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppij.git/commit/?id=828a1508c6366049ab3756aaba7631f7a4e5a81c'/>
<id>urn:sha1:828a1508c6366049ab3756aaba7631f7a4e5a81c</id>
<content type='text'>
* chore: replace unmaintained cassowary with maintained fork kasuari

* add pr</content>
</entry>
<entry>
<title>fix(windows): prefer PATHEXT variants over bare filename in resolver (#5364)</title>
<updated>2026-07-21T10:18:04Z</updated>
<author>
<name>divens</name>
<email>divens@users.noreply.github.com</email>
</author>
<published>2026-07-21T10:18:04Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppij.git/commit/?id=812ad861bc3f4a8ba6f411c1a3b1163bfef43766'/>
<id>urn:sha1:812ad861bc3f4a8ba6f411c1a3b1163bfef43766</id>
<content type='text'>
`find_executable` used to short-circuit on the first exists()-and-is_file
match and only consult PATHEXT if no bare file was present. That returned
the wrong file for tools whose Windows installer ships both a Unix-style
launcher and a `.bat` alongside it. The reported case is Composer, whose
setup places bare `composer` (a Unix launcher, invalid PE on Windows) next
to `composer.bat`. The bare file was resolved and handed to CreateProcessW,
which rejected it with ERROR_BAD_EXE_FORMAT.

On Windows, when the candidate has no user-supplied extension, walk PATHEXT
first and only fall back to the bare match if nothing matches. This mirrors
cmd.exe's and powershell's resolution.</content>
</entry>
<entry>
<title>docs(changelog): stdin parse fix</title>
<updated>2026-07-17T13:25:57Z</updated>
<author>
<name>Aram Drevekenin</name>
<email>aram@poor.dev</email>
</author>
<published>2026-07-17T13:25:57Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppij.git/commit/?id=3039188867393f3d923e9a882ac9c724da620f5d'/>
<id>urn:sha1:3039188867393f3d923e9a882ac9c724da620f5d</id>
<content type='text'>
</content>
</entry>
<entry>
<title>docs(changelog): pane rename clear fix</title>
<updated>2026-07-17T13:11:12Z</updated>
<author>
<name>Aram Drevekenin</name>
<email>aram@poor.dev</email>
</author>
<published>2026-07-17T13:11:12Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppij.git/commit/?id=93e700e066d4036ac01ff5f8435c6e355c1e548f'/>
<id>urn:sha1:93e700e066d4036ac01ff5f8435c6e355c1e548f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix(grid): properly pad rows in CUF (#5377)</title>
<updated>2026-07-17T10:31:19Z</updated>
<author>
<name>Aram Drevekenin</name>
<email>aram@poor.dev</email>
</author>
<published>2026-07-17T10:31:19Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppij.git/commit/?id=1889819b52b3821e4639fdffdd69e978016ca0f9'/>
<id>urn:sha1:1889819b52b3821e4639fdffdd69e978016ca0f9</id>
<content type='text'>
* fix(grid): properly pad rows in CUF

* add pr</content>
</entry>
<entry>
<title>fix(grid): scroll the region when a line wraps at its bottom margin (#5357)</title>
<updated>2026-07-17T09:06:57Z</updated>
<author>
<name>Mofan552</name>
<email>71218481+mofan552@users.noreply.github.com</email>
</author>
<published>2026-07-17T09:06:57Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/sl0ppij.git/commit/?id=6b967baacc86cb24b3fd55e445c833b28f733c0c'/>
<id>urn:sha1:6b967baacc86cb24b3fd55e445c833b28f733c0c</id>
<content type='text'>
* fix(grid): scroll the region when a line wraps at its bottom margin

Wrapping at the bottom margin of a DECSTBM scroll region used to move
the cursor below the region instead of scrolling it, after which no
subsequent output could scroll through the region (or reach scrollback
for top-anchored regions) anymore.

line_wrap() now mirrors add_canonical_line(): the region scrolls up one
line, the cursor stays on its bottom row, and the new row is a wrapped
(non-canonical) row. Top-anchored partial regions preserve the
scrolled-off line in scrollback (#4941), other regions discard it, and
the alternate screen never transfers.

* docs(changelog): line wrap scroll region fix

* fix(grid): keep hyperlink tracking aligned when wrap scrolls an inner region

When a line wraps at the bottom of a scroll region that does not start
at the top of the screen, the region's rows shift up but the hyperlink
tracker's recorded positions did not, so a URL wrapping there lost its
clickable anchors. Offset the tracked positions for the rows inside the
region, the way the full-screen and top-anchored paths already do via
offset_cursor_lines.

* refactor shared logic and adjust changelog

---------

Co-authored-by: Aram Drevekenin &lt;aram@poor.dev&gt;</content>
</entry>
</feed>
