diff options
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/+apheleia.el | 45 | ||||
-rw-r--r-- | lisp/+compile.el | 3 | ||||
-rw-r--r-- | lisp/+cus-edit.el | 6 | ||||
-rw-r--r-- | lisp/+nyan-mode.el | 3 | ||||
-rw-r--r-- | lisp/+setup.el | 58 |
5 files changed, 62 insertions, 53 deletions
diff --git a/lisp/+apheleia.el b/lisp/+apheleia.el index df651b8..9ed731c 100644 --- a/lisp/+apheleia.el +++ b/lisp/+apheleia.el | |||
@@ -2,7 +2,6 @@ | |||
2 | 2 | ||
3 | ;;; Code: | 3 | ;;; Code: |
4 | 4 | ||
5 | (require 'apheleia) | ||
6 | (require 'cl-lib) | 5 | (require 'cl-lib) |
7 | 6 | ||
8 | ;; https://github.com/raxod502/apheleia/pull/63#issue-1077529623 | 7 | ;; https://github.com/raxod502/apheleia/pull/63#issue-1077529623 |
@@ -14,49 +13,5 @@ | |||
14 | (point-max)) | 13 | (point-max)) |
15 | (funcall callback))) | 14 | (funcall callback))) |
16 | 15 | ||
17 | |||
18 | ;;; `setup' integration | ||
19 | |||
20 | (require 'setup) | ||
21 | |||
22 | (setup-define :apheleia | ||
23 | (lambda (name formatter &optional mode -pend) | ||
24 | (let* ((mode (or mode (setup-get 'mode))) | ||
25 | (current-formatters (and -pend | ||
26 | (alist-get mode apheleia-formatters)))) | ||
27 | `(progn | ||
28 | (setf (alist-get ',name apheleia-formatters) | ||
29 | ,formatter) | ||
30 | (setf (alist-get ',mode apheleia-mode-alist) | ||
31 | ',(pcase -pend | ||
32 | (:append (append (ensure-list current-formatters) | ||
33 | (list name))) | ||
34 | (:prepend (cons name (ensure-list current-formatters))) | ||
35 | ('nil name) | ||
36 | (_ (error "Improper `:apheleia' -PEND argument"))))))) | ||
37 | :documentation | ||
38 | "Register a formatter to `apheleia''s lists. | ||
39 | NAME is the name given to the formatter in `apheleia-formatters' | ||
40 | and `apheleia-mode-alist'. FORMATTER is the command paired with | ||
41 | NAME in `apheleia-formatters'. MODE is the mode or modes to add | ||
42 | NAME to in `apheleia-mode-alist'. If MODE is not given or nil, | ||
43 | use the setup form's MODE. Optional argument -PEND can be one of | ||
44 | `:append' or `:prepend', and if given will append or prepend the | ||
45 | given NAME to the current formatters for the MODE in | ||
46 | `apheleia-mode-alist', rather than replace them (the default). | ||
47 | |||
48 | Example: | ||
49 | (setup | ||
50 | (:apheleia isort (\"isort\" \"--stdout\" \"-\") | ||
51 | python-mode)) | ||
52 | ; => | ||
53 | (progn | ||
54 | (setf (alist-get 'isort apheleia-formatters) | ||
55 | '(\"isort\" \"--stdout\" \"-\")) | ||
56 | (setf (alist-get 'python-mode apheleia-mode-alist) | ||
57 | 'isort)) | ||
58 | |||
59 | This form cannot be repeated, and it cannot be used as HEAD.") | ||
60 | |||
61 | (provide '+apheleia) | 16 | (provide '+apheleia) |
62 | ;;; +apheleia.el ends here | 17 | ;;; +apheleia.el ends here |
diff --git a/lisp/+compile.el b/lisp/+compile.el index b20ae4d..a69db7d 100644 --- a/lisp/+compile.el +++ b/lisp/+compile.el | |||
@@ -7,7 +7,8 @@ | |||
7 | (defcustom +compile-function nil | 7 | (defcustom +compile-function nil |
8 | "Function to run to \"compile\" a buffer." | 8 | "Function to run to \"compile\" a buffer." |
9 | :type 'function | 9 | :type 'function |
10 | :local t) | 10 | :local t |
11 | :risky nil) | ||
11 | 12 | ||
12 | (defun +compile-dispatch (&optional arg) | 13 | (defun +compile-dispatch (&optional arg) |
13 | "Run `+compile-function', if bound, or `compile'. | 14 | "Run `+compile-function', if bound, or `compile'. |
diff --git a/lisp/+cus-edit.el b/lisp/+cus-edit.el index 4631811..a67279c 100644 --- a/lisp/+cus-edit.el +++ b/lisp/+cus-edit.el | |||
@@ -33,6 +33,9 @@ | |||
33 | (defcustom +custom-variable-allowlist nil | 33 | (defcustom +custom-variable-allowlist nil |
34 | "Variables to allow changing while loading the Custom file.") | 34 | "Variables to allow changing while loading the Custom file.") |
35 | 35 | ||
36 | (defcustom +custom-after-load-hook nil | ||
37 | "Functions to run after loading the custom file.") | ||
38 | |||
36 | (defun +custom-load-ignoring-most-customizations (&optional | 39 | (defun +custom-load-ignoring-most-customizations (&optional |
37 | error | 40 | error |
38 | nomessage | 41 | nomessage |
@@ -55,7 +58,8 @@ pass t to it." | |||
55 | (memq (car el) | 58 | (memq (car el) |
56 | +custom-variable-allowlist)) | 59 | +custom-variable-allowlist)) |
57 | args))))) | 60 | args))))) |
58 | (load custom-file (not error) nomessage nosuffix must-suffix))) | 61 | (load custom-file (not error) nomessage nosuffix must-suffix)) |
62 | (run-hooks '+custom-after-load-hook)) | ||
59 | 63 | ||
60 | (defun +cus-edit-expand-widgets (&rest _) | 64 | (defun +cus-edit-expand-widgets (&rest _) |
61 | "Expand descriptions in `Custom-mode' buffers." | 65 | "Expand descriptions in `Custom-mode' buffers." |
diff --git a/lisp/+nyan-mode.el b/lisp/+nyan-mode.el index fc6775b..33ae9af 100644 --- a/lisp/+nyan-mode.el +++ b/lisp/+nyan-mode.el | |||
@@ -24,6 +24,9 @@ | |||
24 | (advice-add fn :after #'+nyan-mode--fmlu) | 24 | (advice-add fn :after #'+nyan-mode--fmlu) |
25 | (advice-remove fn #'+nyan-mode--fmlu)))) | 25 | (advice-remove fn #'+nyan-mode--fmlu)))) |
26 | 26 | ||
27 | (defface +nyan-mode-line nil | ||
28 | "Face for the nyan-mode mode-line indicator.") | ||
29 | |||
27 | (define-minor-mode +nyan-local-mode | 30 | (define-minor-mode +nyan-local-mode |
28 | "My very own `nyan-mode' that isn't global and doesn't update the mode-line." | 31 | "My very own `nyan-mode' that isn't global and doesn't update the mode-line." |
29 | :global nil | 32 | :global nil |
diff --git a/lisp/+setup.el b/lisp/+setup.el index 1f110d6..a08526a 100644 --- a/lisp/+setup.el +++ b/lisp/+setup.el | |||
@@ -43,6 +43,9 @@ it includes the NAME of the setup form in the warning output." | |||
43 | name) | 43 | name) |
44 | ,body))) | 44 | ,body))) |
45 | 45 | ||
46 | |||
47 | ;;; New forms | ||
48 | |||
46 | (setup-define :quit | 49 | (setup-define :quit |
47 | 'setup-quit | 50 | 'setup-quit |
48 | :documentation "Quit the current `setup' form. | 51 | :documentation "Quit the current `setup' form. |
@@ -77,7 +80,16 @@ If PATH does not exist, abort the evaluation." | |||
77 | (file-name-nondirectory | 80 | (file-name-nondirectory |
78 | (directory-file-name (cadr args)))))) | 81 | (directory-file-name (cadr args)))))) |
79 | 82 | ||
83 | (setup-define :needs | ||
84 | (lambda (executable) | ||
85 | `(unless (executable-find ,executable) | ||
86 | ,(setup-quit))) | ||
87 | :documentation "If EXECUTABLE is not in the path, stop here." | ||
88 | :repeatable 1) | ||
89 | |||
80 | 90 | ||
91 | ;;; Package integrations | ||
92 | |||
81 | ;;; Straight.el | 93 | ;;; Straight.el |
82 | 94 | ||
83 | (defun setup--straight-handle-arg (arg var) | 95 | (defun setup--straight-handle-arg (arg var) |
@@ -127,12 +139,46 @@ The following keyword arguments are also recognized: | |||
127 | (let ((recipe (cadr sexp))) | 139 | (let ((recipe (cadr sexp))) |
128 | (or (car-safe recipe) recipe))))) | 140 | (or (car-safe recipe) recipe))))) |
129 | 141 | ||
130 | (setup-define :needs | 142 | ;;; Apheleia |
131 | (lambda (executable) | 143 | |
132 | `(unless (executable-find ,executable) | 144 | (setup-define :apheleia |
133 | ,(setup-quit))) | 145 | (lambda (name formatter &optional mode -pend) |
134 | :documentation "If EXECUTABLE is not in the path, stop here." | 146 | (let* ((mode (or mode (setup-get 'mode))) |
135 | :repeatable 1) | 147 | (current-formatters (and -pend |
148 | (alist-get mode apheleia-formatters)))) | ||
149 | `(with-eval-after-load 'apheleia | ||
150 | (setf (alist-get ',name apheleia-formatters) | ||
151 | ,formatter) | ||
152 | (setf (alist-get ',mode apheleia-mode-alist) | ||
153 | ',(pcase -pend | ||
154 | (:append (append (ensure-list current-formatters) | ||
155 | (list name))) | ||
156 | (:prepend (cons name (ensure-list current-formatters))) | ||
157 | ('nil name) | ||
158 | (_ (error "Improper `:apheleia' -PEND argument"))))))) | ||
159 | :documentation | ||
160 | "Register a formatter to `apheleia''s lists. | ||
161 | NAME is the name given to the formatter in `apheleia-formatters' | ||
162 | and `apheleia-mode-alist'. FORMATTER is the command paired with | ||
163 | NAME in `apheleia-formatters'. MODE is the mode or modes to add | ||
164 | NAME to in `apheleia-mode-alist'. If MODE is not given or nil, | ||
165 | use the setup form's MODE. Optional argument -PEND can be one of | ||
166 | `:append' or `:prepend', and if given will append or prepend the | ||
167 | given NAME to the current formatters for the MODE in | ||
168 | `apheleia-mode-alist', rather than replace them (the default). | ||
169 | |||
170 | Example: | ||
171 | (setup | ||
172 | (:apheleia isort (\"isort\" \"--stdout\" \"-\") | ||
173 | python-mode)) | ||
174 | ; => | ||
175 | (progn | ||
176 | (setf (alist-get 'isort apheleia-formatters) | ||
177 | '(\"isort\" \"--stdout\" \"-\")) | ||
178 | (setf (alist-get 'python-mode apheleia-mode-alist) | ||
179 | 'isort)) | ||
180 | |||
181 | This form cannot be repeated, and it cannot be used as HEAD.") | ||
136 | 182 | ||
137 | 183 | ||
138 | ;;; Redefines of `setup' forms | 184 | ;;; Redefines of `setup' forms |