Преглед изворни кода

ox-icalendar: Prevent duplicates when writing agenda view

* lisp/ox-icalendar.el (org-icalendar-export-current-agenda): Prevent
  duplicates when writing agenda view.

Reported-by: Nicolae Cindea <ncindea@gmail.com>
http://lists.gnu.org/archive/html/emacs-orgmode/2017-08/msg00116.html
Nicolas Goaziou пре 8 година
родитељ
комит
e67f0f29de
1 измењених фајлова са 7 додато и 5 уклоњено
  1. 7 5
      lisp/ox-icalendar.el

+ 7 - 5
lisp/ox-icalendar.el

@@ -879,22 +879,24 @@ The file is stored under the name chosen in
   "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-export-babel-evaluate)	; Don't evaluate Babel block.
+  (let* ((org-export-babel-evaluate)	;don't evaluate Babel blocks
 	 (contents
 	 (contents
 	  (org-export-string-as
 	  (org-export-string-as
 	   (with-output-to-string
 	   (with-output-to-string
 	     (save-excursion
 	     (save-excursion
-	       (let ((p (point-min)))
+	       (let ((p (point-min))
+		     (seen nil))	;prevent duplicates
 		 (while (setq p (next-single-property-change p 'org-hd-marker))
 		 (while (setq p (next-single-property-change p 'org-hd-marker))
 		   (let ((m (get-text-property p 'org-hd-marker)))
 		   (let ((m (get-text-property p 'org-hd-marker)))
-		     (when m
+		     (when (and m (not (memq m seen)))
+		       (push m seen)
 		       (with-current-buffer (marker-buffer m)
 		       (with-current-buffer (marker-buffer m)
 			 (org-with-wide-buffer
 			 (org-with-wide-buffer
 			  (goto-char (marker-position m))
 			  (goto-char (marker-position m))
 			  (princ
 			  (princ
 			   (org-element-normalize-string
 			   (org-element-normalize-string
-			    (buffer-substring
-			     (point) (progn (outline-next-heading) (point)))))))))
+			    (buffer-substring (point)
+					      (org-entry-end-position))))))))
 		   (forward-line)))))
 		   (forward-line)))))
 	   'icalendar t
 	   'icalendar t
 	   '(:ascii-charset utf-8 :ascii-links-to-notes nil
 	   '(:ascii-charset utf-8 :ascii-links-to-notes nil