<feed xmlns='http://www.w3.org/2005/Atom'>
<title>slosh.git, branch v0.1.5</title>
<subtitle>an opinionated terminal multiplexer in C with programmable pane chrome</subtitle>
<id>https://git.sl0p.foo/slosh.git/atom/?h=v0.1.5</id>
<link rel='self' href='https://git.sl0p.foo/slosh.git/atom/?h=v0.1.5'/>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/slosh.git/'/>
<updated>2026-09-02T14:26:29Z</updated>
<entry>
<title>release: v0.1.5</title>
<updated>2026-09-02T14:26:29Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-09-02T14:26:29Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/slosh.git/commit/?id=920a222cc9d135bdbd7d2174b3257c530e9d53c5'/>
<id>urn:sha1:920a222cc9d135bdbd7d2174b3257c530e9d53c5</id>
<content type='text'>
</content>
</entry>
<entry>
<title>pty: install the terminfo entry implicitly when it is missing everywhere</title>
<updated>2026-09-02T14:24:41Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-09-02T14:24:41Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/slosh.git/commit/?id=c58a875ef3bcb464cdbea72bdbd0a874b6f93729'/>
<id>urn:sha1:c58a875ef3bcb464cdbea72bdbd0a874b6f93729</id>
<content type='text'>
The lookup miss now writes the embedded entry to ~/.terminfo and
uses it, so a bare box gets the full TERM with no step at all. An
entry that exists anywhere is respected -- possibly newer, certainly
somebody's -- and a HOME that cannot be written leaves the
xterm-256color fallback standing. --install-terminfo stays as the
by-hand spelling; the writer moved to pty.c where the panes are.
</content>
</entry>
<entry>
<title>slosh --install-terminfo: the binary carries its own terminfo entry</title>
<updated>2026-09-02T14:22:03Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-09-02T14:22:03Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/slosh.git/commit/?id=f9986df0da09cc692e168e33ef9ccfab5b9d2faf'/>
<id>urn:sha1:f9986df0da09cc692e168e33ef9ccfab5b9d2faf</id>
<content type='text'>
The xterm-256color fallback works everywhere; the real entry is
better, and a tarball user on a bare box had no easy way to get it.
The entry is generated from the vendored tree (contrib/terminfo, so
it describes the terminal core we actually ship), compiled with tic,
embedded as bytes, and written to ~/.terminfo under every name it
answers to, letter and Darwin-hashed layouts both. No root, no
package, no conflict with a ghostty installed later. Proven end to
end in a mount namespace: bare box falls back, installs, and the
next pane says xterm-ghostty.
</content>
</entry>
<entry>
<title>pty: fall back to xterm-256color where xterm-ghostty has no terminfo</title>
<updated>2026-09-02T14:15:55Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-09-02T14:15:55Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/slosh.git/commit/?id=07194e139fbb90cb946be4d1e50e4937dab1ce04'/>
<id>urn:sha1:07194e139fbb90cb946be4d1e50e4937dab1ce04</id>
<content type='text'>
TERM=xterm-ghostty was unconditional, but the entry ships with
ghostty and a machine that has never seen ghostty has ncurses'
database and nothing else. There, nano exits the moment it opens
(C-a e flashing a pane) and a shell that cannot look up kbs guesses
at backspace. The entry is now looked up the way curses would --
TERMINFO, ~/.terminfo, TERMINFO_DIRS, the system dirs, letter and
Darwin-hashed layouts -- and when absent, panes get xterm-256color,
which every ncurses database carries. Verified both ways with a
mount namespace hiding the database.
</content>
</entry>
<entry>
<title>version: never answer for somebody else's git; arch: 0.1.4-3</title>
<updated>2026-09-02T14:10:48Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-09-02T14:10:48Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/slosh.git/commit/?id=9cc6ff911ac794c5831407358fddb7b7c9c24ef6'/>
<id>urn:sha1:9cc6ff911ac794c5831407358fddb7b7c9c24ef6</id>
<content type='text'>
The v0.1.4 arch packages introduced themselves as 0.1.4-dirty: the
tag's tarball has no .git, makepkg builds it inside the release
box's repository, and git describe walked up and answered for the
outer tree -- mid-release, when the paperwork is honestly dirty.
Found at 0.1.2, diagnosed, and then left unfixed by yours truly.

