emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [Orgmode] Overview of agenda files


From: Carsten Dominik
Subject: Re: [Orgmode] Overview of agenda files
Date: Fri, 26 Sep 2008 18:10:13 +0200

Hi Vladi,

On Sep 24, 2008, at 1:28 PM, Vladi Solutka wrote:

Hi!

First: Thanks for orgmode! Didn't know that it would be possible to
love my emacs even more :-))

After I'd watched Dominiks Google Talk about org-mode (thanks for
that, very interesting), I started to organize my stuff in a more
"information centric" way. It looks like this is a very good approach
especially when handling small, but long running projects.

All I currently miss is the possibility to have a top overview of my
projects, listing the count of the different keywords (since each
project has its own file, this would be in fact an overview of my
agenda files). This would give me a quick overview of the status of
each project and would be a perfect starting point when
checking/digging into my projects, especially if the counts and
filenames would be links ...

Example:

|-------+------+------+-------|
| File  | TODO | WAIT | LATER |
|-------+------+------+-------|
| File1 |    5 |    2 |    10 |
| File2 |    2 |    2 |       |
| File3 |   12 |    0 |     0 |
|-------+------+------+-------|


Did anyone something like that before? Or is this maybe already
possible with orgmode?

There is nothing built-in to make something like this, but using dynamic blocks and the entry mapper, it can be implemented compactly.

Load the following code, in .emacs or so....

(defun org-dblock-write:count-todo-states (params)
 (let ((states (or (plist-get params :states) '("TODO")))
        table file entry tbl)
   ;; Map over all entries
   (apply 'org-map-entries 'my-count-todo-states-internal
           nil 'agenda params)
   (setq table (nreverse table))
   ;; Insert headline
   (insert "|File|" (mapconcat 'identity states "|") "|\n|-")
   ;; Insert the counts
   (while (setq entry (pop table))
     (setq file (car entry) tbl (cdr entry))
     (insert "\n|[[file:" file "][" (file-name-nondirectory file) "]]|"
              (mapconcat (lambda (x) (number-to-string
                                      (or (cdr (assoc x tbl)) 0)))
                         states "|")
              "|"))
   ;; Align the table
   (org-table-align)))

(defun my-count-todo-states-internal ()
"Count TODO keywords per file, into dynamically scoped variable `table'."
 (let ((todo (org-get-todo-state))
        (bfn (buffer-file-name))
        a a1)
   (if (not (assoc bfn table))
       ;; Add entry for this new file name
        (push (list bfn) table))
   (setq a (assoc bfn table))
   (if (not (assoc todo (cdr a)))
       ;; Add entry for this new TODO keyword
        (setcdr a (cons (cons todo 0) (cdr a))))
   (setq a1 (assoc todo (cdr a)))
   (setcdr a1 (1+ (cdr a1)))))


Then put the following two lines into an Org-mode buffer

#+BEGIN: count-todo-states :states ("TODO" "WAIT" "LATER")
#+END: count-todo-states

Each time you press `C-c C-c' on te BEGIN line, the table you are looking for will be updated between these two lines. I have made the file names links,
I am not sure what you mean by making links of the counts.....

HTH

- Carsten






reply via email to

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