Skip to main content

max / alloy_tui

Strip historical narrative from documentation Remove what a doc used to say, when it changed, the incidents that justified a rule, finished migration narration, and counts and versions that rot. State the rules in the present tense instead. Keep every instruction, prohibition and threshold, and keep the measurements that make a rule actionable. Public-facing docs keep their explanatory voice.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session
https://claude.ai/code/session_01MptwXZ8k65v19rFmdGAyki
Author: Max Johnson <me@maxj.phd> · 2026-08-31 01:51 UTC
Signed with PGP, not checked
Commit: 8ab18e39000e3f9886a30181e1a0da5e99a996d6
Parent: 08dce62
4 files changed, +20 insertions, -29 deletions
M README.md +4 -8
@@ -4,8 +4,8 @@
4 4 reserved keymap, and a focus ring, driven by
5 5 [makeover](https://crates.io/crates/makeover) themes.
6 6
7 - Extracted from the Alloy console so other terminal UIs can share one look
8 - rather than each re-deriving colors from a palette.
7 + One look that any terminal UI can share, rather than each one re-deriving
8 + colors from a palette.
9 9
10 10 ## What it gives you
11 11
@@ -50,9 +50,5 @@
50 50
51 51 ## License
52 52
53 - MIT.
54 -
55 - Split out of the [Alloy](https://makenot.work/git/max/alloy) repository, which is
56 - GPLv3-or-later. This crate is permissive on purpose: it is the reusable design
57 - system, not the application, and other terminal UIs should be able to adopt the
58 - look without inheriting copyleft.
53 + MIT. This crate is the reusable design system rather than the application, so
54 + any terminal UI can adopt the look.
M src/bevel.rs +8 -11
@@ -27,18 +27,15 @@
27 27 //!
28 28 //! # Where the painting lives
29 29 //!
30 - //! Not here, since 2026-07-30. `makeover-tui` is the family's terminal renderer
31 - //! for the same light model, arrived at independently two days after this module
32 - //! and carrying two things this one never had: the fidelity measurements (across
33 - //! 31 themes, a bevel loses an edge into its face on all of them at sixteen
34 - //! colours) and a glyph fallback for that case. It also renders
35 - //! [`makeover_tui::makeover_layout`]'s description, which is what lets a control light the same
36 - //! way in a terminal and in an egui window.
30 + //! Not here. `makeover-tui` is the family's terminal renderer for the same light
31 + //! model, and it carries the fidelity measurements (across 31 themes, a bevel
32 + //! loses an edge into its face on all of them at sixteen colours) and a glyph
33 + //! fallback for that case. It also renders
34 + //! [`makeover_tui::makeover_layout`]'s description, which is what lets a control
35 + //! light the same way in a terminal and in an egui window.
37 36 //!
38 - //! So the painting moved there, taking this module's half-blocks and split
39 - //! corners with it, and what stays is the part worth keeping: a `Widget` that
40 - //! speaks [`Theme`] rather than a palette, so an Alloy caller does not assemble
41 - //! one per frame.
37 + //! What stays here is a `Widget` that speaks [`Theme`] rather than a palette, so
38 + //! an Alloy caller does not assemble one per frame.
42 39 //!
43 40 //! <!-- wiki: alloy-console -->
44 41
M src/keys.rs +3 -5
@@ -127,11 +127,9 @@
127 127 /// holding an active text input should route keys to the input and consult
128 128 /// this classifier only for `Cancel`, `Save`, and the focus movers.
129 129 ///
130 - /// `h` and `l` make this obligation sharper than it was. The earlier
131 - /// character actions were punctuation and one letter that rarely opens a
132 - /// word; `h` and `l` are ordinary letters that appear in almost any typed
133 - /// value, so a view that forwards raw keys to an input without this check
134 - /// now changes tabs mid-word rather than merely on a stray `q`.
130 + /// `h` and `l` make this obligation sharp. They are ordinary letters that
131 + /// appear in almost any typed value, so a view that forwards raw keys to an
132 + /// input without this check changes tabs mid-word.
135 133 pub fn classify(key: KeyEvent) -> Action {
136 134 let ctrl = key.modifiers.contains(KeyModifiers::CONTROL);
137 135 let shift = key.modifiers.contains(KeyModifiers::SHIFT);
M src/theme.rs +5 -5
@@ -1,11 +1,11 @@
1 1 //! Alloy's theme: the family's resolved intents plus the two border tokens
2 2 //! Alloy derives for itself.
3 3 //!
4 - //! The intent-to-`Color` mapping is [`makeover_tui::Theme`]. It used to be a
5 - //! second copy here, and the two agreeing about which intent a surface reads
6 - //! from was a convention rather than a fact. Quantisation moved with it, for the
7 - //! same reason and one more: [`makeover_tui::Theme`] is `#[non_exhaustive]`, so
8 - //! a copy out here could not rebuild a quantised version of it anyway.
4 + //! The intent-to-`Color` mapping is [`makeover_tui::Theme`], and never a second
5 + //! copy here: two mappings agreeing about which intent a surface reads from is a
6 + //! convention rather than a fact. Quantisation lives there too, and
7 + //! [`makeover_tui::Theme`] is `#[non_exhaustive]`, so a copy out here could not
8 + //! rebuild a quantised version of it anyway.
9 9 //!
10 10 //! # The two tokens that stayed, and why they are not duplication
11 11 //!