After filtering my document to a sparse tree, how do I undo the filter, going back to the previous view/visibility? Because I haven't worked out how to do this out I have to make everything visible, which isn't nice in big documents. Seems like it must be obvious but I can't find the answer...
This looks like it might be possible to me. In the following code I use some advice to save the outline state before generating the sparse tree, and to restore it when it is cleared via C-c C-c.
(setq lexical-binding t)
(let ((*outline-data* nil))
(defun org-save-outline-state (&optional arg type)
(setq *outline-data* (org-outline-overlay-data t)))
(defun org-restore-outline-state (&optional arg)
(when *outline-data*
(org-set-outline-overlay-data *outline-data*)
(setq *outline-data* nil))))
(advice-add 'org-sparse-tree :before 'org-save-outline-state)
(advice-add 'org-match-sparse-tree :before 'org-save-outline-state)
(advice-add 'org-ctrl-c-ctrl-c :after 'org-restore-outline-state)
It seems to do what you want.
According to Bastien on the org mailing list, this isn't possible and is a long-standing wishlist item.
I'm not sure you can go back to the exact previous view. But one first step is C-c C-c which will remove temporary highlights/overlays from the current buffer.
This looks like it might be possible to me. In the following code I use some advice to save the outline state before generating the sparse tree, and to restore it when it is cleared via C-c C-c.
(setq lexical-binding t)
(let ((*outline-data* nil))
(defun org-save-outline-state (&optional arg type)
(setq *outline-data* (org-outline-overlay-data t)))
(defun org-restore-outline-state (&optional arg)
(when *outline-data*
(org-set-outline-overlay-data *outline-data*)
(setq *outline-data* nil))))
(advice-add 'org-sparse-tree :before 'org-save-outline-state)
(advice-add 'org-match-sparse-tree :before 'org-save-outline-state)
(advice-add 'org-ctrl-c-ctrl-c :after 'org-restore-outline-state)
It seems to do what you want.
org-outline-overlay-data
and org-set-outline-overlay-data
have been removed from Orgmode: code.orgmode.org/bzg/org-mode/commit/… –
Resurrection You can create two windows using C-x 2, then switch to the other window, do the sparse tree. When you are done simply go back to the original window and press C-x 1 to close the sparse tree window.
You probably cannot go back to the same view as before.
But there are 3 steps to remove the spare tree effects:
org-agenda-remove-restriction-lock
to remove the locked items' highlighted background.org-remove-occur-highlights
to remove the prefix's highlight.widen
to remove the restriction to the special entry, and expand to view the full file.
The solution is the "org-tree-to-indirect-buffer" function (it is bound to C-c C-x b). This function creates a new indirect buffer and restricts it to the current subtree. This new buffer must then be extended in the first step with the "widen" function (it is bound to C-x n w).
Then you can do whatever you want in this new buffer without affecting the visibility (narrowing, sparse tree, highlighting, ...) of the original buffer. So you can simply filter and edit your sparse tree in the new buffer.
And when you are done, close the second buffer and you are back in the original buffer you were in, thus returning to the previous view/visibility.
Of course, you can also create a new function yourself to automate these steps.
© 2022 - 2025 — McMap. All rights reserved.
org-outline-overlay-data
andorg-set-outline-overlay-data
have been removed from Orgmode: code.orgmode.org/bzg/org-mode/commit/… – Resurrection