From: Kyle Meyer <kyle@kyleam.com>
To: Arun Persaud <apersaud@lbl.gov>
Cc: emacs-orgmode <emacs-orgmode@gnu.org>
Subject: Re: feature request for empty blocks in customized agenda
Date: Sat, 13 Jun 2015 19:00:58 -0400 [thread overview]
Message-ID: <871thfnrh1.fsf@kmlap.domain.org> (raw)
In-Reply-To: <557C8E8D.9020400@lbl.gov> (Arun Persaud's message of "Sat, 13 Jun 2015 13:11:57 -0700")
Hi,
Arun Persaud <apersaud@lbl.gov> wrote:
> Hi
>
> I just started using a customized agenda with many blocks and some of my
> blocks are often empty. However, org-mode still insert the header and
> the separator between blocks. Is there a way to skip empty blocks
> completely?
Not that I'm aware of.
> I had a quick look at org-agenda.el and it seems that it directly
> inserts text, e.g. the header, into the buffer, before it even knows how
> many items it added. I guess one could remember point at the beginning,
> count the items inserted and if that's 0, delete backwards to the saved
> point?
> My elisp knowledge is probably not good enough to add this though and it
> also seems one would have to add it at different location
> (org-agenda-list, org-agenda-todo, etc).
>
> I also checked org-agenda-compact-blocks, but that removes the separator
> from all blocks, which is not what I want.
>
> Any chance to get something like this added?
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
--
Kyle
next prev parent reply other threads:[~2015-06-13 23:01 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-13 20:11 feature request for empty blocks in customized agenda Arun Persaud
2015-06-13 23:00 ` Kyle Meyer [this message]
2015-06-13 23:57 ` Arun Persaud
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=871thfnrh1.fsf@kmlap.domain.org \
--to=kyle@kyleam.com \
--cc=apersaud@lbl.gov \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.