|
@@ -399,6 +399,82 @@ with C-c C-c."
|
|
|
(when hash (kill-new hash) (message hash))))
|
|
|
(add-hook 'org-ctrl-c-ctrl-c-hook 'org-babel-hash-at-point)
|
|
|
|
|
|
+(defun org-babel-result-hide-spec ()
|
|
|
+ (org-add-to-invisibility-spec '(org-babel-hide-result . t)))
|
|
|
+(add-hook 'org-mode-hook 'org-babel-result-hide-spec)
|
|
|
+
|
|
|
+(defvar org-babel-hide-result-overlays nil
|
|
|
+ "Overlays hiding results.")
|
|
|
+
|
|
|
+(defun org-babel-result-hide-all ()
|
|
|
+ "Fold all results in the current buffer."
|
|
|
+ (interactive)
|
|
|
+ (org-babel-show-result-all)
|
|
|
+ (save-excursion
|
|
|
+ (while (re-search-forward org-babel-result-regexp nil t)
|
|
|
+ (save-excursion (goto-char (match-beginning 0))
|
|
|
+ (org-babel-hide-result-toggle-maybe)))))
|
|
|
+
|
|
|
+(defun org-babel-show-result-all ()
|
|
|
+ "Unfold all results in the current buffer."
|
|
|
+ (mapc 'org-delete-overlay org-babel-hide-result-overlays)
|
|
|
+ (setq org-babel-hide-result-overlays nil))
|
|
|
+
|
|
|
+(defun org-babel-hide-result-toggle-maybe ()
|
|
|
+ "Toggle visibility of result at point."
|
|
|
+ (interactive)
|
|
|
+ (let ((case-fold-search t))
|
|
|
+ (if (save-excursion
|
|
|
+ (beginning-of-line 1)
|
|
|
+ (looking-at org-babel-result-regexp))
|
|
|
+ (progn (org-babel-hide-result-toggle)
|
|
|
+ t) ;; to signal that we took action
|
|
|
+ nil))) ;; to signal that we did not
|
|
|
+
|
|
|
+(defun org-babel-hide-result-toggle (&optional force)
|
|
|
+ "Toggle the visibility of the current result."
|
|
|
+ (interactive)
|
|
|
+ (save-excursion
|
|
|
+ (beginning-of-line)
|
|
|
+ (if (re-search-forward org-babel-result-regexp nil t)
|
|
|
+ (let ((start (progn (beginning-of-line 2) (- (point) 1)))
|
|
|
+ (end (progn (goto-char (- (org-babel-result-end) 1)) (point)))
|
|
|
+ ov)
|
|
|
+ (if (memq t (mapcar (lambda (overlay)
|
|
|
+ (eq (org-overlay-get overlay 'invisible)
|
|
|
+ 'org-babel-hide-result))
|
|
|
+ (org-overlays-at start)))
|
|
|
+ (if (or (not force) (eq force 'off))
|
|
|
+ (mapc (lambda (ov)
|
|
|
+ (when (member ov org-babel-hide-result-overlays)
|
|
|
+ (setq org-babel-hide-result-overlays
|
|
|
+ (delq ov org-babel-hide-result-overlays)))
|
|
|
+ (when (eq (org-overlay-get ov 'invisible)
|
|
|
+ 'org-babel-hide-result)
|
|
|
+ (org-delete-overlay ov)))
|
|
|
+ (org-overlays-at start)))
|
|
|
+ (setq ov (org-make-overlay start end))
|
|
|
+ (org-overlay-put ov 'invisible 'org-babel-hide-result)
|
|
|
+ ;; make the block accessible to isearch
|
|
|
+ (org-overlay-put
|
|
|
+ ov 'isearch-open-invisible
|
|
|
+ (lambda (ov)
|
|
|
+ (when (member ov org-babel-hide-result-overlays)
|
|
|
+ (setq org-babel-hide-result-overlays
|
|
|
+ (delq ov org-babel-hide-result-overlays)))
|
|
|
+ (when (eq (org-overlay-get ov 'invisible)
|
|
|
+ 'org-babel-hide-result)
|
|
|
+ (org-delete-overlay ov))))
|
|
|
+ (push ov org-babel-hide-result-overlays)))
|
|
|
+ (error "Not looking at a result line"))))
|
|
|
+
|
|
|
+;; org-tab-after-check-for-cycling-hook
|
|
|
+(add-hook 'org-tab-first-hook 'org-babel-hide-result-toggle-maybe)
|
|
|
+;; Remove overlays when changing major mode
|
|
|
+(add-hook 'org-mode-hook
|
|
|
+ (lambda () (org-add-hook 'change-major-mode-hook
|
|
|
+ 'org-babel-show-result-all 'append 'local)))
|
|
|
+
|
|
|
(defmacro org-babel-map-source-blocks (file &rest body)
|
|
|
"Evaluate BODY forms on each source-block in FILE."
|
|
|
(declare (indent 1))
|