aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-07-11 12:24:01 -0500
committerCraig Jennings <c@cjennings.net>2026-07-11 12:24:01 -0500
commit5bee76514def9ca54c1bd52fb1a9c89ddfdab2ac (patch)
tree7a5ba0da9af3c70a1709361e8da5880ff768a760 /modules
parentc4b5fefa6712649c637a286886bd18ac412eba8d (diff)
downloaddotemacs-5bee76514def9ca54c1bd52fb1a9c89ddfdab2ac.tar.gz
dotemacs-5bee76514def9ca54c1bd52fb1a9c89ddfdab2ac.zip
fix(ui-theme): create persist/ before writing the saved theme
cj/theme-write-file-contents guarded on file-writable-p, which returns nil when the target's directory doesn't exist. On a fresh machine persist/ isn't there yet, so the theme write failed silently and the choice never persisted. Create the parent directory first, and still return nil if the path isn't writable.
Diffstat (limited to 'modules')
-rw-r--r--modules/ui-theme.el10
1 files changed, 8 insertions, 2 deletions
diff --git a/modules/ui-theme.el b/modules/ui-theme.el
index 499e71a4..b3cdc634 100644
--- a/modules/ui-theme.el
+++ b/modules/ui-theme.el
@@ -88,8 +88,14 @@ If FILENAME isn't readable, return nil."
(string-trim (buffer-string)))))
(defun cj/theme-write-file-contents (content filename)
- "Write CONTENT to FILENAME.
-If FILENAME isn't writeable, return nil. If successful, return t."
+ "Write CONTENT to FILENAME, creating its parent directory if absent.
+On a fresh machine the `persist/' directory doesn't exist yet, and
+`file-writable-p' returns nil for a file inside a missing directory, so the
+write would silently fail. If FILENAME still isn't writeable, return nil.
+If successful, return t."
+ (let ((dir (file-name-directory filename)))
+ (when (and dir (not (file-directory-p dir)))
+ (ignore-errors (make-directory dir t))))
(when (file-writable-p filename)
(condition-case err
(progn