summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Goaziou <mail@nicolasgoaziou.fr>2017-08-07 12:51:35 +0200
committerNicolas Goaziou <mail@nicolasgoaziou.fr>2017-08-07 12:51:35 +0200
commit6a9fc480978a9bfd28d972e399e493c79eddcbaa (patch)
treea5a16e810403b7d47d04a6fee0a06f6ea1c61375
parente8fe579a17b985ee0b66d9410c1887df5c0c7e3d (diff)
downloadorg-mode-6a9fc480978a9bfd28d972e399e493c79eddcbaa.tar.gz
Fix `org-sort-entries' loosing clock marker
* lisp/org.el (org-sort-entries): Properly restore clock marker, when appropriate. Reported-by: Samuel Wales <samologist@gmail.com> <http://lists.gnu.org/archive/html/emacs-orgmode/2017-08/msg00177.html>
-rw-r--r--lisp/org.el37
1 files changed, 20 insertions, 17 deletions
diff --git a/lisp/org.el b/lisp/org.el
index d289084..66626e0 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -9051,14 +9051,6 @@ A non-nil value for INTERACTIVE? is used to signal that this
function is being called interactively."
(interactive (list current-prefix-arg nil nil nil nil t))
(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)
- (buffer-substring-no-properties (line-beginning-position)
- (point)))))
start beg end stars re re2
txt what tmp)
;; Find beginning and end of region to sort
@@ -9140,9 +9132,20 @@ function is being called interactively."
(save-restriction
(narrow-to-region start end)
- (let ((dcst (downcase sorting-type))
+ (let ((restore-clock?
+ ;; The clock marker is lost when using `sort-subr'; let's
+ ;; mark the clock with a temporary
+ ;; `org-clock-marker-backup' text property.
+ (when (and (eq (org-clocking-buffer) (current-buffer))
+ (<= start (marker-position org-clock-marker))
+ (>= end (marker-position org-clock-marker)))
+ (org-with-silent-modifications
+ (put-text-property (1- org-clock-marker) org-clock-marker
+ 'org-clock-marker-backup t))
+ t))
+ (dcst (downcase sorting-type))
(case-fold-search nil)
- (now (current-time)))
+ (now (current-time)))
(sort-subr
(/= dcst sorting-type)
;; This function moves to the beginning character of the "record" to
@@ -9224,14 +9227,14 @@ function is being called interactively."
(concat "Function for comparing keys "
"(empty for default `sort-subr' predicate): ")
'allow-empty))))
- ((member dcst '(?p ?t ?s ?d ?c ?k)) '<)))))
+ ((member dcst '(?p ?t ?s ?d ?c ?k)) '<)))
+ (when restore-clock?
+ (move-marker org-clock-marker
+ (1+ (next-single-property-change
+ start 'org-clock-marker-backup)))
+ (remove-text-properties (1- org-clock-marker) org-clock-marker
+ '(org-clock-marker-backup t)))))
(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")))
;;; The orgstruct minor mode