aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* fix(theme-studio): keep dropdown color names legibleCraig Jennings2026-06-143-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 Jennings2026-06-146-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 Jennings2026-06-141-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 Jennings2026-06-142-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 Jennings2026-06-1417-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 Jennings2026-06-141-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 Jennings2026-06-146-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 Jennings2026-06-141-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 Jennings2026-06-143-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 Jennings2026-06-143-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 Jennings2026-06-145-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 Jennings2026-06-144-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 Jennings2026-06-1428-1792/+51998
|
* Add theme studio box color controlsCraig Jennings2026-06-135-32/+75
|
* Shorten theme studio reset erase labelsCraig Jennings2026-06-135-33/+32
|
* Clarify theme studio reset and erase actionsCraig Jennings2026-06-135-38/+83
|
* Add theme studio face color step arrowsCraig Jennings2026-06-137-30/+158
|
* Preview selected theme studio chip while pickingCraig Jennings2026-06-134-12/+40
|
* Change theme studio spans to endpoint divisionsCraig Jennings2026-06-136-35/+72
|
* Remove theme studio save buttonCraig Jennings2026-06-134-29/+10
|
* Fix theme studio span endpoint tilesCraig Jennings2026-06-137-31/+57
|
* Sort theme studio dropdown colors by lightnessCraig Jennings2026-06-134-8/+38
|
* Fix theme studio ground endpoint editCraig Jennings2026-06-133-6/+28
|
* Fix theme studio fg endpoint selectionCraig Jennings2026-06-133-6/+30
|
* Refine theme studio tile name editingCraig Jennings2026-06-136-9/+46
|
* Migrate roam inbox tasks to todoCraig Jennings2026-06-131-0/+36
|
* Make theme studio column delete saferCraig Jennings2026-06-135-10/+31
|
* Add theme studio Rust and Zig samplesCraig Jennings2026-06-136-5/+98
|
* Fix theme studio column delete task hashCraig Jennings2026-06-131-1/+1
|
* Add theme studio column deleteCraig Jennings2026-06-138-13/+106
|
* Refactor theme studio palette testsCraig Jennings2026-06-139-679/+835
|
* Add theme studio palette clear and lock togglesCraig Jennings2026-06-133-10/+112
|
* Fix theme studio ground column orderCraig Jennings2026-06-132-12/+34
|
* Fix theme studio bg-prefixed span inferenceCraig Jennings2026-06-134-12/+26
|
* Queue theme studio column deletion taskCraig Jennings2026-06-131-0/+8
|
* Fix theme studio style button stateCraig Jennings2026-06-132-2/+26
|
* Fix theme studio bg-like imported colorsCraig Jennings2026-06-135-44/+111
|
* Add theme studio palette generator specCraig Jennings2026-06-132-0/+249
|
* Add theme studio column selection and reorder controlsCraig Jennings2026-06-133-10/+120
|
* Set theme studio default picker colorCraig Jennings2026-06-133-12/+14
|
* Group numeric color names by stemCraig Jennings2026-06-135-4/+16
|
* Document theme studio import color inferenceCraig Jennings2026-06-131-0/+2
|
* Treat legacy color names as base columnsCraig Jennings2026-06-136-4/+39
|
* Retire stale theme studio todo entriesCraig Jennings2026-06-131-3/+9
|
* Split theme studio generator data and templateCraig Jennings2026-06-134-384/+394
|
* Add theme studio default face drift summaryCraig Jennings2026-06-133-1/+102
|
* docs(claude): codify the cl-letf C-primitive native-comp trampoline trapCraig Jennings2026-06-131-0/+2
| | | | Mocking a C primitive (buffer-modified-p, file-exists-p, kill-buffer) via cl-letf triggers a native-comp trampoline rebuild that fails under --batch. Drive real state or extract a pure helper instead.
* Pin theme studio preview links and column exportsCraig Jennings2026-06-134-10/+58
|
* fix(help-config): non-destructive info open, clean cancel, drop dead configCraig Jennings2026-06-133-23/+68
| | | | Three audit defects in one file. cj/open-with-info-mode used cl-return-from inside a plain defun, so declining the save prompt threw "No catch for tag" instead of cancelling. The decision is now a pure cj/--info-open-plan and the command routes through it. A dead :hook (info-mode . info-persist-history-mode, which names a non-existent mode on the wrong hook) and an empty :preface are gone. The auto-mode-alist entry that mapped .info to that interactive, buffer-killing command is dropped, so find-file-noselect of a .info no longer destroys buffers. cj/open-with-info-mode stays an M-x command and C-h i still browses info files.
* Add theme studio UI inherit spec taskCraig Jennings2026-06-131-1/+7
|