org-mode: go back from sparse tree to previous visibility

微笑、不失礼 提交于 2019-12-03 01:31:40

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.

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.

mick3dell

You probably cannot go back to the same view as before.

But there are 3 steps to remove the spare tree effects:

  1. org-agenda-remove-restriction-lock to remove the locked items' highlighted background.

  2. org-remove-occur-highlights to remove the prefix's highlight.

  3. widen to remove the restriction to the special entry, and expand to view the full file.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!