Two fences now. contrib/version only trusts a .git whose toplevel is
its own root (helps every future tarball). The PKGBUILD exports
GIT_CEILING_DIRECTORIES for build and package (helps regardless of
which contrib/version the pinned tarball carries, which is why the
first rebuild still said -dirty: the fix was outside the tarball).
pkgrel=3; both architectures rebuilt, verified 'slosh 0.1.4', and
republished.
</content>
</entry>
<entry>
<title>ship: paperwork before the website, so the demo is not stamped -dirty</title>
<updated>2026-09-02T13:58:12Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-09-02T13:58:12Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/slosh.git/commit/?id=60d622062aefa1258e348c4085ab33e0e7e2ae48'/>
<id>urn:sha1:60d622062aefa1258e348c4085ab33e0e7e2ae48</id>
<content type='text'>
Steps 6 and 7 rewrite the formula and PKGBUILD; building the site
from the tag checkout with those uncommitted made git describe say
-dirty, and v0.1.4's demo introduced itself as 0.1.4-dirty+webdemo.
Commit the pins first, build the site from a clean tag second.
</content>
</entry>
<entry>
<title>release: v0.1.4 paperwork -- formula and PKGBUILD pinned</title>
<updated>2026-09-02T13:57:00Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-09-02T13:57:00Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/slosh.git/commit/?id=0280bc0635cb02ff8a96be7f5d730fee9161c307'/>
<id>urn:sha1:0280bc0635cb02ff8a96be7f5d730fee9161c307</id>
<content type='text'>
</content>
</entry>
<entry>
<title>release: v0.1.4</title>
<updated>2026-09-02T13:47:10Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-09-02T13:47:10Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/slosh.git/commit/?id=975a8933685a058147a2fc2546ecddc74a6f2d91'/>
<id>urn:sha1:975a8933685a058147a2fc2546ecddc74a6f2d91</id>
<content type='text'>
</content>
</entry>
<entry>
<title>vendor: libghostty-vt bedb6f2 -&gt; 3c1ef5b3 (2026-09-01)</title>
<updated>2026-09-02T13:45:32Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-09-02T13:45:32Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/slosh.git/commit/?id=311979f10132697b990a670c6c99b19c1c33d623'/>
<id>urn:sha1:311979f10132697b990a670c6c99b19c1c33d623</id>
<content type='text'>
Three weeks of upstream: 504 commits, 120 touching the terminal core
-- OSC 5522, kitty relative placements, C0 fixes, the wuffs pixel
path. Rebuilt from ghostty's own dist step (zig build dist
-Demit-lib-vt=true), zig floor unchanged at 0.16.0, and slosh's C
usage compiled unmodified.

Patch 0001 is re-implemented, not retired: upstream rewrote the area
into ImageStorage.clearScreen but kept the behaviour we patch out --
a terminal clear still reclaims transmitted-but-unplaced images,
which breaks the upload-once place-per-frame pattern the protocol's
two verbs exist for. The patch now removes just that sweep; the
placement clearing and orphan reaping stay upstream's. Their recent
'preserve data on unmatched delete' fixes the same class of bug, so
sending ours upstream remains the way to actually retire it.
</content>
</entry>
<entry>
<title>contrib/vendor-check: watching upstream is one command now</title>
<updated>2026-09-02T13:38:38Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-09-02T13:38:38Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/slosh.git/commit/?id=8c1553801a9812bf4e8541872eb720470ce89a0b'/>
<id>urn:sha1:8c1553801a9812bf4e8541872eb720470ce89a0b</id>
<content type='text'>
Vendoring by pinned commit stays (D12) -- the package channels build
from source archives where submodules are empty, the arch build is
offline-clean because the core is in the tarball, and upstream has no
stable release channel to depend on anyway. What was missing is the
watching: vendor-check reads the pin from vendor.json, asks the
GitHub API what happened since, and lists the commits touching the
terminal core. First run found 120 relevant commits in three weeks,
including upstream fixing the same class of kitty-graphics bug our
patch 0001 fixes -- which is the argument for finally sending it.
</content>
</entry>
</feed>
