<feed xmlns='http://www.w3.org/2005/Atom'>
<title>slosh.git/web/demo, branch docs-new</title>
<subtitle>an opinionated terminal multiplexer in C with programmable pane chrome</subtitle>
<id>https://git.sl0p.foo/slosh.git/atom/web/demo?h=docs-new</id>
<link rel='self' href='https://git.sl0p.foo/slosh.git/atom/web/demo?h=docs-new'/>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/slosh.git/'/>
<updated>2026-08-30T14:28:57Z</updated>
<entry>
<title>webdemo: no attach splash -- the welcome float already greets</title>
<updated>2026-08-30T14:28:57Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-08-30T14:28:57Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/slosh.git/commit/?id=9022512f573ad515f08cd9b42b1f0f3948ee75fb'/>
<id>urn:sha1:9022512f573ad515f08cd9b42b1f0f3948ee75fb</id>
<content type='text'>
Two logos in quick succession -- the splash's, then the welcome
float's -- reads as a glitch, not a greeting, technically correct or
not. splash_ms 0 in the guest config; the comment leaves the knob
visible for anyone editing their way through the playground.
</content>
</entry>
<entry>
<title>web: the demo machine, bootable in the front page</title>
<updated>2026-08-30T14:28:57Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-08-30T14:28:57Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/slosh.git/commit/?id=a5ce3d56f9ba17acf073b9ca051e658bfd262cae'/>
<id>urn:sha1:a5ce3d56f9ba17acf073b9ca051e658bfd262cae</id>
<content type='text'>
A try section between the tour and the install box: a modest poster
with one button, and the machine only when the button is pushed -- the
front page keeps costing two files, which is the decision the README
recorded when the demo got its own page, still being honoured.

The click grows the stage to most of a viewport *before* the iframe
goes in (the guest reads its geometry from the room exactly once, at
boot), then glides the scroll to land the machine centred. An iframe,
not the demo's scripts inlined: the emulator's emscripten glue owns
its globals by name, and isolation is what keeps this page and that
blob out of each other's namespaces. ?embed=1 makes the demo page
drop its own header and footer inside the frame; standalone it is
unchanged, and phones navigate to it rather than embedding -- wasm
under a soft keyboard in an iframe helps nobody.

The floating logo learns the tour's edges properly while at it: the
try section arriving closes the show (measured with a -45% rootMargin,
because the tour's exit margin lets the section ride high while the
last step is still centred), and a section scrolled past counts as
arrived, not gone.
</content>
</entry>
<entry>
<title>webdemo: fit with font size, not scale -- a transform misplaces clicks</title>
<updated>2026-08-30T13:38:14Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-08-30T13:38:14Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/slosh.git/commit/?id=6e25c746e7cf3184fd30cae4d4c10299315717ce'/>
<id>urn:sha1:6e25c746e7cf3184fd30cae4d4c10299315717ce</id>
<content type='text'>
xterm turns a mouse event into a cell with getBoundingClientRect() and
its own unscaled cell metrics, so the scale() that stretched the fixed
grid into the stage put every click on the wrong cell, off by the
scale factor. Desktop kept the factor near 1 -- cols and rows are
derived from the same room the scale fills -- so it passed for
working; a phone is forced onto the 80-column floor, the factor lands
near a half, and a tap selects a pane the finger never touched.

Refit the font size instead: walk it until the grid fills the room
(iterated, cell metrics are not linear in font size), centre the
leftover with translate, which moves rect and clicks together. The
grid stays what the guest was told at boot; only the glyphs move. A
webfont resolving late changes the metrics under the fit, so refit
again when document.fonts settles.
</content>
</entry>
<entry>
<title>webdemo: land in the playground, not just the demo</title>
<updated>2026-08-30T13:23:02Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-08-30T13:23:02Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/slosh.git/commit/?id=749dac89798ab1ec8a4869ce92f4bd02f67d7774'/>
<id>urn:sha1:749dac89798ab1ec8a4869ce92f4bd02f67d7774</id>
<content type='text'>
The overlay grows into a first session worth having:

- The config is a playground now -- every theme the repo ships rides
  along as an include one word away, and the settings worth flipping
  (compact, shaders, keys, dim_unfocused) sit commented in the file,
  each one uncomment-and-save from happening on screen.
- C-a e opens vim, not busybox vi: editor "vim" in the config, since
  the image always carried the real vim and its kdl syntax without
  ever launching them. shortmess in the vimrc keeps the file-info
  message from wedging a narrow pane into a hit-enter prompt.
- The config starts open, highlighted, in a pane of its own: the
  discovery C-a e would make, made before anyone has to make it.
- A welcome float greets over everything, the slosh logo on top,
  centred by the layout engine at whatever size the browser gave the
  terminal (the previous commit is its enabling act). It teaches its
  own dismissal -- C-a x, or the X it wears -- and it never exits on
  its own, so keep_dead has no corpse to keep.
</content>
</entry>
<entry>
<title>webdemo: the theme symlink is a dependency of the image</title>
<updated>2026-08-19T18:15:54Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-08-19T18:15:54Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/slosh.git/commit/?id=a60ff3235df75b0ba13891528edd29003ac52243'/>
<id>urn:sha1:a60ff3235df75b0ba13891528edd29003ac52243</id>
<content type='text'>
$(shell find overlay -type f) skips symlinks, and the one symlink in
overlay/ is the sl0p theme pointing into contrib/themes -- the file the
README promises cannot drift was the one file whose edit did not
rebuild the rootfs. find -L includes it, and make stats prereqs through
symlinks, so the target's mtime is the one compared.

Found while tracing what a src/app.c edit does under make www: that
path was already correct (depfile -&gt; object -&gt; guest -&gt; image -&gt; site).
</content>
</entry>
<entry>
<title>slosh: the website lives in web/ -- one directory, one build, make www</title>
<updated>2026-08-19T18:11:10Z</updated>
<author>
<name>user</name>
<email>user@clank</email>
</author>
<published>2026-08-19T18:11:10Z</published>
<link rel='alternate' type='text/html' href='https://git.sl0p.foo/slosh.git/commit/?id=76f3868cd7b775cb59b85a32c2b223732f6afc30'/>
<id>urn:sha1:76f3868cd7b775cb59b85a32c2b223732f6afc30</id>
<content type='text'>
Consolidate everything the website is made of:

- web_new/ -&gt; web/: the front page, install.sh, and build-site
- contrib/webdemo/ -&gt; web/demo/: the in-browser machine, committed for
  the first time (it had never been checked in)
- make www at the top level assembles the whole site into build/www
  (NO_DEMO=1 skips the guest cross-compile)
- web_plan.md deleted: the plan is fulfilled and web/README.md is now
  the record

Path fallout: the overlay theme symlink gains one ../ (web/demo is a
level shallower relative to contrib/themes), PYSRC in the Makefile
follows the demo scripts, contrib/README.md drops its webdemo section.
ROOT := ../.. in the demo Makefile survives unchanged -- web/demo sits
at the same depth contrib/webdemo did.

Verified: make www builds front page + docs + demo end to end,
web/demo make check boots the image to slosh, tests/test_docs.py and
make fmt-check green.
</content>
</entry>
</feed>
