Jelajahi Sumber

Fix infinite loop when rescheduling from agenda with tags filtering.

Carsten Dominik 16 tahun lalu
induk
melakukan
f3dda5ba2c
2 mengubah file dengan 62 tambahan dan 49 penghapusan
  1. 15 2
      lisp/org-agenda.el
  2. 47 47
      lisp/org-compat.el

+ 15 - 2
lisp/org-agenda.el

@@ -4128,7 +4128,7 @@ With prefix argument STRIP, remove all lines that do have the tag."
 		org-tag-alist-for-agenda ""))
       (setq char (read-char))
       (when (equal char ?\t)
-	(unless (local-variable-p 'org-global-tags-completion-table)
+	(unless (local-variable-p 'org-global-tags-completion-table (current-buffer))
 	  (org-set-local 'org-global-tags-completion-table
 			 (org-global-tags-completion-table)))
 	(let ((completion-ignore-case t))
@@ -4168,6 +4168,17 @@ With prefix argument STRIP, remove all lines that do have the tag."
     (org-overlay-put ov 'type 'tags-filter)
     (push ov org-agenda-filter-overlays)))
 
+(defun org-agenda-fix-tags-filter-overlays-at (&optional pos)
+  (setq pos (or pos (point)))
+  (save-excursion
+    (dolist (ov (org-overlays-at pos))
+      (when (and (org-overlay-get ov 'invisible)
+		 (eq (org-overlay-get ov 'type) 'tags-filter))
+	(goto-char pos)
+	(if (< (org-overlay-start ov) (point-at-eol))
+	    (org-move-overlay ov (point-at-eol)
+			      (org-overlay-end ov)))))))
+
 (defun org-agenda-filter-by-tag-show-all ()
   (mapc 'org-delete-overlay org-agenda-filter-overlays)
   (setq org-agenda-filter-overlays nil))
@@ -5002,13 +5013,15 @@ the same tree node, and the headline of the tree node in the Org-mode file."
 (defun org-agenda-show-new-time (marker stamp &optional prefix)
   "Show new date stamp via text properties."
   ;; We use text properties to make this undoable
-  (let ((inhibit-read-only t))
+  (let ((inhibit-read-only t)
+	(buffer-invisibility-spec))
     (setq stamp (concat " " prefix " => " stamp))
     (save-excursion
       (goto-char (point-max))
       (while (not (bobp))
 	(when (equal marker (get-text-property (point) 'org-marker))
 	  (org-move-to-column (- (window-width) (length stamp)) t)
+	  (org-agenda-fix-tags-filter-overlays-at (point))
           (if (featurep 'xemacs)
 	      ;; Use `duplicable' property to trigger undo recording
               (let ((ex (make-extent nil nil))

+ 47 - 47
lisp/org-compat.el

@@ -176,7 +176,7 @@ that can be added."
    ((fboundp 'add-to-invisibility-spec)
     (add-to-invisibility-spec arg))
    ((or (null buffer-invisibility-spec) (eq buffer-invisibility-spec t))
-	(setq buffer-invisibility-spec (list arg)))
+    (setq buffer-invisibility-spec (list arg)))
    (t
     (setq buffer-invisibility-spec
 	  (cons arg buffer-invisibility-spec)))))
@@ -197,56 +197,56 @@ that can be added."
 
 (defun org-indent-to-column (column &optional minimum buffer)
   "Work around a bug with extents with invisibility in XEmacs."
- (if (featurep 'xemacs)
-     (let ((ext-inv (extent-list
-                     nil (point-at-bol) (point-at-eol)
-                     'all-extents-closed-open 'invisible))
-           ext-inv-specs)
-       (dolist (ext ext-inv)
-         (when (extent-property ext 'invisible)
-           (add-to-list 'ext-inv-specs (list ext (extent-property
-						  ext 'invisible)))
-           (set-extent-property ext 'invisible nil)))
-       (indent-to-column column minimum buffer)
-       (dolist (ext-inv-spec ext-inv-specs)
-         (set-extent-property (car ext-inv-spec) 'invisible
-			      (cadr ext-inv-spec))))
-   (indent-to-column column minimum)))
+  (if (featurep 'xemacs)
+      (let ((ext-inv (extent-list
+		      nil (point-at-bol) (point-at-eol)
+		      'all-extents-closed-open 'invisible))
+	    ext-inv-specs)
+	(dolist (ext ext-inv)
+	  (when (extent-property ext 'invisible)
+	    (add-to-list 'ext-inv-specs (list ext (extent-property
+						   ext 'invisible)))
+	    (set-extent-property ext 'invisible nil)))
+	(indent-to-column column minimum buffer)
+	(dolist (ext-inv-spec ext-inv-specs)
+	  (set-extent-property (car ext-inv-spec) 'invisible
+			       (cadr ext-inv-spec))))
+    (indent-to-column column minimum)))
 
 (defun org-indent-line-to (column)
   "Work around a bug with extents with invisibility in XEmacs."
- (if (featurep 'xemacs)
-     (let ((ext-inv (extent-list
-                     nil (point-at-bol) (point-at-eol)
-                     'all-extents-closed-open 'invisible))
-           ext-inv-specs)
-       (dolist (ext ext-inv)
-         (when (extent-property ext 'invisible)
-           (add-to-list 'ext-inv-specs (list ext (extent-property
-						  ext 'invisible)))
-           (set-extent-property ext 'invisible nil)))
-       (indent-line-to column)
-       (dolist (ext-inv-spec ext-inv-specs)
-         (set-extent-property (car ext-inv-spec) 'invisible
-			      (cadr ext-inv-spec))))
-   (indent-line-to column)))
+  (if (featurep 'xemacs)
+      (let ((ext-inv (extent-list
+		      nil (point-at-bol) (point-at-eol)
+		      'all-extents-closed-open 'invisible))
+	    ext-inv-specs)
+	(dolist (ext ext-inv)
+	  (when (extent-property ext 'invisible)
+	    (add-to-list 'ext-inv-specs (list ext (extent-property
+						   ext 'invisible)))
+	    (set-extent-property ext 'invisible nil)))
+	(indent-line-to column)
+	(dolist (ext-inv-spec ext-inv-specs)
+	  (set-extent-property (car ext-inv-spec) 'invisible
+			       (cadr ext-inv-spec))))
+    (indent-line-to column)))
 
 (defun org-move-to-column (column &optional force buffer)
- (if (featurep 'xemacs)
-     (let ((ext-inv (extent-list
-                     nil (point-at-bol) (point-at-eol)
-                     'all-extents-closed-open 'invisible))
-           ext-inv-specs)
-       (dolist (ext ext-inv)
-         (when (extent-property ext 'invisible)
-           (add-to-list 'ext-inv-specs (list ext (extent-property ext
-								  'invisible)))
-           (set-extent-property ext 'invisible nil)))
-       (move-to-column column force buffer)
-       (dolist (ext-inv-spec ext-inv-specs)
-         (set-extent-property (car ext-inv-spec) 'invisible
-			      (cadr ext-inv-spec))))
-   (move-to-column column force)))
+  (if (featurep 'xemacs)
+      (let ((ext-inv (extent-list
+		      nil (point-at-bol) (point-at-eol)
+		      'all-extents-closed-open 'invisible))
+	    ext-inv-specs)
+	(dolist (ext ext-inv)
+	  (when (extent-property ext 'invisible)
+	    (add-to-list 'ext-inv-specs (list ext (extent-property ext
+								   'invisible)))
+	    (set-extent-property ext 'invisible nil)))
+	(move-to-column column force buffer)
+	(dolist (ext-inv-spec ext-inv-specs)
+	  (set-extent-property (car ext-inv-spec) 'invisible
+			       (cadr ext-inv-spec))))
+    (move-to-column column force)))
 
 (defun org-get-x-clipboard-compat (value)
   "Get the clipboard value on XEmacs or Emacs 21"
@@ -263,7 +263,7 @@ that can be added."
   (if (featurep 'xemacs)
       (add-text-properties 0 (length string) properties string)
     (apply 'propertize string properties)))
- 
+
 (provide 'org-compat)
 
 ;; arch-tag: a0a0579f-e68c-4bdf-9e55-93768b846bbe