Skip to main content

max / shop

Say that shop declines emoji, rather than lacking them Max's call, 2026-08-09. Nothing to build: an emoji already resolves to a font, fails to rasterize as an alpha mask, and leaves an empty cell of the right width, so the decision was already the behaviour. Recorded next to the ligature decision because it is the same kind of thing — something shop chooses not to do — and because the width is the part that matters: an emoji still takes the columns it is owed, so text around one stays put and a line of somebody else's output reads as it was written. Drawing them would mean a colour atlas, glyphs that carry their own colour instead of taking the cell's, and bitmap strikes at a size that is never the cell's.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-08-09 16:19 UTC
Signed with PGP, not checked
Commit: 7eba62f1e2246480cd967ed022039c1417db1179
Parent: 53551eb
1 file changed, +8 insertions, -0 deletions
M README.md +8
@@ -172,6 +172,14 @@
172 172 still occupy two cells — and a ligature makes a cursor sitting between them land
173 173 visually inside a glyph. Column-accurate editing wins that trade.
174 174
175 + Colour emoji are not drawn either, and that is a decision rather than a gap.
176 + Drawing them means a second atlas in colour, glyphs that carry their own colour
177 + instead of taking the cell's, and bitmap strikes at a fixed size that is never
178 + the cell's — a colour pipeline running the whole length of the renderer to put
179 + pictures in a terminal. An emoji still takes the columns it is owed, so text
180 + around one stays where it belongs and a line of somebody else's output is read
181 + exactly as it was written. The cell is simply empty.
182 +
175 183 ## Emit
176 184
177 185 Shop has no scrollback search, no URL opener and no pager. It has one primitive