diff options
| author | user <user@clank> | 2026-08-19 13:46:57 +0200 |
|---|---|---|
| committer | user <user@clank> | 2026-08-19 13:46:57 +0200 |
| commit | 42b3c10995eb67778d9dd3aa2fd80624896acd5f (patch) | |
| tree | 751bcb8604967dc8687cf23fbeb1033aa26ca427 /tests/expr_test.c | |
| parent | slosh: a website that is a page, not a mock session (diff) | |
| download | slosh-42b3c10995eb67778d9dd3aa2fd80624896acd5f.tar.gz slosh-42b3c10995eb67778d9dd3aa2fd80624896acd5f.tar.xz slosh-42b3c10995eb67778d9dd3aa2fd80624896acd5f.zip | |
slosh: defaults most people can live in, said by shaders
The out-of-the-box look, rethought as one piece:
- the compiled-in palette calms down: muted blue #7aa2f7 on the same
neutral darks, with the colours that mean something kept semantic --
amber bell, red-orange dead. sl0p stays one include away as the house
style, and contrib/themes/default.kdl is the starting point written
down (theme-tour shows it).
- derived state defaults now actually follow the theme: the scrolled
wash is rebuilt from scroll_bg after the theme block (it used to bake
the compiled accent), and declaring a state -- in any file of an
include chain -- still wins. The dump writes derived states as
comments so C-a e cannot pin what is meant to keep following.
- a bell you can see: the frame blinks three times in theme's bell
colour then breathes until answered, and a soft diagonal shimmer --
the bell colour halved towards default_fg, width breathing on a sine
-- crosses the body for the same 900ms. bell_indicator false silences
all of it; states { bell { } } replaces it like any state. since
carries the clock dependency, so an idle session pays nothing.
- scrollback says where it continues: while scrolled, the viewport's
top and bottom rows melt towards an edge with content past it and
turn solid at the buffer's end. New expression variables above/below
(lines hidden past each edge, own dependency bit, cached per scroll
position), carried in shade_ctx_t -- SLOSH_SHADER_ABI 3 -> 4.
- expressions survive the dump: a program keeps its source and cb_chain
writes it back, so amount="(y % 2) * 40" no longer dumps as a number.
- headers move to include/, -Iinclude everywhere; the plugin Makefile's
SLOSH var becomes SLOSH_DIR because slosh exports SLOSH=1 into every
pane it runs, and building from inside a session read that as a path.
- comment drift culled where features outran the prose, and the
derivation boilerplate folded into derived_pass()/ctx_scroll().
Diffstat (limited to 'tests/expr_test.c')
| -rw-r--r-- | tests/expr_test.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/tests/expr_test.c b/tests/expr_test.c index 19968d1..4745ca3 100644 --- a/tests/expr_test.c +++ b/tests/expr_test.c @@ -286,6 +286,25 @@ int main(void) { refused("a ternary without its colon", "1 ? 2"); refused("something that is not an expression at all", "@@@"); + printf("\n-- the source survives compilation\n"); + { + /* The dump has to write back the line somebody wrote: bytecode cannot be + * un-compiled, so the program keeps its text. Byte for byte, including a + * constant expression -- folding must not eat the spelling. */ + const char *src = "(y % 2) * 40"; + char err[128] = {0}; + expr_prog_t *p = expr_compile(src, err, sizeof err); + ok("a program remembers its source", + p && expr_source(p) && strcmp(expr_source(p), src) == 0, + p ? expr_source(p) : err); + if (p) expr_free(p); + p = expr_compile("1 + 2", err, sizeof err); + ok("even one that folded to a constant", + p && expr_source(p) && strcmp(expr_source(p), "1 + 2") == 0, + p ? expr_source(p) : err); + if (p) expr_free(p); + } + printf("\n-- totality: there is no loop to write\n"); { /* The language has no way to express unbounded work, so this is a |
