@@ -70,6 +70,18 @@ resulting value are used to compute completions."
70
70
:group 'cider
71
71
:package-version '(cider . " 0.23.0" ))
72
72
73
+ (defcustom cider-before-eval-hook nil
74
+ " List of functions to call before eval request is sent to nrepl."
75
+ :type 'hook
76
+ :group 'cider
77
+ :package-version '(cider . " 1.2.0" ))
78
+
79
+ (defcustom cider-after-eval-done-hook nil
80
+ " List of functions to call after eval was responded by nrepl with done status."
81
+ :type 'hook
82
+ :group 'cider
83
+ :package-version '(cider . " 1.2.0" ))
84
+
73
85
(defun cider-spinner-start (buffer )
74
86
" Start the evaluation spinner in BUFFER.
75
87
Do nothing if `cider-show-eval-spinner' is nil."
@@ -78,21 +90,19 @@ Do nothing if `cider-show-eval-spinner' is nil."
78
90
(spinner-start cider-eval-spinner-type nil
79
91
cider-eval-spinner-delay))))
80
92
81
- (defun cider-eval-spinner-handler (eval-buffer original-callback )
82
- " Return a response handler to stop the spinner and call ORIGINAL-CALLBACK .
93
+ (defun cider-eval-spinner (eval-buffer response )
94
+ " Handle RESPONSE stopping the spinner.
83
95
EVAL-BUFFER is the buffer where the spinner was started."
84
- (lambda (response )
85
- ; ; buffer still exists and
86
- ; ; we've got status "done" from nrepl
87
- ; ; stop the spinner
88
- (when (and (buffer-live-p eval-buffer)
89
- (let ((status (nrepl-dict-get response " status" )))
90
- (or (member " done" status)
91
- (member " eval-error" status)
92
- (member " error" status))))
93
- (with-current-buffer eval-buffer
94
- (when spinner-current (spinner-stop))))
95
- (funcall original-callback response)))
96
+ ; ; buffer still exists and
97
+ ; ; we've got status "done" from nrepl
98
+ ; ; stop the spinner
99
+ (when (and (buffer-live-p eval-buffer)
100
+ (let ((status (nrepl-dict-get response " status" )))
101
+ (or (member " done" status)
102
+ (member " eval-error" status)
103
+ (member " error" status))))
104
+ (with-current-buffer eval-buffer
105
+ (when spinner-current (spinner-stop)))))
96
106
97
107
98
108
; ;; Evaluation helpers
@@ -198,10 +208,14 @@ define the position of INPUT in its buffer. ADDITIONAL-PARAMS is a plist
198
208
to be appended to the request message. CONNECTION is the connection
199
209
buffer, defaults to (cider-current-repl)."
200
210
(let ((connection (or connection (cider-current-repl nil 'ensure ))))
211
+ (run-hooks 'cider-before-eval-hook )
201
212
(nrepl-request:eval input
202
- (if cider-show-eval-spinner
203
- (cider-eval-spinner-handler connection callback)
204
- callback)
213
+ (lambda (response )
214
+ (when cider-show-eval-spinner
215
+ (cider-eval-spinner connection response))
216
+ (when (member " done" (nrepl-dict-get response " status" ))
217
+ (run-hooks 'cider-after-eval-done-hook ))
218
+ (funcall callback response))
205
219
connection
206
220
ns line column additional-params)
207
221
(cider-spinner-start connection)))
0 commit comments