From: Bernt Hansen <bernt@norang.ca>
To: Carsten Dominik <carsten.dominik@gmail.com>
Cc: emacs-orgmode@gnu.org
Subject: Re: Agenda todo filter order
Date: Fri, 06 May 2011 13:40:38 -0400 [thread overview]
Message-ID: <878vujiv6x.fsf@norang.ca> (raw)
In-Reply-To: <08D28BBE-80FF-4754-97BB-9674D2EB7CB5@gmail.com> (Carsten Dominik's message of "Fri, 6 May 2011 08:24:58 +0200")
Hi Carsten,
Thanks for the patch! This almost does what I want :)
This patch works for TODO agendas but not tags match agendas which is
what I am trying to use.
C-c a y returns the result I want
C-c a x should be identical and is not.
,----[ C-c a y ]
| Non Project TODO Tasks
| test: TODO Single Task
| test: TODO Task Three
| test: TODO Task Four
`----
,----[ C-c a x ]
| Non Project Tasks
| test: TODO Single Task
| test: TODO Subtask Four
| test: TODO Subtask Five
| test: TODO Subtask Six
| test: TODO Subtask Seven
| test: TODO Subtask Eight
| test: TODO Subtask Nine
| test: TODO Task Three
| test: TODO Task Four
`----
Below is the minimal emacs setup which I'm using to test:
Regards,
Bernt
~/bin/minimal-emacs
--8<---------------cut here---------------start------------->8---
#!/bin/sh
TESTEL=
TESTFILE=/tmp/test.el
if test -e $TESTFILE
then
TESTEL="-l /tmp/test.el"
fi
emacs -q -l ~/minimal.emacs $TESTEL $1
--8<---------------cut here---------------end--------------->8---
~/minimal.emacs
--8<---------------cut here---------------start------------->8---
(add-to-list 'load-path (expand-file-name "~/git/org-mode/lisp"))
(add-to-list 'auto-mode-alist '("\\.\\(org\\|org_archive\\|txt\\)$" . org-mode))
(require 'org-install)
(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-ca" 'org-agenda)
(global-set-key "\C-cb" 'org-iswitchb)
--8<---------------cut here---------------end--------------->8---
/tmp/test.el
--8<---------------cut here---------------start------------->8---
(setq org-agenda-files (list "/tmp/test.org"))
(setq org-agenda-todo-ignore-scheduled t)
(setq org-agenda-todo-ignore-deadlines t)
(setq org-agenda-tags-todo-honor-ignore-options t)
(setq org-agenda-custom-commands (quote (("x" "Non-Project Tasks" tags-todo "/!"
((org-agenda-overriding-header "Non Project Tasks")
(org-agenda-skip-function 'bh/skip-project-trees)))
("y" "Non-Project TODO Tasks" todo ""
((org-agenda-overriding-header "Non Project TODO Tasks")
(org-agenda-skip-function 'bh/skip-project-trees))))))
(defun bh/is-subproject-p ()
"Any task which is a subtask of another project"
(let ((is-subproject)
(is-a-task (member (nth 2 (org-heading-components)) org-todo-keywords-1)))
(save-excursion
(while (and (not is-subproject) (org-up-heading-safe))
(when (member (nth 2 (org-heading-components)) org-todo-keywords-1)
(setq is-subproject t))))
(and is-a-task is-subproject)))
(defun bh/is-project-p ()
"Any task with a todo keyword subtask and is not a subtask of another project
This does not support projects with subprojects"
(let ((has-subtask)
(subtree-end (save-excursion (org-end-of-subtree t)))
(is-subproject (bh/is-subproject-p))
(is-a-task (member (nth 2 (org-heading-components)) org-todo-keywords-1)))
(save-excursion
(forward-line 1)
(while (and (not has-subtask)
(< (point) subtree-end)
(re-search-forward "^\*+ " subtree-end t))
(when (member (org-get-todo-state) org-todo-keywords-1)
(setq has-subtask t))))
(and is-a-task has-subtask (not is-subproject))))
(defun bh/skip-project-trees ()
"Skip trees that are projects"
(let ((subtree-end (save-excursion (org-end-of-subtree t))))
(cond
((bh/is-project-p)
subtree-end)
(t
nil))))
--8<---------------cut here---------------end--------------->8---
/tmp/test.org
--8<---------------cut here---------------start------------->8---
* TODO Single Task
* TODO Project One
** TODO Subtask One
** TODO Subtask Two
** TODO Subtask Three
* TODO Project Two
DEADLINE: <2011-05-13 Fri>
** TODO Subtask Four
** TODO Subtask Five
** TODO Subtask Six
* TODO Project Three
SCHEDULED: <2011-05-08 Sun>
** TODO Subtask Seven
** TODO Subtask Eight
** TODO Subtask Nine
* Tasks
** TODO Task One
DEADLINE: <2011-05-20 Fri>
** TODO Task Two
SCHEDULED: <2011-05-13 Fri>
** TODO Task Three
** TODO Task Four
--8<---------------cut here---------------end--------------->8---
Carsten Dominik <carsten.dominik@gmail.com> writes:
> Hi Bernt,
>
> I don't see a compelling reason why these two skipping checks could not
> be exchanged:
> -----------------------------------------------------------------------------------
> diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el
> index 609edd4..a386a18 100644
> --- a/lisp/org-agenda.el
> +++ b/lisp/org-agenda.el
> @@ -4573,6 +4573,7 @@ the documentation of `org-diary'."
> (goto-char (point-min))
> (while (re-search-forward regexp nil t)
> (catch :skip
> + (org-agenda-skip)
> (save-match-data
> (beginning-of-line)
> (setq beg (point) end (save-excursion (outline-next-heading) (point)))
> @@ -4581,7 +4582,6 @@ the documentation of `org-diary'."
> (or org-agenda-todo-list-sublevels (org-end-of-subtree 'invisible))
> (throw :skip nil)))
> (goto-char beg)
> - (org-agenda-skip)
> (goto-char (match-beginning 1))
> (setq marker (org-agenda-new-marker (match-beginning 0))
> category (org-get-category)
> -----------------------------------------------------------------------------------
>
> Does anyone else see a reason why this could cause a problem?
>
> Bernt, maybe just try out this patch and report back?
>
> - Carsten
>
>
> On 20.4.2011, at 02:39, Bernt Hansen wrote:
>
>> <Sorry for the double post - hit C-c C-s in Gnus trying to set the
>> scheduled date and that sends the message... oops>
>>
>> Hi Carsten,
>>
>> I'm trying to tune my shiny new block agenda so it has a section that
>> displays non-project tasks without a scheduled date or deadline date in
>> the future.
>>
>> I have a non-standard skipping function that skips project trees which
>> I'm using in this agenda so what is left should only be non-project
>> tasks. My agenda with only this non-standard skipping function works
>> perfectly and gives me a list of only non-project tasks.
>>
>> I don't really want to see non-project tasks with a scheduled or
>> deadline date in the future. I added org-agenda-todo-ignore-scheduled
>> and org-agenda-todo-ignore-deadlines to 'future to this agenda view and
>> now I get extra project tasks in the list which is incorrect.
>>
>> It seems the org-agenda-todo-ignore-scheduled (and deadlines) vars are
>> applied to the list of todo tasks first -- so any projects that have a
>> scheduled or deadline date are skipped (but not the entire tree - just
>> the top-level project task) -- this makes all of the project subtasks
>> appear in my 'non-project' task list which is wrong.
>>
>> If the non-standard skipping function was applied first and then the
>> test for scheduled/deadline I think it work work the way I want. Is
>> this hard to change?
>>
>> Example:
>>
>> --8<---------------cut here---------------start------------->8---
>> * TODO Project task
>> SCHEDULED: <2011-04-12 Tue>
>> ** TODO Subtask 1
>> ** TODO Subtask 2
>> * TODO Non project task
>> * TODO Another non-project-task
>> DEADLINE: <2011-06-03 Fri>
>> * TODO Some future non-project task
>> SCHEDULED: <2011-06-18 Sat>
>> --8<---------------cut here---------------end--------------->8---
>>
>> My agenda view for non-project tasks should show only
>>
>> * TODO Non project task
>> * TODO Another non-project-task
>> * TODO Some future non-project task
>>
>> but with (setq org-agenda-todo-ignore-scheduled 'future) the top level
>> 'Project task' is skipped and 'Subtask 1' show up (and is considered not
>> a project since it has no subtasks)
>>
>> If this can't be changed for some technical reason I guess I can make my
>> skipping function more intelligent and look up the hierarchy as well to
>> make sure this task is not under some other project task but I didn't
>> think that would be necessary to accomplish what I want.
>>
>> Do you have any suggestions for how I get to my desired end result?
>>
>> Regards,
>> Bernt
next prev parent reply other threads:[~2011-05-06 17:40 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-04-20 0:33 Agenda todo filter order Bernt Hansen
2011-04-20 0:39 ` Bernt Hansen
2011-05-06 6:24 ` Carsten Dominik
2011-05-06 17:40 ` Bernt Hansen [this message]
2011-05-08 6:03 ` Carsten Dominik
2011-05-08 14:49 ` Bernt Hansen
2011-05-08 15:55 ` Bernt Hansen
2011-05-08 16:01 ` Bernt Hansen
[not found] ` <11B052C5-6EC9-4B0A-A0FA-631908E50007@gmail.com>
[not found] ` <87liyhf459.fsf@norang.ca>
2011-05-10 6:59 ` Carsten Dominik
2011-05-10 12:39 ` Bernt Hansen
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
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=878vujiv6x.fsf@norang.ca \
--to=bernt@norang.ca \
--cc=carsten.dominik@gmail.com \
--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 public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).