diff options
Diffstat (limited to 'lisp/org-colview.el')
-rw-r--r-- | lisp/org-colview.el | 72 |
1 files changed, 37 insertions, 35 deletions
diff --git a/lisp/org-colview.el b/lisp/org-colview.el index d33f505..3e53ccb 100644 --- a/lisp/org-colview.el +++ b/lisp/org-colview.el @@ -239,17 +239,15 @@ display, as a string." (org-columns-compact-links value))) (value))) -(defun org-columns--collect-values (&optional agenda) +(defun org-columns--collect-values (&optional compiled-fmt) "Collect values for columns on the current line. -When optional argument AGENDA is non-nil, assume the value is -meant for the agenda, i.e., caller is `org-agenda-columns'. - Return a list of triplets (SPEC VALUE DISPLAYED) suitable for `org-columns--display-here'. This function assumes `org-columns-current-fmt-compiled' is -initialized." +initialized is set in the current buffer. However, it is +possible to override it with optional argument COMPILED-FMT." (let ((summaries (get-text-property (point) 'org-summaries))) (mapcar (lambda (spec) @@ -257,19 +255,18 @@ initialized." (`(,p . ,_) (let* ((v (or (cdr (assoc spec summaries)) (org-entry-get (point) p 'selective t) - (and agenda + (and compiled-fmt ;assume `org-agenda-columns' ;; Effort property is not defined. Try ;; to use appointment duration. org-agenda-columns-add-appointments-to-effort-sum (string= p (upcase org-effort-property)) (get-text-property (point) 'duration) - (propertize - (org-minutes-to-clocksum-string - (get-text-property (point) 'duration)) - 'face 'org-warning)) + (propertize (org-minutes-to-clocksum-string + (get-text-property (point) 'duration)) + 'face 'org-warning)) ""))) (list spec v (org-columns--displayed-value spec v)))))) - org-columns-current-fmt-compiled))) + (or compiled-fmt org-columns-current-fmt-compiled)))) (defun org-columns--set-widths (cache) "Compute the maximum column widths from the format and CACHE. @@ -1068,12 +1065,12 @@ This function updates `org-columns-current-fmt-compiled'." A time is expressed as HH:MM, HH:MM:SS, or with units defined in `org-effort-durations'. Plain numbers are considered as hours." (cond - ((string-match "\\([0-9]+\\):\\([0-9]+\\)\\(?::\\([0-9]+\\)\\)?" s) + ((string-match-p org-columns--duration-re s) + (* 60 (org-duration-string-to-minutes s))) + ((string-match "\\`\\([0-9]+\\):\\([0-9]+\\)\\(?::\\([0-9]+\\)\\)?\\'" s) (+ (* 3600 (string-to-number (match-string 1 s))) (* 60 (string-to-number (match-string 2 s))) (if (match-end 3) (string-to-number (match-string 3 s)) 0))) - ((string-match-p org-columns--duration-re s) - (* 60 (org-duration-string-to-minutes s))) (t (* 3600 (string-to-number s))))) (defun org-columns--age-to-seconds (s) @@ -1507,26 +1504,26 @@ PARAMS is a property list of parameters: (interactive) (org-columns-remove-overlays) (move-marker org-columns-begin-marker (point)) - (let ((org-columns--time (float-time (current-time))) - (fmt - (cond - ((bound-and-true-p org-agenda-overriding-columns-format)) - ((let ((m (org-get-at-bol 'org-hd-marker))) - (and m - (or (org-entry-get m "COLUMNS" t) - (with-current-buffer (marker-buffer m) - org-columns-default-format))))) - ((and (local-variable-p 'org-columns-current-fmt) - org-columns-current-fmt)) - ((let ((m (next-single-property-change (point-min) 'org-hd-marker))) - (and m - (let ((m (get-text-property m 'org-hd-marker))) - (or (org-entry-get m "COLUMNS" t) - (with-current-buffer (marker-buffer m) - org-columns-default-format)))))) - (t org-columns-default-format)))) - (setq-local org-columns-current-fmt fmt) - (org-columns-compile-format fmt) + (let* ((org-columns--time (float-time (current-time))) + (fmt + (cond + ((bound-and-true-p org-agenda-overriding-columns-format)) + ((let ((m (org-get-at-bol 'org-hd-marker))) + (and m + (or (org-entry-get m "COLUMNS" t) + (with-current-buffer (marker-buffer m) + org-columns-default-format))))) + ((and (local-variable-p 'org-columns-current-fmt) + org-columns-current-fmt)) + ((let ((m (next-single-property-change (point-min) 'org-hd-marker))) + (and m + (let ((m (get-text-property m 'org-hd-marker))) + (or (org-entry-get m "COLUMNS" t) + (with-current-buffer (marker-buffer m) + org-columns-default-format)))))) + (t org-columns-default-format))) + (compiled-fmt (org-columns-compile-format fmt))) + (setq org-columns-current-fmt fmt) (when org-agenda-columns-compute-summary-properties (org-agenda-colview-compute org-columns-current-fmt-compiled)) (save-excursion @@ -1538,8 +1535,13 @@ PARAMS is a property list of parameters: (org-get-at-bol 'org-marker)))) (when m (push (cons (line-beginning-position) + ;; `org-columns-current-fmt-compiled' is + ;; initialized but only set locally to the + ;; agenda buffer. Since current buffer is + ;; changing, we need to force the original + ;; compiled-fmt there. (org-with-point-at m - (org-columns--collect-values 'agenda))) + (org-columns--collect-values compiled-fmt))) cache))) (forward-line)) (when cache |