diff options
| author | Craig Jennings <c@cjennings.net> | 2026-06-08 08:56:47 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-06-08 08:57:05 -0500 |
| commit | 7f57c6467054f6762a40b683d6585ee0a2b5527c (patch) | |
| tree | d787bae9ba1c958b00b0f31cd868f252b4ddcaeb /scripts/theme-studio/build-inventory.el | |
| parent | 3e8d5651a3fddcf4afccd46a382ab12d915bbd8c (diff) | |
| download | dotemacs-7f57c6467054f6762a40b683d6585ee0a2b5527c.tar.gz dotemacs-7f57c6467054f6762a40b683d6585ee0a2b5527c.zip | |
refactor(theme-studio): rename theme-selector to theme-studio
The tool authors themes from scratch -- palette, faces across every tier, live preview, export to a loadable deftheme. It never selects among existing themes, so "selector" mis-described it. Renamed the directory, the generated HTML and its title, the design spec, and every reference in the code, README, tests, and todo. No behavior change.
Diffstat (limited to 'scripts/theme-studio/build-inventory.el')
| -rw-r--r-- | scripts/theme-studio/build-inventory.el | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/scripts/theme-studio/build-inventory.el b/scripts/theme-studio/build-inventory.el new file mode 100644 index 000000000..04d821453 --- /dev/null +++ b/scripts/theme-studio/build-inventory.el @@ -0,0 +1,31 @@ +;;; 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-studio dropdown can reach every +;; installed package (tier-3 phase 6, the "theme every package" path). +;;; Code: + +(require 'json) + +(let ((h (make-hash-table :test 'equal))) + (dolist (f (face-list)) + (let* ((file (ignore-errors (symbol-file f 'defface))) + (pkg (and (stringp file) + (string-match "/\\(?:elpa\\|straight/build\\|site-lisp\\)/\\([a-zA-Z0-9._-]+?\\)-[0-9][^/]*/" file) + (match-string 1 file)))) + (when pkg (push (symbol-name f) (gethash pkg h))))) + (let (al) + (maphash (lambda (k v) (push (cons (intern k) (sort v #'string<)) al)) h) + (setq al (sort al (lambda (a b) (string< (symbol-name (car a)) (symbol-name (car b)))))) + (with-temp-file (expand-file-name + "package-inventory.json" + (file-name-directory (or load-file-name buffer-file-name + "~/.emacs.d/scripts/theme-studio/"))) + (let ((json-encoding-pretty-print t)) + (insert (json-encode al) "\n"))))) + +(provide 'build-inventory) +;;; build-inventory.el ends here |
