aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/design/theme-studio-package-faces-spec.org (renamed from docs/design/theme-selector-package-faces-spec.org)18
-rw-r--r--scripts/theme-studio/README.md (renamed from scripts/theme-selector/README.md)14
-rw-r--r--scripts/theme-studio/build-inventory.el (renamed from scripts/theme-selector/build-inventory.el)6
-rw-r--r--scripts/theme-studio/build-theme.el (renamed from scripts/theme-selector/build-theme.el)14
-rw-r--r--scripts/theme-studio/generate.py (renamed from scripts/theme-selector/generate.py)4
-rw-r--r--scripts/theme-studio/package-inventory.json (renamed from scripts/theme-selector/package-inventory.json)0
-rw-r--r--scripts/theme-studio/samples.py (renamed from scripts/theme-selector/samples.py)0
-rw-r--r--scripts/theme-studio/theme-studio.html (renamed from scripts/theme-selector/theme-selector.html)2
-rw-r--r--tests/test-build-theme.el8
9 files changed, 33 insertions, 33 deletions
diff --git a/docs/design/theme-selector-package-faces-spec.org b/docs/design/theme-studio-package-faces-spec.org
index def6a430f..7f00b3279 100644
--- a/docs/design/theme-selector-package-faces-spec.org
+++ b/docs/design/theme-studio-package-faces-spec.org
@@ -1,11 +1,11 @@
-#+TITLE: theme-selector — package faces (tier 3), starting with org-mode
+#+TITLE: theme-studio — package faces (tier 3), starting with org-mode
#+AUTHOR: Craig Jennings
#+DATE: 2026-06-07
* Status
Spec / Craig's first-round answers folded in (2026-06-07). Proposes a third tier
-for the theme-selector (scripts/theme-selector/) that lets a theme colorize
+for the theme-studio (scripts/theme-studio/) that lets a theme colorize
package-specific faces, built one application at a time. v1 apps: org-mode
(incl. org-agenda), magit, elfeed. Codex review incorporated (2026-06-07): added
implementation phases, acceptance criteria, the package-face inventory source
@@ -18,7 +18,7 @@ Implementation tasks live in =todo.org=.
* Background — the three tiers
-The theme-selector already models two tiers of faces:
+The theme-studio already models two tiers of faces:
1. *Syntax* — the font-lock / tree-sitter categories (keyword, string, type,
comment, etc.), in the "code/color assignments" table.
@@ -374,7 +374,7 @@ inherited value.
previews, the fallback visibly labeled as generic.
- A palette color update propagates to package faces the same way it does to
syntax / ui faces.
-- =python3 scripts/theme-selector/generate.py= rebuilds =theme-selector.html=.
+- =python3 scripts/theme-studio/generate.py= rebuilds =theme-studio.html=.
- README documents the =packages= schema, inheritance, and the inventory source.
* Extensibility (adding the next app)
@@ -482,9 +482,9 @@ Decided (Craig, 2026-06-08): after tier 3, as its own task.
* Files touched
-- =scripts/theme-selector/generate.py= — the section, =APPS= data, the package
+- =scripts/theme-studio/generate.py= — the section, =APPS= data, the package
face table, =renderOrgPreview()=, export/import of =packages=.
-- =scripts/theme-selector/theme-selector.html= — regenerated.
+- =scripts/theme-studio/theme-studio.html= — regenerated.
- (later) the =theme.json= -> =dupre-*.el= converter (Elisp) — consumes
=packages=.
@@ -531,7 +531,7 @@ generalized face-control helper, package style kept inside the package object,
growth was his explicit call on the curated set.
- *Artifacts:* This spec. The converter language (Elisp) confirmed by Craig.
Note: Craig referenced a Codex spec review, but no
- =theme-selector-package-faces-review.org= (or any =*-review.org=) exists in the
+ =theme-studio-package-faces-review.org= (or any =*-review.org=) exists in the
repo — the review file could not be found, so only the author-side cj-comment
fold was done; the Codex review remains to be processed when its file is
located.
@@ -544,7 +544,7 @@ generalized face-control helper, package style kept inside the package object,
- *Why:* The direction is coherent and the first-round decisions are folded in,
but v1 now depends on behavior that is not yet implementable from the current
static generator without a defined inventory and state/export contract.
-- *Artifacts:* [[file:theme-selector-package-faces-spec-review.org][theme-selector-package-faces-spec-review.org]]
+- *Artifacts:* [[file:theme-studio-package-faces-spec-review.org][theme-studio-package-faces-spec-review.org]]
** 2026-06-07 Sun @ 18:28:02 -0500 — Claude Code (emacs-d) — responder
- *What:* Ran spec-response against the Codex review. Added Implementation
@@ -583,4 +583,4 @@ generalized face-control helper, package style kept inside the package object,
- *Why:* Craig asked to fold height in — it matters for org headings above all.
Font *family* stays in =modules/font-config.el=; the theme owns relative size
and the fixed-pitch inherit relationships only.
-- *Artifacts:* This spec; =scripts/theme-selector/generate.py= phase-1 plumbing.
+- *Artifacts:* This spec; =scripts/theme-studio/generate.py= phase-1 plumbing.
diff --git a/scripts/theme-selector/README.md b/scripts/theme-studio/README.md
index 8f63383c1..620340396 100644
--- a/scripts/theme-selector/README.md
+++ b/scripts/theme-studio/README.md
@@ -1,4 +1,4 @@
-# theme-selector
+# theme-studio
A self-contained tool for designing Emacs color themes by eye. One generated
HTML page drives the whole theme: a palette, the syntax (font-lock /
@@ -11,13 +11,13 @@ readouts, then export a `theme.json` that a build step turns into
## Run
```bash
-python3 generate.py # writes theme-selector.html beside this script
+python3 generate.py # writes theme-studio.html beside this script
```
Then open it in Chrome (Firefox had color-rendering flakiness during design):
```bash
-WAYLAND_DISPLAY=wayland-1 google-chrome-stable theme-selector.html
+WAYLAND_DISPLAY=wayland-1 google-chrome-stable theme-studio.html
```
During color work, disable Hyprland inactive-window dimming so colors read true:
@@ -37,7 +37,7 @@ hyprctl keyword decoration:dim_inactive false
faces it defines (see Package faces below). A committed data artifact.
- `build-inventory.el` — refreshes `package-inventory.json` from a running
Emacs.
-- `theme-selector.html` — generated output. Regenerate; don't hand-edit.
+- `theme-studio.html` — generated output. Regenerate; don't hand-edit.
## What it captures
@@ -95,7 +95,7 @@ The reachable packages come from `package-inventory.json`. Regenerate it from a
running Emacs (so it reflects what's actually installed), then rebuild the HTML:
```bash
-emacsclient -e '(load "/home/cjennings/.emacs.d/scripts/theme-selector/build-inventory.el")'
+emacsclient -e '(load "/home/cjennings/.emacs.d/scripts/theme-studio/build-inventory.el")'
python3 generate.py
```
@@ -149,8 +149,8 @@ the UI faces passed through, and the package faces with `:inherit`/`:height`
and weight/slant written.
```bash
-emacs --batch -l scripts/theme-selector/build-theme.el \
- --eval '(build-theme/convert-file "scripts/theme-selector/dupre-revised.json" "themes")'
+emacs --batch -l scripts/theme-studio/build-theme.el \
+ --eval '(build-theme/convert-file "scripts/theme-studio/dupre-revised.json" "themes")'
```
Output is a flat generated deftheme, not the palette/faces/theme trio the
diff --git a/scripts/theme-selector/build-inventory.el b/scripts/theme-studio/build-inventory.el
index 52e14baa1..04d821453 100644
--- a/scripts/theme-selector/build-inventory.el
+++ b/scripts/theme-studio/build-inventory.el
@@ -1,10 +1,10 @@
-;;; build-inventory.el --- emit package->faces inventory for theme-selector -*- lexical-binding: t -*-
+;;; build-inventory.el --- emit package->faces inventory for theme-studio -*- lexical-binding: t -*-
;;; Commentary:
;; Loaded into a running Emacs (emacsclient -e '(load ".../build-inventory.el")')
;; to write package-inventory.json next to itself: a JSON object mapping each
;; installed (elpa/straight) package to the faces it defines, grouped by the
;; package that owns the face's definition file. Built-in faces are skipped.
-;; generate.py embeds the JSON so the theme-selector dropdown can reach every
+;; generate.py embeds the JSON so the theme-studio dropdown can reach every
;; installed package (tier-3 phase 6, the "theme every package" path).
;;; Code:
@@ -23,7 +23,7 @@
(with-temp-file (expand-file-name
"package-inventory.json"
(file-name-directory (or load-file-name buffer-file-name
- "~/.emacs.d/scripts/theme-selector/")))
+ "~/.emacs.d/scripts/theme-studio/")))
(let ((json-encoding-pretty-print t))
(insert (json-encode al) "\n")))))
diff --git a/scripts/theme-selector/build-theme.el b/scripts/theme-studio/build-theme.el
index fe080c0d1..c869dea18 100644
--- a/scripts/theme-selector/build-theme.el
+++ b/scripts/theme-studio/build-theme.el
@@ -1,12 +1,12 @@
-;;; build-theme.el --- Convert a theme-selector theme.json into a deftheme -*- lexical-binding: t -*-
+;;; build-theme.el --- Convert a theme-studio theme.json into a deftheme -*- lexical-binding: t -*-
;; Author: Craig Jennings <c@cjennings.net>
;;; Commentary:
-;; The last link in the theme-selector pipeline: turn a theme.json exported by
-;; the tool (see scripts/theme-selector/README.md and
-;; docs/design/theme-selector-package-faces-spec.org) into a single,
+;; The last link in the theme-studio pipeline: turn a theme.json exported by
+;; the tool (see scripts/theme-studio/README.md and
+;; docs/design/theme-studio-package-faces-spec.org) into a single,
;; self-contained, loadable Emacs deftheme written to themes/<name>-theme.el.
;;
;; Four tiers come out of the JSON:
@@ -190,12 +190,12 @@ the font-lock faces in `build-theme/--syntax-face-map'."
(defun build-theme/--render (name specs)
"Render a deftheme file body for theme NAME from face SPECS, as a string."
(concat
- (format ";;; %s-theme.el --- Generated by theme-selector -*- lexical-binding: t -*-\n" name)
+ (format ";;; %s-theme.el --- Generated by theme-studio -*- lexical-binding: t -*-\n" name)
"\n;;; Commentary:\n"
- (format ";; Generated from %s.json by scripts/theme-selector/build-theme.el.\n" name)
+ (format ";; Generated from %s.json by scripts/theme-studio/build-theme.el.\n" name)
";; Do not hand-edit; re-run the converter.\n"
"\n;;; Code:\n\n"
- (format "(deftheme %s\n \"Generated by theme-selector.\")\n\n" name)
+ (format "(deftheme %s\n \"Generated by theme-studio.\")\n\n" name)
(format "(custom-theme-set-faces\n '%s\n" name)
;; Each spec is quoted: custom-theme-set-faces is a function, so an
;; unquoted (face ((t ...))) would be evaluated as a call. Specs hold
diff --git a/scripts/theme-selector/generate.py b/scripts/theme-studio/generate.py
index 8e76c1740..405ce150a 100644
--- a/scripts/theme-selector/generate.py
+++ b/scripts/theme-studio/generate.py
@@ -369,7 +369,7 @@ if os.path.exists(_inv_path):
APPS[_pkg]={"label":_pkg,"preview":"generic","faces":[
[f,(f[len(_pkg)+1:] if f.startswith(_pkg+"-") else f).replace("-face","").replace("-"," "),{}]
for f in _INV[_pkg]]}
-HTML = """<!doctype html><meta charset=utf-8><title>theme-selector</title>
+HTML = """<!doctype html><meta charset=utf-8><title>theme-studio</title>
<style>
body{background:#0d0b0a;color:#cdced1;font:15px/1.55 monospace;margin:20px}
h1{font-size:22px;font-weight:normal;color:#e8bd30;margin:26px 0 10px;border-bottom:1px solid #252321;padding-bottom:6px}
@@ -1111,6 +1111,6 @@ HTML=(HTML.replace("SAMPLES_J",json.dumps(SAMPLES))
.replace("PALETTE_J",json.dumps(PALETTE)).replace("CATS_J",json.dumps(CATS))
.replace("UIFACES_J",json.dumps(UI_FACES)).replace("UIMAP_J",json.dumps(UIMAP)).replace("APPS_J",json.dumps(APPS))
.replace("BOLD_J",json.dumps(BOLD)).replace("MAP_J",json.dumps(MAP)))
-OUT=os.path.join(HERE,'theme-selector.html')
+OUT=os.path.join(HERE,'theme-studio.html')
open(OUT,"w").write(HTML)
print("wrote",OUT)
diff --git a/scripts/theme-selector/package-inventory.json b/scripts/theme-studio/package-inventory.json
index 18fd7aa25..18fd7aa25 100644
--- a/scripts/theme-selector/package-inventory.json
+++ b/scripts/theme-studio/package-inventory.json
diff --git a/scripts/theme-selector/samples.py b/scripts/theme-studio/samples.py
index e487cc5e9..e487cc5e9 100644
--- a/scripts/theme-selector/samples.py
+++ b/scripts/theme-studio/samples.py
diff --git a/scripts/theme-selector/theme-selector.html b/scripts/theme-studio/theme-studio.html
index 30279c745..61466d420 100644
--- a/scripts/theme-selector/theme-selector.html
+++ b/scripts/theme-studio/theme-studio.html
@@ -1,4 +1,4 @@
-<!doctype html><meta charset=utf-8><title>theme-selector</title>
+<!doctype html><meta charset=utf-8><title>theme-studio</title>
<style>
body{background:#0d0b0a;color:#cdced1;font:15px/1.55 monospace;margin:20px}
h1{font-size:22px;font-weight:normal;color:#e8bd30;margin:26px 0 10px;border-bottom:1px solid #252321;padding-bottom:6px}
diff --git a/tests/test-build-theme.el b/tests/test-build-theme.el
index 954e95425..f74b94173 100644
--- a/tests/test-build-theme.el
+++ b/tests/test-build-theme.el
@@ -2,8 +2,8 @@
;;; Commentary:
-;; ERT tests for scripts/theme-selector/build-theme.el, the converter that
-;; turns a theme.json exported by the theme-selector into a loadable Emacs
+;; ERT tests for scripts/theme-studio/build-theme.el, the converter that
+;; turns a theme.json exported by the theme-studio into a loadable Emacs
;; deftheme file. This is the correctness-sensitive end of the pipeline, so
;; it is covered Normal / Boundary / Error per category.
@@ -18,7 +18,7 @@
(eval-and-compile
(add-to-list 'load-path
(expand-file-name
- "../scripts/theme-selector"
+ "../scripts/theme-studio"
(file-name-directory
(or load-file-name
(bound-and-true-p byte-compile-current-file)
@@ -55,7 +55,7 @@
"A self-contained theme.json exercising every tier: default, syntax (bold +
italic + the unmappable dec key), UI, and packages (a plain face, an
inherit+height face, and a cleared face). Owned by the test so it can't drift
-the way Craig's downloaded exports under scripts/theme-selector/ can.")
+the way Craig's downloaded exports under scripts/theme-studio/ can.")
(defun test-build-theme--write-fixture (dir)
"Write the fixture JSON into DIR and return its path."