summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Goaziou <mail@nicolasgoaziou.fr>2015-06-02 21:56:50 +0200
committerNicolas Goaziou <mail@nicolasgoaziou.fr>2015-06-02 21:56:50 +0200
commitf1ee487218da00962eb8b67d1f5ec1f54a5a04db (patch)
tree1258b80bc7a18c90b704e94fc3701a95903abc74
parent80aa84f135fe595a9470365fca46e0b75fd25d3d (diff)
downloadorg-mode-f1ee487218da00962eb8b67d1f5ec1f54a5a04db.tar.gz
org-colview: Handle user-defined inheritance in agenda colview
* lisp/org-colview.el (org-agenda-columns): Use `org-entry-get' instead of `org-entry-properties' to handle inheritance for user-provided properties.
-rw-r--r--lisp/org-colview.el109
1 files changed, 61 insertions, 48 deletions
diff --git a/lisp/org-colview.el b/lisp/org-colview.el
index ddfd6ef..c84b0eb 100644
--- a/lisp/org-colview.el
+++ b/lisp/org-colview.el
@@ -1357,60 +1357,73 @@ and tailing newline characters."
(org-columns-remove-overlays)
(move-marker org-columns-begin-marker (point))
(let ((org-columns-time (time-to-number-of-days (current-time)))
- cache maxwidths m p a d fmt)
- (cond
- ((and (boundp 'org-agenda-overriding-columns-format)
- org-agenda-overriding-columns-format)
- (setq fmt org-agenda-overriding-columns-format))
- ((setq m (org-get-at-bol 'org-hd-marker))
- (setq fmt (or (org-entry-get m "COLUMNS" t)
- (with-current-buffer (marker-buffer m)
- org-columns-default-format))))
- ((and (boundp 'org-columns-current-fmt)
- (local-variable-p 'org-columns-current-fmt)
- org-columns-current-fmt)
- (setq fmt org-columns-current-fmt))
- ((setq m (next-single-property-change (point-min) 'org-hd-marker))
- (setq m (get-text-property m 'org-hd-marker))
- (setq fmt (or (org-entry-get m "COLUMNS" t)
- (with-current-buffer (marker-buffer m)
- org-columns-default-format)))))
- (setq fmt (or fmt org-columns-default-format))
+ (fmt
+ (cond
+ ((org-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))))
(org-set-local 'org-columns-current-fmt fmt)
(org-columns-compile-format fmt)
(when org-agenda-columns-compute-summary-properties
(org-agenda-colview-compute org-columns-current-fmt-compiled))
(save-excursion
- ;; Get and cache the properties
+ ;; Collect properties for each headline in current view.
(goto-char (point-min))
- (while (not (eobp))
- (when (setq m (or (org-get-at-bol 'org-hd-marker)
- (org-get-at-bol 'org-marker)))
- (setq p (org-entry-properties m))
-
- (when (or (not (setq a (assoc-string org-effort-property p t)))
- (not (string-match "\\S-" (or (cdr a) ""))))
- ;; OK, the property is not defined. Use appointment duration?
- (when (and org-agenda-columns-add-appointments-to-effort-sum
- (setq d (get-text-property (point) 'duration)))
- (setq d (org-minutes-to-clocksum-string d))
- (put-text-property 0 (length d) 'face 'org-warning d)
- (push (cons org-effort-property d) p)))
- (push (cons (org-current-line) p) cache))
- (beginning-of-line 2))
- (when cache
- (setq maxwidths (org-columns-get-autowidth-alist fmt cache))
- (org-set-local 'org-columns-current-maxwidths maxwidths)
- (org-columns-display-here-title)
- (when (org-set-local 'org-columns-flyspell-was-active
- (org-bound-and-true-p flyspell-mode))
- (flyspell-mode 0))
- (mapc (lambda (x)
- (org-goto-line (car x))
- (org-columns-display-here (cdr x)))
- cache)
- (when org-agenda-columns-show-summaries
- (org-agenda-colview-summarize cache))))))
+ (let (cache)
+ (let ((names (mapcar #'car org-columns-current-fmt-compiled)) m)
+ (while (not (eobp))
+ (when (setq m (or (org-get-at-bol 'org-hd-marker)
+ (org-get-at-bol 'org-marker)))
+ (push
+ (cons
+ (line-beginning-position)
+ (org-with-point-at m
+ (mapcar
+ (lambda (name)
+ (let ((value (org-entry-get (point) name 'selective t)))
+ (cons
+ name
+ (if (and org-agenda-columns-add-appointments-to-effort-sum
+ (not value)
+ (eq (compare-strings name nil nil
+ org-effort-property nil nil
+ t)
+ t)
+ ;; Effort property is not defined. Try
+ ;; to use appointment duration.
+ (get-text-property (point) 'duration))
+ (org-propertize
+ (org-minutes-to-clocksum-string
+ (get-text-property (point) 'duration))
+ 'face 'org-warning)
+ value))))
+ names)))
+ cache))
+ (forward-line)))
+ (when cache
+ (org-set-local 'org-columns-current-maxwidths
+ (org-columns-get-autowidth-alist fmt cache))
+ (org-columns-display-here-title)
+ (when (org-set-local 'org-columns-flyspell-was-active
+ (org-bound-and-true-p flyspell-mode))
+ (flyspell-mode 0))
+ (dolist (x cache)
+ (goto-char (car x))
+ (org-columns-display-here (cdr x)))
+ (when org-agenda-columns-show-summaries
+ (org-agenda-colview-summarize cache)))))))
(defun org-agenda-colview-summarize (cache)
"Summarize the summarizable columns in column view in the agenda.