@@ -125,7 +125,8 @@ See also the docstring of `org-image-actual-width' for more details."
125125 id-cleared-p
126126 inline-block-p
127127 marker
128- async-p)
128+ async-p
129+ overlay)
129130
130131(defun jupyter-org-execute-async-p (params )
131132 " Return non-nil if an execution should be asynchronous based on PARAMS.
@@ -154,6 +155,26 @@ e.g. `org-babel-get-src-block-info'."
154155
155156(defvar org-babel-jupyter-current-src-block-params )
156157
158+ (defun jupyter-org--make-overlay (beg end &optional inline )
159+ " Create overlay between BEG and END positions and return it."
160+ (let ((overlay (make-overlay beg end)))
161+ (overlay-put overlay 'face 'secondary-selection )
162+ (let ((read-only
163+ (list
164+ (lambda (&rest _ )
165+ (user-error
166+ " Cannot modify an area of a source block being executed" )))))
167+ (overlay-put overlay 'modification-hooks read-only)
168+ (overlay-put overlay 'insert-in-front-hooks read-only)
169+ (unless inline
170+ (overlay-put overlay 'insert-behind-hooks read-only)))
171+ overlay))
172+
173+
174+ (defun jupyter-org--remove-overlay (req )
175+ (when (overlayp (jupyter-org-request-overlay req))
176+ (delete-overlay (jupyter-org-request-overlay req))))
177+
157178(cl-defmethod jupyter-generate-request ((_client jupyter-org-client) &rest slots)
158179 " Return a `jupyter-org-request' for the current source code block."
159180 (if (and org-babel-current-src-block-location
@@ -190,6 +211,19 @@ e.g. `org-babel-get-src-block-info'."
190211 org-babel-current-src-block-location
191212 (1+ org-babel-current-src-block-location)
192213 'jupyter-request req)
214+ (setf (jupyter-org-request-overlay req)
215+ (pcase (org-element-type context)
216+ (`src-block
217+ (jupyter-org--make-overlay
218+ (save-excursion
219+ (goto-char (jupyter-org-element-begin-after-affiliated context))
220+ (line-beginning-position 2 ))
221+ (jupyter-org-element-contents-end context)))
222+ ((and type (or `inline-src-block `babel-call `inline-babel-call))
223+ (jupyter-org--make-overlay
224+ (jupyter-org-element-begin-after-affiliated context)
225+ (jupyter-org-element-end-before-blanks context)
226+ (memq type '(inline-src-block babel-call inline-babel-call))))))
193227 req))
194228 (cl-call-next-method )))
195229
368402 (when payload
369403 (org-with-point-at (jupyter-org-request-marker req)
370404 (jupyter-handle-payload payload)))
405+ (jupyter-org--remove-overlay req)
371406 (if (equal status " ok" )
372407 (message " Code block evaluation complete. " )
373408 (message " An error occurred when evaluating code block. " ))
0 commit comments