As preface, I'm aware that I may have gone too far down the rabbit
hole. I'm inserting many time grid lines (one per half hour)
into my agenda views so I have a visual sense of my free / busy
time. But I want time grid lines that have already passed to
disappear, freeing up screen real estate for later lines.
This was pretty easy. I customized `org-agenda-time-grid' to give
me a line at every half-hour interval. Then I set
`org-agenda-before-sorting-filter-function' to return nil for time
grid lines where the "time-of-day" text property is in the past.
In case that description isn't clear, I'm using (apologies for
Gmail formatting):
(defun my:org-agenda-before-sorting-filter-function
(org-agenda-item)
(unless (and
(string= (nth 1 org-agenda-time-grid)
(get-text-property 0 'txt org-agenda-item))
(< (get-text-property 0 'time-of-day
org-agenda-item)
(string-to-number (format-time-string "%H%M"))))
org-agenda-item))
As an unanticipated side effect, my function also throws out time
grid lines when I view tomorrow (and other days) in the agenda
view.
Is there an additional check I can throw into my function to only
filter if the "day" of the time grid line is today? I tried the
obvious (get-text-property 0 'day org-agenda-item) but it seems
that the "day" text property isn't put into the item until /after/
the filter-function gets a chance to process it.
Alternatively, if my attempted solution is brain-damaged please
let me know a better way to manage the time grid lines.
--
Trevor Murphy GnuPG Key: 0xCB06EAAF