(require 'cl-lib) (require 'package) (defun fussy-is-theme-p (pkg-entry) (cl-search "-theme" (symbol-name (cl-first pkg-entry)) :test 'char-equal)) (defun fussy-themes-packages () (cl-remove-if-not 'fussy-is-theme-p package-archive-contents)) (defun fussy-screenshot-svg (filename) "Save a screenshot of the current frame as an SVG image. Saves to a temp file and puts the filename in the kill ring." (let* ((tmpfile (make-temp-file "Emacs" nil ".svg")) (data (x-export-frames nil 'svg))) (with-temp-file tmpfile (insert data)) (copy-file tmpfile filename t))) (defun install-all-themes () (let ((failed-to-install nil)) (cl-dolist (theme (fussy-themes-packages)) (condition-case nil (package-install (cl-first theme)) (error (push (cl-first theme) failed-to-install)))) failed-to-install)) (defun fussy-generate-all-theme-images (&rest files) (let ((failed-to-load nil) (failed-to-generate-image nil) (failed-to-install (install-all-themes))) (message "All themes have been loaded") (cl-dolist (theme (custom-available-themes)) (message (format "Generating for theme: %s" theme)) (unwind-protect (when (condition-case nil (progn (load-theme theme t) t) (error (push theme failed-to-load) (message "... failed to load!") nil)) (dolist (file files) (let ((svg-file (concat (getenv "HOME") "/" (symbol-name theme) "/" (file-name-base file) "." (file-name-extension file) ".svg"))) (make-directory (file-name-directory svg-file) t) (condition-case nil (progn (find-file file) (delete-other-windows) (fussy-screenshot-svg svg-file)) (error (push (cons theme file) failed-to-generate-image))))))) (disable-theme theme)) (with-temp-file (concat (getenv "HOME") "/" "errors.el") (insert (prin1-to-string (list :load-errors failed-to-load :generation-errors failed-to-generate-image :install-errors failed-to-install)))) (message "FINISHED GENERATING THEME IMAGES"))) (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) (package-initialize) (package-refresh-contents) (fussy-generate-all-theme-images "/home/colin/projects/LearnCPP/chapter1/hello_world/hello.cpp" "/home/colin/projects/fussy/fussy.el" "/home/colin/projects/INACTIVE/nsa/nsa.py")