mirror of
https://github.com/vale981/emacs-jupyter
synced 2025-03-05 07:41:37 -05:00
Preserve outline visibility
* jupyter-org-extensions.el (jupyter-org-closest-jupyter-language) (jupyter-org-between-block-end-and-result-p): (jupyter-org-next-busy-src-block): (jupyter-org-move-src-block): Do it.
This commit is contained in:
parent
7918293c41
commit
1e6e83c12e
1 changed files with 63 additions and 58 deletions
|
@ -64,49 +64,50 @@ blocks could be found in the buffer.
|
||||||
|
|
||||||
Distance is line based, not character based. Also, `point' is
|
Distance is line based, not character based. Also, `point' is
|
||||||
assumed to not be inside a source block."
|
assumed to not be inside a source block."
|
||||||
(save-excursion
|
(org-save-outline-visibility nil
|
||||||
(or (and (null query)
|
(save-excursion
|
||||||
(cl-loop
|
(or (and (null query)
|
||||||
with start = (line-number-at-pos)
|
(cl-loop
|
||||||
with previous = (ignore-errors
|
with start = (line-number-at-pos)
|
||||||
(save-excursion
|
with previous = (ignore-errors
|
||||||
(org-babel-previous-src-block)
|
(save-excursion
|
||||||
(point)))
|
(org-babel-previous-src-block)
|
||||||
with next = (ignore-errors
|
(point)))
|
||||||
(save-excursion
|
with next = (ignore-errors
|
||||||
(org-babel-next-src-block)
|
(save-excursion
|
||||||
(point)))
|
(org-babel-next-src-block)
|
||||||
with maybe-return-lang =
|
(point)))
|
||||||
(lambda ()
|
with maybe-return-lang =
|
||||||
(let ((info (org-babel-get-src-block-info 'light)))
|
(lambda ()
|
||||||
(when (org-babel-jupyter-language-p (nth 0 info))
|
(let ((info (org-babel-get-src-block-info 'light)))
|
||||||
(cl-return (nth 0 info)))))
|
(when (org-babel-jupyter-language-p (nth 0 info))
|
||||||
while (or previous next) do
|
(cl-return (nth 0 info)))))
|
||||||
(cond
|
while (or previous next) do
|
||||||
((or
|
(cond
|
||||||
;; Maybe return the previous Jupyter source block's language
|
((or
|
||||||
;; if it is closer to the start point than the next source
|
;; Maybe return the previous Jupyter source block's language
|
||||||
;; block
|
;; if it is closer to the start point than the next source
|
||||||
(and previous next (< (- start (line-number-at-pos previous))
|
;; block
|
||||||
(- (line-number-at-pos next) start)))
|
(and previous next (< (- start (line-number-at-pos previous))
|
||||||
;; or when there is no next source block
|
(- (line-number-at-pos next) start)))
|
||||||
(and (null next) previous))
|
;; or when there is no next source block
|
||||||
(goto-char previous)
|
(and (null next) previous))
|
||||||
(funcall maybe-return-lang)
|
(goto-char previous)
|
||||||
(setq previous (ignore-errors
|
(funcall maybe-return-lang)
|
||||||
(org-babel-previous-src-block)
|
(setq previous (ignore-errors
|
||||||
(point))))
|
(org-babel-previous-src-block)
|
||||||
(next
|
(point))))
|
||||||
(goto-char next)
|
(next
|
||||||
(funcall maybe-return-lang)
|
(goto-char next)
|
||||||
(setq next (ignore-errors
|
(funcall maybe-return-lang)
|
||||||
(org-babel-next-src-block)
|
(setq next (ignore-errors
|
||||||
(point)))))))
|
(org-babel-next-src-block)
|
||||||
;; If all else fails, query for the language to use
|
(point)))))))
|
||||||
(let* ((kernelspec (jupyter-completing-read-kernelspec))
|
;; If all else fails, query for the language to use
|
||||||
(lang (plist-get (cddr kernelspec) :language)))
|
(let* ((kernelspec (jupyter-completing-read-kernelspec))
|
||||||
(if (org-babel-jupyter-language-p lang) lang
|
(lang (plist-get (cddr kernelspec) :language)))
|
||||||
(format "jupyter-%s" lang))))))
|
(if (org-babel-jupyter-language-p lang) lang
|
||||||
|
(format "jupyter-%s" lang)))))))
|
||||||
|
|
||||||
(defun jupyter-org-between-block-end-and-result-p ()
|
(defun jupyter-org-between-block-end-and-result-p ()
|
||||||
"If `point' is between a src-block and its result, return the result end.
|
"If `point' is between a src-block and its result, return the result end.
|
||||||
|
@ -118,7 +119,8 @@ separates the two."
|
||||||
;; after a src block, e.g. for named results that appear somewhere else.
|
;; after a src block, e.g. for named results that appear somewhere else.
|
||||||
(save-excursion
|
(save-excursion
|
||||||
(let ((start (point)))
|
(let ((start (point)))
|
||||||
(when-let* ((src (and (ignore-errors (org-babel-previous-src-block))
|
(when-let* ((src (and (org-save-outline-visibility nil
|
||||||
|
(ignore-errors (org-babel-previous-src-block)))
|
||||||
(org-element-context)))
|
(org-element-context)))
|
||||||
(end (org-element-property :end src))
|
(end (org-element-property :end src))
|
||||||
(result-pos (org-babel-where-is-src-block-result)))
|
(result-pos (org-babel-where-is-src-block-result)))
|
||||||
|
@ -330,16 +332,18 @@ With a prefix argument ARG, jump forward ARG many blocks.
|
||||||
|
|
||||||
When BACKWARD is non-nil, jump to the previous block."
|
When BACKWARD is non-nil, jump to the previous block."
|
||||||
(interactive "p")
|
(interactive "p")
|
||||||
(cl-loop
|
(org-save-outline-visibility nil
|
||||||
with count = (abs (or arg 1))
|
(cl-loop
|
||||||
with origin = (point)
|
with count = (abs (or arg 1))
|
||||||
while (ignore-errors
|
with origin = (point)
|
||||||
(if backward (org-babel-previous-src-block)
|
while (ignore-errors
|
||||||
(org-babel-next-src-block)))
|
(if backward (org-babel-previous-src-block)
|
||||||
thereis (when (jupyter-org-request-at-point)
|
(org-babel-next-src-block)))
|
||||||
(zerop (cl-decf count)))
|
thereis (when (jupyter-org-request-at-point)
|
||||||
finally (goto-char origin)
|
(zerop (cl-decf count)))
|
||||||
(user-error "No %s busy code blocks" (if backward "previous" "further"))))
|
finally (goto-char origin)
|
||||||
|
(user-error "No %s busy code blocks" (if backward "previous" "further"))))
|
||||||
|
(save-match-data (org-show-context)))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun jupyter-org-previous-busy-src-block (arg)
|
(defun jupyter-org-previous-busy-src-block (arg)
|
||||||
|
@ -598,10 +602,11 @@ If BELOW is non-nil, move the block down, otherwise move it up."
|
||||||
(defun jupyter-org-clear-all-results ()
|
(defun jupyter-org-clear-all-results ()
|
||||||
"Clear all results in the buffer."
|
"Clear all results in the buffer."
|
||||||
(interactive)
|
(interactive)
|
||||||
(save-excursion
|
(org-save-outline-visibility nil
|
||||||
(goto-char (point-min))
|
(save-excursion
|
||||||
(while (org-babel-next-src-block)
|
(goto-char (point-min))
|
||||||
(org-babel-remove-result))))
|
(while (org-babel-next-src-block)
|
||||||
|
(org-babel-remove-result)))))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun jupyter-org-interrupt-kernel ()
|
(defun jupyter-org-interrupt-kernel ()
|
||||||
|
|
Loading…
Add table
Reference in a new issue