From 5a22ebcdb6a9f7fd8de51c52b1548d88f84adbd2 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Sun, 14 Jun 2026 21:36:08 -0500 Subject: fix(theme-studio): name exported themes from the source filename 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. --- scripts/theme-studio/Makefile | 2 +- scripts/theme-studio/build-theme.el | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) (limited to 'scripts/theme-studio') diff --git a/scripts/theme-studio/Makefile b/scripts/theme-studio/Makefile index d98478aef..374c7fb1b 100644 --- a/scripts/theme-studio/Makefile +++ b/scripts/theme-studio/Makefile @@ -99,5 +99,5 @@ ifndef JSON endif @$(MAKE) theme JSON='$(JSON)' OUT='$(OUT)' EMACS='$(EMACS)' @theme_name='$(THEME)'; \ - if [ -z "$$theme_name" ]; then theme_name="$$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))["name"])' '$(JSON)')"; fi; \ + if [ -z "$$theme_name" ]; then theme_name="$$(basename '$(JSON)' .json)"; fi; \ $(MAKE) theme-load THEME="$$theme_name" OUT='$(OUT)' EMACSCLIENT='$(EMACSCLIENT)' diff --git a/scripts/theme-studio/build-theme.el b/scripts/theme-studio/build-theme.el index 786a3d960..827129976 100644 --- a/scripts/theme-studio/build-theme.el +++ b/scripts/theme-studio/build-theme.el @@ -246,11 +246,13 @@ Signal a `file-missing' error when JSON-FILE does not exist." (defun build-theme/convert-file (json-file &optional out-dir) "Convert JSON-FILE (a theme.json export) into a deftheme file. -Write themes/-theme.el, where is the JSON name field, into -OUT-DIR (default: the themes/ directory of this repo). Return the written -path." +Write themes/-theme.el, where is JSON-FILE's basename, into +OUT-DIR (default: the themes/ directory of this repo). The basename names the +theme so each export lands under its own file (sterling.json -> sterling-theme.el), +rather than colliding on whatever the JSON's internal name field happens to be. +Return the written path." (let* ((data (build-theme/--parse json-file)) - (name (build-theme/--obj-get data 'name)) + (name (file-name-base json-file)) (specs (build-theme/--all-specs data)) (dir (or out-dir (expand-file-name -- cgit v1.2.3