emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [O] org-agenda-log-mode doesn't list past scheduled items if org-age


From: Carsten Dominik
Subject: Re: [O] org-agenda-log-mode doesn't list past scheduled items if org-agenda-skip-scheduled-if-done is t
Date: Mon, 2 May 2011 11:20:52 +0200

Hi Antoine,

the agenda does list scheduled items anyway, so I do not see why
this information should be repeated in the logging items.

- Carsten

On Apr 5, 2011, at 12:30 PM, Antoine Levitt wrote:

> I guess my use case is pretty common: I use org-agenda to keep track of
> appointments, and use org-agenda-skip-scheduled-if-done to avoid
> displaying past appointments. If I want to review what I did last week
> for instance, I'd like the SCHEDULED dates to appear in
> org-agenda-log-mode, not the dates where I closed the TODO entry. But
> org-agenda-log-mode-items only has support for closed, clock and state
> changes. A nice feature would be a 'scheduled option, which would
> display done entries that have a SCHEDULED tag.
> 
> I tried to implement it, but got stuck at date handling (apparently, the
> problem is that SCHEDULED items use <> syntax, while CLOSED uses
> []. Not sure why.) Could someone take a look at it?
> 
> I'm attaching a very preliminary attempt to implement it, in case anyone
> is interested. It's buggy because of the date issues.
> 
> diff --git a/lisp/org/org-agenda.el b/lisp/org/org-agenda.el
> index 9adc180..89c9dde 100644
> --- a/lisp/org/org-agenda.el
> +++ b/lisp/org/org-agenda.el
> @@ -4733,6 +4733,7 @@ be skipped."
>               (list
>                (if (memq 'closed items) (concat "\\<" org-closed-string))
>                (if (memq 'clock items) (concat "\\<" org-clock-string))
> +              (if (memq 'scheduled items)  (concat "\\<" 
> org-scheduled-string))
>                (if (memq 'state items) "- State \"\\([a-zA-Z0-9]+\\)\".*?"))))
>        (parts-re (if parts (mapconcat 'identity parts "\\|")
>                    (error "`org-agenda-log-mode-items' is empty")))
> @@ -4744,10 +4745,10 @@ be skipped."
>                   (format-time-string
>                    (car org-time-stamp-formats)
>                    (apply 'encode-time  ; DATE bound by calendar
> -                         (list 0 0 0 (nth 1 date) (car date) (nth 2 date))))
> +                         (list 0 0 0 (nth 1 date) (car date) (nth 2 date))))
>                   1 11))))
>        (org-agenda-search-headline-for-time nil)
> -      marker hdmarker priority category tags closedp statep clockp state
> +      marker hdmarker priority category tags closedp statep clockp 
> scheduledp state
>        ee txt extra timestr rest clocked)
>     (goto-char (point-min))
>     (while (re-search-forward regexp nil t)
> @@ -4755,8 +4756,9 @@ be skipped."
>       (org-agenda-skip)
>       (setq marker (org-agenda-new-marker (match-beginning 0))
>             closedp (equal (match-string 1) org-closed-string)
> +           scheduledp (equal (match-string 1) org-scheduled-string)
>             statep (equal (string-to-char (match-string 1)) ?-)
> -           clockp (not (or closedp statep))
> +           clockp (not (or closedp scheduledp statep))
>             state (and statep (match-string 2))
>             category (org-get-category (match-beginning 0))
>             timestr (buffer-substring (match-beginning 0) (point-at-eol))
> @@ -4765,7 +4767,7 @@ be skipped."
>         ;; substring should only run to end of time stamp
>         (setq rest (substring timestr (match-end 0))
>               timestr (substring timestr 0 (match-end 0)))
> -       (if (and (not closedp) (not statep)
> +       (if (and (not closedp) (not statep) (not scheduledp)
>                  (string-match 
> "\\([0-9]\\{1,2\\}:[0-9]\\{2\\}\\)\\].*?\\([0-9]\\{1,2\\}:[0-9]\\{2\\}\\)" 
> rest))
>             (progn (setq timestr (concat (substring timestr 0 -1)
>                                          "-" (match-string 1 rest) "]"))
> @@ -4780,6 +4782,9 @@ be skipped."
>                (setq extra (match-string 1))))
>          (clockp
>           (and (looking-at ".*\n[ \t]*-[ \t]+\\([^-\n \t].*?\\)[ \t]*$")
> +              (setq extra (match-string 1))))
> +        (scheduledp
> +         (and (looking-at ".*\n[ \t]*-[ \t]+\\([^-\n \t].*?\\)[ \t]*$")
>                (setq extra (match-string 1)))))
>         (if (not (re-search-backward "^\\*+ " nil t))
>             (setq txt org-agenda-no-heading-message)
> @@ -4788,6 +4793,8 @@ be skipped."
>                 tags (org-get-tags-at))
>           (looking-at "\\*+[ \t]+\\([^\r\n]+\\)")
>           (setq txt (match-string 1))
> +         (if (and scheduledp (not (string-match (regexp-opt 
> org-done-keywords-for-agenda) txt)))
> +             (throw :skip nil))
>           (when extra
>             (if (string-match "\\([ \t]+\\)\\(:[^ \n\t]*?:\\)[ \t]*$" txt)
>                 (setq txt (concat (substring txt 0 (match-beginning 1))
> @@ -4796,8 +4803,9 @@ be skipped."
>           (setq txt (org-format-agenda-item
>                      (cond
>                       (closedp "Closed:    ")
> -                         (statep (concat "State:     (" state ")"))
> -                         (t (concat "Clocked:   (" clocked  ")")))
> +                     (scheduledp "Scheduled:    ")
> +                     (statep (concat "State:     (" state ")"))
> +                     (t (concat "Clocked:   (" clocked  ")")))
>                      txt category tags timestr)))
>         (setq priority 100000)
>         (org-add-props txt props

- Carsten






reply via email to

[Prev in Thread] Current Thread [Next in Thread]