aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* feat(theme-studio): auto-dim split previewCraig Jennings9 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 Jennings9 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 Jennings9 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 Jennings9 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 Jennings9 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 Jennings9 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 Jennings9 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 Jennings9 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 Jennings9 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 Jennings9 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 Jennings9 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 Jennings9 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 Jennings9 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 Jennings10 days28-1792/+51998
|
* Add theme studio box color controlsCraig Jennings10 days5-32/+75
|
* Shorten theme studio reset erase labelsCraig Jennings10 days5-33/+32
|
* Clarify theme studio reset and erase actionsCraig Jennings10 days5-38/+83
|
* Add theme studio face color step arrowsCraig Jennings10 days7-30/+158
|
* Preview selected theme studio chip while pickingCraig Jennings10 days4-12/+40
|
* Change theme studio spans to endpoint divisionsCraig Jennings10 days6-35/+72
|
* Remove theme studio save buttonCraig Jennings10 days4-29/+10
|
* Fix theme studio span endpoint tilesCraig Jennings10 days7-31/+57
|
* Sort theme studio dropdown colors by lightnessCraig Jennings10 days4-8/+38
|
* Fix theme studio ground endpoint editCraig Jennings10 days3-6/+28
|
* Fix theme studio fg endpoint selectionCraig Jennings10 days3-6/+30
|
* Refine theme studio tile name editingCraig Jennings10 days6-9/+46
|
* Migrate roam inbox tasks to todoCraig Jennings10 days1-0/+36
|
* Make theme studio column delete saferCraig Jennings10 days5-10/+31
|
* Add theme studio Rust and Zig samplesCraig Jennings10 days6-5/+98
|
* Fix theme studio column delete task hashCraig Jennings10 days1-1/+1
|
* Add theme studio column deleteCraig Jennings10 days8-13/+106
|
* Refactor theme studio palette testsCraig Jennings10 days9-679/+835
|
* Add theme studio palette clear and lock togglesCraig Jennings10 days3-10/+112
|
* Fix theme studio ground column orderCraig Jennings10 days2-12/+34
|
* Fix theme studio bg-prefixed span inferenceCraig Jennings10 days4-12/+26
|
* Queue theme studio column deletion taskCraig Jennings10 days1-0/+8
|
* Fix theme studio style button stateCraig Jennings10 days2-2/+26
|
* Fix theme studio bg-like imported colorsCraig Jennings10 days5-44/+111
|
* Add theme studio palette generator specCraig Jennings10 days2-0/+249
|
* Add theme studio column selection and reorder controlsCraig Jennings10 days3-10/+120
|
* Set theme studio default picker colorCraig Jennings10 days3-12/+14
|
* Group numeric color names by stemCraig Jennings10 days5-4/+16
|
* Document theme studio import color inferenceCraig Jennings10 days1-0/+2
|
* Treat legacy color names as base columnsCraig Jennings10 days6-4/+39
|
* Retire stale theme studio todo entriesCraig Jennings10 days1-3/+9
|
* Split theme studio generator data and templateCraig Jennings10 days4-384/+394
|
* Add theme studio default face drift summaryCraig Jennings10 days3-1/+102
|
* docs(claude): codify the cl-letf C-primitive native-comp trampoline trapCraig Jennings10 days1-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 Jennings10 days4-10/+58
|
* fix(help-config): non-destructive info open, clean cancel, drop dead configCraig Jennings10 days3-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.