[Top][All Lists]

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

Re: [O] feature request for empty blocks in customized agenda

From: Arun Persaud
Subject: Re: [O] feature request for empty blocks in customized agenda
Date: Sat, 13 Jun 2015 16:57:30 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0


> I'm not sure if someone will find this feature useful enough to
> incorporate.  However, even if it doesn't get added, I think you can get
> the behavior you want using org-agenda-finalize-hook.  Hopefully the
> snippet below can be a useful starting point.
> #+begin_src elisp
>   (defun org-agenda-delete-empty-blocks ()
>     "Remove empty agenda blocks.
>   A block is identified as empty if there are fewer than 2
>   non-empty lines in the block (excluding the line with
>   `org-agenda-block-separator' characters)."
>     (when org-agenda-compact-blocks
>       (user-error "Cannot delete empty compact blocks"))
>     (setq buffer-read-only nil)
>     (save-excursion
>       (goto-char (point-min))
>       (let* ((blank-line-re "^\\s-*$")
>              (content-line-count (if (looking-at-p blank-line-re) 0 1))
>              (start-pos (point))
>              (block-re (format "%c\\{10,\\}" org-agenda-block-separator)))
>         (while (and (not (eobp)) (forward-line))
>           (cond
>            ((looking-at-p block-re)
>             (when (< content-line-count 2)
>               (delete-region start-pos (1+ (point-at-bol))))
>             (setq start-pos (point))
>             (forward-line)
>             (setq content-line-count (if (looking-at-p blank-line-re) 0 1)))
>            ((not (looking-at-p blank-line-re))
>             (setq content-line-count (1+ content-line-count)))))
>         (when (< content-line-count 2)
>           (delete-region start-pos (point-max)))
>         (goto-char (point-min))
>         ;; The above strategy can leave a separator line at the beginning
>         ;; of the buffer.
>         (when (looking-at-p block-re)
>           (delete-region (point) (1+ (point-at-eol))))))
>     (setq buffer-read-only t))
>   (add-hook 'org-agenda-finalize-hook #'org-agenda-delete-empty-blocks)
> #+end_src

a starting point seems to be an understatement ;) this seems to work
exactly as intended. Thanks!

Completely blanked out the use of any hooks, although it seems the
obvious thing to do ;)

Thanks again


reply via email to

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