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

Reply via email to