From c453d5c3ba41af61975a83ea553b41e410d88ae2 Mon Sep 17 00:00:00 2001 From: Lukasz Kasprzak Date: Thu, 20 Aug 2026 23:16:01 +0200 Subject: colitur-mu: an editable microui front-end, and its Xlib backend Same data as colitur-x, but the invocation is editable: year, language, book-name form and numbering tradition are buttons that re-run colitur. No calendar logic is reimplemented; the status line shows the exact command that produced what is on screen. microui (MIT, rxi) is vendored rather than packaged -- a copied-in dependency cannot rot, which is the whole reason to prefer it over a toolkit here. mu_x11.c carries one bug worth recording: microui resets its scissor with an unclipped rect of 0x1000000, and XRectangle's w/h are unsigned short, so it truncated to 0 and turned 'clip nothing' into 'clip everything'. A panel drew its first screenful and the rest vanished. --- README.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'README.md') diff --git a/README.md b/README.md index e7b8c6e..a5662fc 100644 --- a/README.md +++ b/README.md @@ -35,3 +35,35 @@ how it is painted. correct rendering for `æ`/`œ` and Polish diacritics. Not worth it. - A tiling window manager will ignore the size hints and give the grid its own tile; the layout handles that, the empty space is the WM's choice. + +## colitur-mu — the microui variant + +`colitur-mu` is the same idea with an *editable* surface: year, language, +book-name form and numbering tradition are buttons, and changing any of them +re-runs colitur and reloads. It reimplements no calendar logic — every value +on screen came out of `colitur emit --format csv`, and the exact command is +shown in the status line. + + make colitur-mu && ./colitur-mu + +microui (MIT, rxi) is **vendored** in `vendor/`, 1504 lines. That is the point: +a copied-in dependency cannot rot. `mu_x11.c` is the Xlib/Xft backend, ~150 +lines — microui emits a command list and asks two font-metric questions; this +answers them. + +### One bug worth recording + +microui resets its scissor by emitting an "unclipped" rectangle of +`0x1000000` × `0x1000000`. `XRectangle`'s width and height are **unsigned +short**, so that truncates to **0** — turning "clip nothing" into "clip +everything". The symptom is that a scrolling panel draws its first screenful +and everything after it silently disappears, which looks like a layout or +buffer-overflow bug and is neither. `set_clip()` clamps to the buffer bounds +before converting. + +### Which to use + +`colitur-x` renders; `colitur-mu` renders and lets you change the invocation. +Neither is the right answer for a non-technical user on a machine that is not +yours — both are X11-only and must be compiled. For that, a static site or a +small local web UI wins. -- cgit v1.3