| 
					
				 | 
			
			
				@@ -2533,6 +2533,202 @@ http://article.gmane.org/gmane.emacs.orgmode/21459/" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    (org-test-with-temp-text "xx abc<point> xx" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      (org-in-regexp "abc" nil t)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+(ert-deftest test-org/sort-entries () 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  "Test `org-sort-entries'." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ;; Sort alphabetically. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (should 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   (equal "\n* abc\n* def\n* xyz\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (org-test-with-temp-text "\n* def\n* xyz\n* abc\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (org-sort-entries nil ?a) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (buffer-string)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (should 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   (equal "\n* xyz\n* def\n* abc\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (org-test-with-temp-text "\n* def\n* xyz\n* abc\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (org-sort-entries nil ?A) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (buffer-string)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ;; Sort numerically. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (should 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   (equal "\n* 1\n* 2\n* 10\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (org-test-with-temp-text "\n* 10\n* 1\n* 2\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (org-sort-entries nil ?n) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (buffer-string)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (should 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   (equal "\n* 10\n* 2\n* 1\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (org-test-with-temp-text "\n* 10\n* 1\n* 2\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (org-sort-entries nil ?N) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (buffer-string)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ;; Sort by custom function. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (should 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   (equal "\n* b\n* aa\n* ccc\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (org-test-with-temp-text "\n* ccc\n* b\n* aa\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (org-sort-entries nil ?f 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			      (lambda () 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				(length (buffer-substring (point-at-bol) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							  (point-at-eol)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			      #'<) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (buffer-string)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (should 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   (equal "\n* ccc\n* aa\n* b\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (org-test-with-temp-text "\n* ccc\n* b\n* aa\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (org-sort-entries nil ?F 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			      (lambda () 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				(length (buffer-substring (point-at-bol) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							  (point-at-eol)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			      #'<) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (buffer-string)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ;; Sort by TODO keyword. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (should 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   (equal "\n* TODO h1\n* TODO h3\n* DONE h2\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (org-test-with-temp-text 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      "\n* TODO h1\n* DONE h2\n* TODO h3\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (org-sort-entries nil ?o) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (buffer-string)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (should 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   (equal "\n* DONE h2\n* TODO h1\n* TODO h3\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (org-test-with-temp-text 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      "\n* TODO h1\n* DONE h2\n* TODO h3\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (org-sort-entries nil ?O) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (buffer-string)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ;; Sort by priority. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (should 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   (equal "\n* [#A] h2\n* [#B] h3\n* [#C] h1\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (org-test-with-temp-text 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      "\n* [#C] h1\n* [#A] h2\n* [#B] h3\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (org-sort-entries nil ?p) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (buffer-string)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (should 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   (equal "\n* [#C] h1\n* [#B] h3\n* [#A] h2\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (org-test-with-temp-text 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      "\n* [#C] h1\n* [#A] h2\n* [#B] h3\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (org-sort-entries nil ?P) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (buffer-string)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ;; Sort by creation time. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (should 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   (equal " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* h3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  [2017-05-08 Mon] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* h2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  [2017-05-09 Tue] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* h1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  [2018-05-09 Wed] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (org-test-with-temp-text 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* h1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  [2018-05-09 Wed] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* h2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  [2017-05-09 Tue] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* h3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  [2017-05-08 Mon] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (org-sort-entries nil ?c) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (buffer-string)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ;; Sort by scheduled date. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (should 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   (equal " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h4 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+SCHEDULED: <2017-05-06 Sat> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+SCHEDULED: <2017-05-08 Mon> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+DEADLINE: <2017-05-09 Tue> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+DEADLINE: <2017-05-07 Sun> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (org-test-with-temp-text 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+DEADLINE: <2017-05-09 Tue> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+DEADLINE: <2017-05-07 Sun> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+SCHEDULED: <2017-05-08 Mon> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h4 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+SCHEDULED: <2017-05-06 Sat> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (org-sort-entries nil ?s) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (buffer-string)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ;; Sort by deadline date. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (should 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   (equal " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+DEADLINE: <2017-05-07 Sun> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+DEADLINE: <2017-05-09 Tue> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+SCHEDULED: <2017-05-08 Mon> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h4 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+SCHEDULED: <2017-05-06 Sat> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (org-test-with-temp-text 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+DEADLINE: <2017-05-09 Tue> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+DEADLINE: <2017-05-07 Sun> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+SCHEDULED: <2017-05-08 Mon> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h4 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+SCHEDULED: <2017-05-06 Sat> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (org-sort-entries nil ?d) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (buffer-string)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ;; Sort by any date/time 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (should 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   (equal " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h4 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+SCHEDULED: <2017-05-06 Sat> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+DEADLINE: <2017-05-07 Sun> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+SCHEDULED: <2017-05-08 Mon> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+DEADLINE: <2017-05-09 Tue> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (org-test-with-temp-text 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+DEADLINE: <2017-05-09 Tue> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+DEADLINE: <2017-05-07 Sun> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+SCHEDULED: <2017-05-08 Mon> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* TODO h4 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+SCHEDULED: <2017-05-06 Sat> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (org-sort-entries nil ?t) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (buffer-string)))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ;; Sort by clocking time. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  (should 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   (equal " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* clocked h2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  :LOGBOOK: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  CLOCK: [2017-05-09 Tue 00:15]--[2017-05-09 Tue 00:22] =>  0:07 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  CLOCK: [2017-05-09 Tue 00:00]--[2017-05-09 Tue 00:10] =>  0:10 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  :END: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* clocked h1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  :LOGBOOK: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  CLOCK: [2017-05-09 Tue 00:15]--[2017-05-09 Tue 00:22] =>  0:07 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  CLOCK: [2017-05-09 Tue 00:00]--[2017-05-09 Tue 00:12] =>  0:12 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  :END: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	  (org-test-with-temp-text 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	      " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* clocked h1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  :LOGBOOK: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  CLOCK: [2017-05-09 Tue 00:15]--[2017-05-09 Tue 00:22] =>  0:07 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  CLOCK: [2017-05-09 Tue 00:00]--[2017-05-09 Tue 00:12] =>  0:12 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  :END: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+* clocked h2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  :LOGBOOK: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  CLOCK: [2017-05-09 Tue 00:15]--[2017-05-09 Tue 00:22] =>  0:07 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  CLOCK: [2017-05-09 Tue 00:00]--[2017-05-09 Tue 00:10] =>  0:10 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  :END: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (org-sort-entries nil ?k) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    (buffer-string))))) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ;;; Navigation 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |