Skip to content

chronos

Batch 8.

chronos is a keyboard-driven calendar whose home surface is a week view rendered as a time grid — seven day columns, a vertical time axis, events drawn as blocks positioned and sized by their start/duration. Its signature feature is zoom: the time axis renders at 30min, 15min, 5min, or 1min granularity, switchable with +/-, so the same fixed terminal height shows either a whole day at a glance or a single hour in fine detail. It has a visual mode (v) for selecting a time range, undo/redo, and — the other standout — form-based event editing via the Huh library (a structured multi-field input panel) instead of inline editing. All-day events render in a separate strip toggled with tab.

For KN-86 this is the most directly applicable calendar reference in the batch: the time-grid + zoom mechanic is exactly the “how do you show variable density in a fixed cell budget” problem KN-86 faces on every surface, and Huh is a clean model for the structured-input panels a KN-86 cart needs.

  • Time-grid week view: day columns × time-slot rows; events are blocks placed at their start row and extended over their duration. This is fundamentally a 2D grid render — KN-86’s native model — not a list.
  • Zoom = density control on a fixed canvas. The crux. At 30min each row covers 30 minutes (whole day fits, coarse); at 1min each row is a minute (one hour fills the screen, precise). The terminal height never changes — only how much time each row represents. This is the single most transferable idea: KN-86 has a fixed row budget, and “let the operator trade temporal range against detail by changing what each row means” is a general solution to constrained-display density that applies far beyond calendars (zoomable logs, waveform views, mission timelines).
  • Visual-mode range selection (v): mark a start, move the cursor, the swept range highlights — then act on it (create an event spanning it, clear it). A vim-native multi-cell selection primitive.
  • All-day strip toggled separately (tab) so timed and untimed events don’t fight for the same grid space.
  • Event blocks are positioned + sized, not colored. An event’s meaning on the grid comes from where it sits (which day column, which time row) and how tall it is (duration) — both spatial channels that survive monochrome untouched. Lip Gloss styling adds color in chronos, but the load-bearing information is geometric.
  • The zoom mechanic is color-agnostic — it’s about row semantics, not hue. Ports to KN-86 with zero adaptation.
  • Visual-mode selection needs a highlight channel; on KN-86 that’s inversion (swept range = inverted cells), not a highlight color.
KeyAction
hjkl / arrowsMove cursor on grid
H / LPrevious / next week
w / b / eNext / previous / end of event
tJump to current time
gg / GStart / end of day
gh##Jump to hour ##
gt####Jump to time (e.g. gt1430 → 2:30pm)
vVisual (range-select) mode
+ / -Zoom time-grid granularity
aAdd event (Huh form)
cc / ct / csEdit all / title / start-time
u / UUndo / redo

Deep, fully vim-idiomatic, with composable temporal jumps (gh, gt). The gt1430-style absolute-time jump is a sharp pattern for any KN-86 surface that needs precise navigation in a large coordinate space.

  • Bubble Tea + Lip Gloss — the Charm stack (cross-link cliamp.md, octoscope.md, golazo.md).
  • Huh — Charm’s form library: structured multi-field input (text fields, selects, confirms) rendered as a focused panel. This is the piece worth singling out. KN-86 carts repeatedly need structured input (configure a mission, name a save, set parameters) and Huh is a clean reference for what that panel’s interaction model should be: tab between fields, per-field edit keys (ctrl+u clear, ctrl+a/ctrl+e line-start/end, ctrl+w/ctrl+k delete), submit/cancel. Add Huh to the form-input reference set.
  • go-ical (.ics), rrule-go (recurrence) — interop, not core.
  • Undo/redo (u/U) over an edit history — a reversible-command model. A KN-86 cart with a structured editor (mission builder, journal) should consider the same: every edit a reversible command.
  • Storage: local .ics files by default; experimental CalDAV sync. Config at ~/.config/chronos/config.json, with secret resolution via password managers or env vars.
  • rrule-based recurrence computed at render time rather than materialized — events expand from a rule when the grid is drawn.
  • Zoom ports unchanged — it’s the cleanest single-color-friendly mechanic in the batch because it operates on row semantics, not appearance. KN-86 should treat chronos’s zoom as the template for any density-trading surface: a +/- granularity control that changes what each row/cell represents while the canvas stays fixed.
  • Event blocks via box-drawing, position, and brightness: an event = a bordered block (box-drawing) occupying its day column × duration rows; overlapping/conflicting events shown by a doubled left rule or a fill; the cursor’s event inverted. Category — if needed — by a leading glyph (per calcure.md’s keyword-glyph idea), never by color.
  • Visual-mode selection = inverted cell run. The swept range renders as black-on-amber; the rest stays amber-on-black. One channel (inversion), unambiguous.
  • Huh-style form panel monochrome: active field = inverted label or a caret + underline cursor; inactive fields = dim; required/invalid = a trailing ! glyph rather than red text. The whole structured-input model survives on one color via caret position + brightness + inline glyph markers.
  • Strongest time-grid / density-control reference in the corpus. The zoom-as-row-semantics idea is the takeaway worth flagging up: it generalizes past calendars to any KN-86 surface fighting the fixed-cell budget.
  • Huh is the form-input reference for KN-86’s structured-input panels — pair it with the keyboard-first input lineage in l123.md.
  • Calendar-spectrum cross-links: caps-log.md (year/month index end) and calcure.md (month + agenda middle). chronos is the intraday, zoomable end — the highest-resolution calendar reference of the three.