Browse Source

Merge branch 'master' of orgmode.org:org-mode

Bastien Guerry 12 years ago
parent
commit
1094a5eab7
1 changed files with 26 additions and 28 deletions
  1. 26 28
      lisp/ox-icalendar.el

+ 26 - 28
lisp/ox-icalendar.el

@@ -891,39 +891,37 @@ The file is stored under the name chosen in
 	  `(apply 'org-icalendar--combine-files nil ',files)))
 	  `(apply 'org-icalendar--combine-files nil ',files)))
     (apply 'org-icalendar--combine-files nil (org-agenda-files t))))
     (apply 'org-icalendar--combine-files nil (org-agenda-files t))))
 
 
-(defun org-agenda-collect-markers ()
-  "Collect the markers pointing to entries in the agenda buffer."
-  (let (m markers)
-    (save-excursion
-      (goto-char (point-min))
-      (while (not (eobp))
-	(when (setq m (or (org-get-at-bol 'org-hd-marker)
-			  (org-get-at-bol 'org-marker)))
-	  (push m markers))
-	(beginning-of-line 2)))
-    (nreverse markers)))
-
-(defun org-create-marker-find-array (marker-list)
-  "Create an alist of files names with all marker positions in that file."
-  (let (f tbl m a p)
-    (while (setq m (pop marker-list))
-      (setq p (marker-position m)
-	    f (buffer-file-name
-	       (or (buffer-base-buffer (marker-buffer m))
-		   (marker-buffer m))))
-      (if (setq a (assoc f tbl))
-	  (push (marker-position m) (cdr a))
-	(push (list f p) tbl)))
-    (mapcar (lambda (x) (setcdr x (sort (copy-sequence (cdr x)) '<)) x)
-	    tbl)))
-
 (defun org-icalendar-export-current-agenda (file)
 (defun org-icalendar-export-current-agenda (file)
   "Export current agenda view to an iCalendar FILE.
   "Export current agenda view to an iCalendar FILE.
 This function assumes major mode for current buffer is
 This function assumes major mode for current buffer is
 `org-agenda-mode'."
 `org-agenda-mode'."
-  (let ((org-icalendar-combined-agenda-file file))
+  (let ((org-icalendar-combined-agenda-file file)
+	(marker-list
+	 ;; Collect the markers pointing to entries in the current
+	 ;; agenda buffer.
+	 (let (markers)
+	   (save-excursion
+	     (goto-char (point-min))
+	     (while (not (eobp))
+	       (let ((m (or (org-get-at-bol 'org-hd-marker)
+			    (org-get-at-bol 'org-marker))))
+		 (and m (push m markers)))
+	       (beginning-of-line 2)))
+	   (nreverse markers))))
     (apply 'org-icalendar--combine-files
     (apply 'org-icalendar--combine-files
-	   (org-create-marker-find-array (org-agenda-collect-markers))
+	   ;; Build restriction alist.
+	   (let (restriction)
+	     ;; Sort markers in each association within RESTRICTION.
+	     (mapcar (lambda (x) (setcdr x (sort (copy-sequence (cdr x)) '<)) x)
+		     (dolist (m marker-list restriction)
+		       (let* ((pos (marker-position m))
+			      (file (buffer-file-name
+				     (org-base-buffer (marker-buffer m))))
+			      (file-markers (assoc file restriction)))
+			 ;; Add POS in FILE association if one exists
+			 ;; or create a new association for FILE.
+			 (if file-markers (push pos (cdr file-markers))
+			   (push (list file pos) restriction))))))
 	   (org-agenda-files nil 'ifmode))))
 	   (org-agenda-files nil 'ifmode))))
 
 
 (defun org-icalendar--combine-files (restriction &rest files)
 (defun org-icalendar--combine-files (restriction &rest files)