aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* chore(theme-studio): remove dead code and clear a type warningCraig Jennings7 days8-199/+7
| | | | | | | | | - ramp (app-core.js) and its test-ramp.mjs: superseded by regenColumn, no production caller. - optList (app-core.js) and its tests: superseded by paletteOptionList. - ITALIC in generate.py: computed, never read (ITALIC_MAP is the live one). - a stray empty string in MU4E_FACES that .split() silently dropped. - the dead #familytest alias in the columntest gate, which HASHES never listed. - widen face_rows to Sequence[str], clearing the list-invariance warnings on the APPS calls.
* fix(theme-studio): make broken browser gates fail instead of silently passingCraig Jennings7 days3-9/+17
| | | | | | run-tests.sh scored each browser gate by grepping the dumped DOM for the gate name and taking the first match. A gate that throws before setting its verdict left its own inlined source as the first match, and that source, "GATENAME '+(ok?'PASS':'FAIL')", contains the literal PASS, so the run reported green for a gate that never produced a verdict. The matcher now requires a resolved "GATENAME PASS" or "GATENAME FAIL". That exposed two gates that had been throwing unnoticed. baseedittest still referenced fam after the variable was renamed to column, so it ReferenceError'd. columntest read getComputedStyle on a palette chip captured before a re-render detached it, so the match returned null and threw. baseedittest now uses column, and columntest re-queries the live chip by its selection index.
* chore(themes): track generated theme outputsCraig Jennings7 days2-2/+540
| | | | Drop the theme-theme.el ignore and check in WIP-theme.el, so the deployable themes the studio generates live in the repo. The studio JSON sources stay ignored as scratch.
* fix(theme-studio): hold the package preview heightCraig Jennings7 days2-2/+2
| | | | Selecting a compact package (auto-dim, with a 2-row face table and a short preview) collapsed the package section and shortened the page. A 60vh floor on the preview keeps the section sized to the largest of the columns, the preview, or that floor, so switching packages no longer shrinks the page.
* fix(theme-studio): name exported themes from the source filenameCraig Jennings7 days3-5/+26
| | | | The converter took the theme name from the JSON's internal name field, so every draft whose field read "theme" overwrote theme-theme.el. It now uses the JSON file's basename, so WIP.json becomes WIP-theme.el and each draft lands under its own name. The reload target derives the load name from the basename too, and a regression test pins it: the filename wins over the internal field.
* feat(theme-studio): auto-dim split previewCraig Jennings7 days8-5/+142
| | | | | | | | auto-dim-other-buffers is a package face, not a theme face, so build-inventory.el (it scans only elpa/straight packages) never listed it and the studio couldn't theme it. This adds it as a bespoke app. The preview is a vertical split: the focused window on the left in real syntax colors, the same code on the right collapsed to the single auto-dim-other-buffers face, the way Emacs renders a non-selected window. Both panes follow the language selector. A trailing row shows auto-dim-other-buffers-hide, whose foreground matches the background so it vanishes when dimmed. A #autodimtest gate covers the split, the uniform recolor, and language sync.
* fix(theme-studio): keep dropdown color names legibleCraig Jennings7 days3-3/+32
| | | | | | The color-picker popup colored each row's name and hex for contrast against the swatch, but the rows sit on the popup's fixed dark background. A mid or dark swatch (the blues past blue-1) got near-black text that vanished on the dark popup. The text now inherits the popup foreground for every real palette color. Only the solid "default" row, whose background is the color itself, still contrasts against its own fill. I moved the decision into dropdownRowTextColor with unit coverage, including a dark-swatch regression case.
* chore(theme-studio): drop scratch theme JSONs, ignore working artifactsCraig Jennings7 days6-43430/+4
| | | | Remove the distinguished-revised, distinguished-test, dupre-rebuild, dupre-revised, and sterling2 experiment snapshots, and ignore WIP.json and themes/theme-theme.el so working scratch stays out of the tree.
* feat(dashboard): theme-test layout for live face inspectionCraig Jennings7 days1-17/+100
| | | | | | The dashboard's startupify-list, items, and item-generators move from inline :custom values into named defconsts, so the layout-toggle commands can reuse them. cj/dashboard-show-theme-test-layout swaps in a layout that enables init-info, the footer, and a deliberately empty section, so the live dashboard exposes faces the normal layout hides, dashboard-no-items-face among them. cj/dashboard-restore-configured-layout returns to the normal layout. Both refresh the buffer in place.
* feat(theme-studio): make targets for the build-theme converterCraig Jennings7 days2-2/+63
| | | | theme-studio-theme converts a Theme Studio JSON export to themes/<name>-theme.el. theme-studio-theme-load disables the custom themes and loads one in the running Emacs. theme-studio-theme-reload chains the two. Each delegates to the scripts/theme-studio/Makefile and errors clearly when its required JSON or THEME argument is missing.
* feat(theme-studio): palette generator and preview fidelityCraig Jennings7 days17-649/+3414
| | | | | | | | | | Two strands land together because the generated theme-studio.html bundles every source file into one page and can't be split cleanly. The palette generator is a preview-first panel: palette-generator-core.js plans the palette and palette-generator-ui.js draws it. Generated colors stay inspectable and tunable through the existing selector, and committing one creates a normal base column. It adds source-mode and scheme controls, a configurable accent count, and color names from color-names.json. For preview fidelity, syntax and UI colors now resolve through the real Emacs inherit chains, so the preview matches how Emacs renders the theme. resolveSyntaxFg pins dec to ty (Emacs has no decorator face) and otherwise follows comment-delimiter to comment, doc to string, property to variable, function-call to function-name. resolveUiAttr walks mode-line-inactive to mode-line and line-number-current-line to line-number. The decorator label now reads "decorator to type" to match the type face Emacs uses for it. Design recorded in the two theme-studio specs under docs/.
* test: reconcile build-theme tests with nested syntax formatCraig Jennings7 days1-17/+24
| | | | | | The converter reads theme.json's nested "syntax" shape: each category is an object with fg/bg/bold/italic, and bg/p are category objects carrying fg. The tests still drove the old flat "assignments"/"bold"/"italic" format with 3-arg syntax calls, so they passed only against a stale build-theme.elc. Rebuilt against the source, six tests failed on the wrong API. I updated the fixture JSON and every call site to the nested 1-arg signature. No production code changed. The converter and theme.json were already the source of truth.
* refactor(ui): color the cursor and modeline from theme faces, in syncCraig Jennings7 days6-382/+278
| | | | The cursor color and the modeline buffer-name indicator both hard-coded hex colors through cj/buffer-status-colors. Replaced that constant with cj/buffer-status-faces, mapping each buffer state to a theme face: read-only to error, overwrite and modified to warning, unmodified to success. A shared classifier (cj/buffer-status-state) and resolver (cj/buffer-status-color) in user-constants now drive both consumers, so the cursor and the modeline resolve their color from the active theme at use time and stay in sync, including the ghostel-terminal case the cursor already special-cased. Tests cover the map, the classifier, the resolver, and both integration paths.
* refactor(org): let the theme color todo keywords and prioritiesCraig Jennings8 days1-20/+3
| | | | org-todo-keyword-faces and org-priority-faces pinned the keywords and priority cookies to dupre-org-* faces, which only exist when the dupre theme is loaded. Under any other theme those faces are undefined, so org keywords and priorities fell back to the default face instead of the theme's org-todo / org-done / org-priority. Dropped both maps so org follows whatever theme is active. The TODO state sequence and the priority range stay.
* fix(slack): autoload w/@/# commands, guard close-all, register the prefixCraig Jennings8 days3-4/+48
| | | | Three lifecycle gaps that bit before slack loads. The w / @ / # keys bound slack-message-write-another-buffer, slack-message-embed-mention, and slack-message-embed-channel, none autoloaded or in :commands, so they void-function'd before slack started; added them to :commands. cj/slack-close-all-buffers read slack-current-buffer via buffer-local-value on every buffer, which signals void-variable on buffers without the local binding; it now guards with buffer-local-boundp like its sibling. And C-; S was bound with a raw global-set-key, invisible to the keybindings registry; it now registers through cj/register-prefix-map like the signal and erc prefixes.
* fix(erc): one mention notification, real server list, runtime requireCraig Jennings8 days3-5/+70
| | | | Three audit defects. erc-modules carried the built-in notifications module while :config also added cj/erc-notify-on-mention to the same erc-text-matched-hook, so every mention popped two desktop notifications. Dropped notifications from erc-modules and kept the custom one. cj/erc-connected-servers compared a buffer's erc-server-process to itself inside with-current-buffer (always true), so it returned every ERC buffer; it now filters on erc-server-buffer-p and erc-server-process-alive. And user-constants moved from an eval-when-compile-only require to a runtime require, since user-whole-name is read at load time for erc-user-full-name.
* refactor(faces): let the theme own face appearanceCraig Jennings8 days5-90/+6
| | | | Strip per-module face configuration so the active theme is the single source of face styling. Removed the dired text-greying set-face-attribute calls (kept the buffer-local face-remap), the org appearance set-face-attribute calls, the highlight-indent-guides colors, the rainbow-delimiters depth colors (which were overriding the theme's blue with red), and the cj/music-* defface forms plus the emms-playlist custom-set-faces. Left nerd-icons' set-face-foreground alone, since it's runtime tint logic rather than static config. Each touched file is backed up beside it as <name>.el.faces.bak (untracked). The cj/music-* faces now come from the theme instead of the module, so until the theme provides them music rendering falls back to the default face.
* fix(modeline): drop per-render truename, guard vc fetch against signalsCraig Jennings8 days4-59/+70
| | | | The VC modeline cache rebuilt its key every render, and the key included file-truename, so a stat ran on every redisplay rather than once per refresh as the comment claimed. Now it keys on (file show-remote). A moved symlink target is caught at the next TTL refresh, when vc-backend resolves the link fresh. And cj/modeline-vc-fetch is wrapped in condition-case returning nil, so a git signal on a slow or unmounted filesystem degrades to no-VC-info instead of breaking all redisplay.
* Update theme studio palette workflowCraig Jennings8 days28-1792/+51998
|
* Add theme studio box color controlsCraig Jennings8 days5-32/+75
|
* Shorten theme studio reset erase labelsCraig Jennings8 days5-33/+32
|
* Clarify theme studio reset and erase actionsCraig Jennings8 days5-38/+83
|
* Add theme studio face color step arrowsCraig Jennings8 days7-30/+158
|
* Preview selected theme studio chip while pickingCraig Jennings8 days4-12/+40
|
* Change theme studio spans to endpoint divisionsCraig Jennings8 days6-35/+72
|
* Remove theme studio save buttonCraig Jennings8 days4-29/+10
|
* Fix theme studio span endpoint tilesCraig Jennings8 days7-31/+57
|
* Sort theme studio dropdown colors by lightnessCraig Jennings8 days4-8/+38
|
* Fix theme studio ground endpoint editCraig Jennings8 days3-6/+28
|
* Fix theme studio fg endpoint selectionCraig Jennings8 days3-6/+30
|
* Refine theme studio tile name editingCraig Jennings8 days6-9/+46
|
* Migrate roam inbox tasks to todoCraig Jennings8 days1-0/+36
|
* Make theme studio column delete saferCraig Jennings8 days5-10/+31
|
* Add theme studio Rust and Zig samplesCraig Jennings8 days6-5/+98
|
* Fix theme studio column delete task hashCraig Jennings8 days1-1/+1
|
* Add theme studio column deleteCraig Jennings8 days8-13/+106
|
* Refactor theme studio palette testsCraig Jennings8 days9-679/+835
|
* Add theme studio palette clear and lock togglesCraig Jennings8 days3-10/+112
|
* Fix theme studio ground column orderCraig Jennings9 days2-12/+34
|
* Fix theme studio bg-prefixed span inferenceCraig Jennings9 days4-12/+26
|
* Queue theme studio column deletion taskCraig Jennings9 days1-0/+8
|
* Fix theme studio style button stateCraig Jennings9 days2-2/+26
|
* Fix theme studio bg-like imported colorsCraig Jennings9 days5-44/+111
|
* Add theme studio palette generator specCraig Jennings9 days2-0/+249
|
* Add theme studio column selection and reorder controlsCraig Jennings9 days3-10/+120
|
* Set theme studio default picker colorCraig Jennings9 days3-12/+14
|
* Group numeric color names by stemCraig Jennings9 days5-4/+16
|
* Document theme studio import color inferenceCraig Jennings9 days1-0/+2
|
* Treat legacy color names as base columnsCraig Jennings9 days6-4/+39
|
* Retire stale theme studio todo entriesCraig Jennings9 days1-3/+9
|