blob: 6f4e7aa84dac775dc9198c01bd7d8da5eb378fb9 (
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
(require 'cl-lib)
(require 'package)
(defvar +package-name-filter-out-list+
(list "airline-"))
(defvar +excluded-package-names+
'(tramp-theme color-theme))
(defun fussy-string-ends-with (str suffix)
(and (< (length suffix) (length str))
(string= suffix
(cl-subseq str (- (length str) (length suffix))))))
(defun fussy-is-theme-p (pkg-entry)
(let ((name (symbol-name (cl-first pkg-entry))))
(and (or (fussy-string-ends-with name "-theme")
(fussy-string-ends-with name "-themes"))
(not (cl-member (cl-first pkg-entry) +excluded-package-names+))
(cl-notany (lambda (substr) (cl-search substr name))
+package-name-filter-out-list+))))
(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")
|