diff options
Diffstat (limited to 'lisp/+custom.el')
-rw-r--r-- | lisp/+custom.el | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/lisp/+custom.el b/lisp/+custom.el new file mode 100644 index 0000000..ba4c55d --- /dev/null +++ b/lisp/+custom.el | |||
@@ -0,0 +1,52 @@ | |||
1 | ;;; +custom.el -*- lexical-binding: t -*- | ||
2 | |||
3 | (require 'cl-lib) | ||
4 | (require 'seq) | ||
5 | |||
6 | (defgroup +custom nil | ||
7 | "Group for extra `customize' customizations." | ||
8 | :group 'customize) | ||
9 | |||
10 | (defcustom +custom-allowed-variables nil | ||
11 | "Variables to load during `+custom-load-some-customizations'." | ||
12 | :type '(repeat symbol)) | ||
13 | |||
14 | (defcustom +custom-allowed-faces nil | ||
15 | "Faces to load during `+custom-load-some-customziations'." | ||
16 | :type '(repeat face)) | ||
17 | |||
18 | (defun +custom--filter-list (customlist allowlist) | ||
19 | "Filter CUSTOMLIST to only include those items in ALLOWLIST. | ||
20 | Each item in ALLOWLIST will be compared using `eq' to the `car' | ||
21 | of each item in CUSTOMLIST. Items in CUSTOMLIST not included in | ||
22 | ALLOWLIST will be removed from the return value." | ||
23 | (seq-filter (lambda (el) (memq (car el) allowlist)) | ||
24 | customlist)) | ||
25 | |||
26 | (defcustom +custom-after-load-hook nil | ||
27 | "Hook run after loading the custom file." | ||
28 | :type 'hook) | ||
29 | |||
30 | (defun +custom-load-some-customizations (&optional noerror | ||
31 | nomessage | ||
32 | nosuffix | ||
33 | must-suffix) | ||
34 | "Load `custom-file', ignoring most customizations. | ||
35 | Only faces included in `+custom-allowed-faces' and variables | ||
36 | included in `+custom-allowed-variables' will be loaded. | ||
37 | |||
38 | All optional arguments---NOERROR, NOMESSAGE, NOSUFFIX, | ||
39 | MUST-SUFFIX---are passed to `load', which see." | ||
40 | (cl-letf (((symbol-function 'custom-set-faces) | ||
41 | (lambda (&rest args) | ||
42 | (apply #'custom-theme-set-faces 'user | ||
43 | (+custom--filter-list args +custom-allowed-faces)))) | ||
44 | ((symbol-function 'custom-set-variables) | ||
45 | (lambda (&rest args) | ||
46 | (apply #'custom-theme-set-variables 'user | ||
47 | (+custom--filter-list args +custom-allowed-variables))))) | ||
48 | (load custom-file noerror nomessage nosuffix must-suffix)) | ||
49 | (run-hooks '+custom-after-load-hook)) | ||
50 | |||
51 | (provide '+custom) | ||
52 | ;;; +custom.el ends here | ||