Browse Source

org.el (org-sort-entries): Bugfix: keep track of the clock marker when sorting entries.

* org.el (org-sort-entries): Bugfix: keep track of the clock
marker when sorting entries.  Enhance the docstring.
Bastien Guerry 13 years ago
parent
commit
7f0e7cb9b9
1 changed files with 16 additions and 2 deletions
  1. 16 2
      lisp/org.el

+ 16 - 2
lisp/org.el

@@ -8017,11 +8017,12 @@ a time stamp, by a property or by priority.
 
 
 The command prompts for the sorting type unless it has been given to the
 The command prompts for the sorting type unless it has been given to the
 function through the SORTING-TYPE argument, which needs to be a character,
 function through the SORTING-TYPE argument, which needs to be a character,
-\(?n ?N ?a ?A ?t ?T ?s ?S ?d ?D ?p ?P ?r ?R ?f ?F).  Here is the
+\(?n ?N ?a ?A ?t ?T ?s ?S ?d ?D ?p ?P ?o ?O ?r ?R ?f ?F).  Here is the
 precise meaning of each character:
 precise meaning of each character:
 
 
 n   Numerically, by converting the beginning of the entry/item to a number.
 n   Numerically, by converting the beginning of the entry/item to a number.
 a   Alphabetically, ignoring the TODO keyword and the priority, if any.
 a   Alphabetically, ignoring the TODO keyword and the priority, if any.
+o   By order of TODO keywords.
 t   By date/time, either the first active time stamp in the entry, or, if
 t   By date/time, either the first active time stamp in the entry, or, if
     none exist, by the first inactive one.
     none exist, by the first inactive one.
 s   By the scheduled date/time.
 s   By the scheduled date/time.
@@ -8041,6 +8042,13 @@ Comparing entries ignores case by default.  However, with an optional argument
 WITH-CASE, the sorting considers case as well."
 WITH-CASE, the sorting considers case as well."
   (interactive "P")
   (interactive "P")
   (let ((case-func (if with-case 'identity 'downcase))
   (let ((case-func (if with-case 'identity 'downcase))
+	(cmstr
+	 ;; The clock marker is lost when using `sort-subr', let's
+	 ;; store the clocking string.
+	 (when (equal (marker-buffer org-clock-marker) (current-buffer))
+	   (save-excursion
+	     (goto-char org-clock-marker)
+	     (looking-back "^.*") (match-string-no-properties 0))))
         start beg end stars re re2
         start beg end stars re re2
         txt what tmp)
         txt what tmp)
     ;; Find beginning and end of region to sort
     ;; Find beginning and end of region to sort
@@ -8097,7 +8105,7 @@ WITH-CASE, the sorting considers case as well."
       (message
       (message
        "Sort %s: [a]lpha  [n]umeric  [p]riority  p[r]operty  todo[o]rder  [f]unc
        "Sort %s: [a]lpha  [n]umeric  [p]riority  p[r]operty  todo[o]rder  [f]unc
                [t]ime [s]cheduled  [d]eadline  [c]reated
                [t]ime [s]cheduled  [d]eadline  [c]reated
-               A/N/T/S/D/C/P/O/F means reversed:"
+               A/N/P/R/O/F/T/S/D/C means reversed:"
        what)
        what)
       (setq sorting-type (read-char-exclusive))
       (setq sorting-type (read-char-exclusive))
 
 
@@ -8194,6 +8202,12 @@ WITH-CASE, the sorting considers case as well."
           ((= dcst ?f) compare-func)
           ((= dcst ?f) compare-func)
           ((member dcst '(?p ?t ?s ?d ?c)) '<)))))
           ((member dcst '(?p ?t ?s ?d ?c)) '<)))))
     (run-hooks 'org-after-sorting-entries-or-items-hook)
     (run-hooks 'org-after-sorting-entries-or-items-hook)
+    ;; Reset the clock marker if needed
+    (when cmstr
+      (save-excursion
+	(goto-char start)
+	(search-forward cmstr nil t)
+	(move-marker org-clock-marker (point))))
     (message "Sorting entries...done")))
     (message "Sorting entries...done")))
 
 
 (defun org-do-sort (table what &optional with-case sorting-type)
 (defun org-do-sort (table what &optional with-case sorting-type)