浏览代码

Fix bug when hiding archived subtrees

Emilio Arias writes:

> egallego@babel.ls.fi.upm.es (Emilio Jess Gallego Arias) writes:
>
> To reproduce save this minimal org file:
>
> #+STARTUP: even
> * A
>  :PROPERTIES:
>  :ARCHIVE: a
>  :END:
> ** B 								:ARCHIVE:
>   Some text
>
> and hit TAB when in the * A headline; then the ** B headline contents
> will be incorrectly shown.
>
> I've found the culprit in org-hide-archived-subtrees:
>
> ,----
> | (defun org-hide-archived-subtrees (beg end)
> |   "Re-hide all archived subtrees after a visibility state change."
> |   (save-excursion
> |     (let* ((re (concat ":" org-archive-tag ":")))
> |       (goto-char beg)
> |       (while (re-search-forward re end t)
> | 	(and (org-on-heading-p) (org-flag-subtree t))
> | 	(org-end-of-subtree t)))))
> `----
>
> The problem is that the RE matches the first archive "property" and
> then does an org-end-of-subtree which skips all the subtrees of the
> parent tree where the ARCHIVE property is located.
>
> I've replaced this part
>
> | 	(and (org-on-heading-p) (org-flag-subtree t))
> | 	(org-end-of-subtree t)))))
>
> by
>
> |       (when (org-on-heading-p)
> |             (org-flag-subtree t)
> |             (org-end-of-subtree t)))))))
>
> so org-end-of-subtree is only called if we are really in a headline. I
> think that makes sense.
>
Carsten Dominik 15 年之前
父节点
当前提交
449e6b4560
共有 2 个文件被更改,包括 8 次插入2 次删除
  1. 5 0
      lisp/ChangeLog
  2. 3 2
      lisp/org.el

+ 5 - 0
lisp/ChangeLog

@@ -1,3 +1,8 @@
+2010-02-16  Carsten Dominik  <carsten.dominik@gmail.com>
+
+	* org.el (org-hide-archived-subtrees): Don't jump to end of
+	subtree if the match was not in a headline.
+
 2010-02-15  Carsten Dominik  <carsten.dominik@gmail.com>
 
 	* org-agenda.el (org-agenda-align-tags): Avoid side effects on

+ 3 - 2
lisp/org.el

@@ -3597,8 +3597,9 @@ collapsed state."
     (let* ((re (concat ":" org-archive-tag ":")))
       (goto-char beg)
       (while (re-search-forward re end t)
-	(and (org-on-heading-p) (org-flag-subtree t))
-	(org-end-of-subtree t)))))
+	(when (org-on-heading-p)
+	  (org-flag-subtree t)
+	  (org-end-of-subtree t))))))
 
 (defun org-flag-subtree (flag)
   (save-excursion