summaryrefslogtreecommitdiff
path: root/fussy.el
blob: 91882bcccbac4c0d13ec0d783211629f03ddfe5c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
(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")