From: Carsten Dominik <carsten.dominik@gmail.com>
To: nicholas.dokos@hp.com
Cc: Bernt Hansen <bernt@norang.ca>, Matthew Lundin <mdl@imapmail.org>,
emacs org-mode mailing list <emacs-orgmode@gnu.org>,
Christopher DeMarco <demarco@maya.com>
Subject: Re: Re: Trouble setting variables in custom agenda command
Date: Thu, 4 Jun 2009 09:49:19 +0200 [thread overview]
Message-ID: <08FF8C08-A8CA-4DC9-B5C4-86240CA36B11@gmail.com> (raw)
In-Reply-To: <11277.1244069970@alphaville.usa.hp.com>
Hi,
wow, what a fantastic response to my request, thank
you all very much for contributing pieces to this puzzle.
There are several issues here.
1. Christopher did define his agenda command incorrectly (I know
this variable is very complex... ). You defined the command
as a block agenda where in principle several agenda lists can
be combined in a single view. You can see this by setting
org-agenda-custom-commands just to the single entry like Bernt
did in his setup, and then try to customize this variable.
A block agenda has *two* places where options can be stored.
One set of options for just the individual command, and one
set for for the block as a whole. Things like
org-agenda-start-with-column-view need to be set there, because
they are only used in that final cleanup that happens in the
second call to org-finalize-agenda, as Nick has described.
2. I had a bug for agenda series: As Nick has pointed out,
the agenda buffer is created and things like log-mode are set
up before the options are scoped with let. I have now fixed
this, the buffer creation gets the *global* agenda series
variables scoped as well. Note: NOT the local ones.
Christopher, after getting the latest release with my fix,
there are now two possibilities how you can write
your command, to achieve what you wanted.
1. As this is only a single block, you can reformulate this
as a single agenda command, not a series:
(setq org-agenda-custom-commands
'(("c" agenda nil
(
(org-agenda-overriding-columns-format "%75ITEM %7Effort{:}
%7CLOCKSUM{Total} %15TAGS %SCHEDULED")
(org-agenda-view-columns-initially t)
(org-agenda-start-with-log-mode t)
(org-agenda-ndays 1)
(org-agenda-skip-function
'(org-agenda-skip-entry-if 'notregexp "\\* TODO"))))))
2. Keep it as a block in an agenda series, but then move the
variables that are not specific for the block out:
(setq org-agenda-custom-commands
'(("c" "The Cycle"
((agenda
""
((org-agenda-ndays 1)
(org-agenda-skip-function
'(org-agenda-skip-entry-if 'notregexp "\\* TODO")))))
((org-agenda-overriding-columns-format "%75ITEM
%7Effort{:} %7CLOCKSUM{Total} %15TAGS %SCHEDULED")
(org-agenda-view-columns-initially t)
(org-agenda-start-with-log-mode t)))))
You may also move all the settings into the global options block
in this case.
I do realize only now that the reason why you chose a block agenda
may have been so that you could give the command a name, which
is not possible in single commands. I also realize now that
it was a mistake to not allow for a name also here.
But I am not sure if there is an easy way to fix this
without breaking legacy setups out there.
Thanks again to everyone.
If anyone has good proposals as to where to amend
the documentation in order to avoid this issue,
please let me know.
- Carsten
On Jun 4, 2009, at 12:59 AM, Nick Dokos wrote:
> Nick Dokos <nicholas.dokos@hp.com> wrote:
>
>> [Bernt, thanks very much for taking the time to do the set-up: it
>> makes
>> things so much easier!]
>>
>> I've made a little progress debugging this in the case of the
>> org-agenda-start-with-log-mode variable: the doc for it says
>>
>> ,----
>> | org-agenda-start-with-log-mode is a variable defined in `org-
>> agenda.el'.
>> | Its value is nil
>> |
>> | Documentation:
>> | The initial value of log-mode in a newly created agenda window.
>> |
>> | You can customize this variable.
>> `----
>>
>> Note that *initial*: it is only used once, in org-agenda-mode, to
>> initialize org-agenda-show-log. So setting it in the definition of
>> an
>> agenda custom command (effectively in a (let ...) form) will not
>> work:
>> org-agenda-mode has been called already by the time the custom
>> command
>> is executed, and the global value of org-agenda-start-with-log-mode
>> has
>> been used to set org-agenda-show-log. Any local binding later on
>> has no
>> effect at all.
>>
>> So the workaround for this variable is to set org-agenda-show-log
>> in the
>> definition of the custom command. The following works as far as the
>> log
>> goes:
>>
>> (setq org-agenda-custom-commands
>> '(("c" "The Cycle"
>> ((agenda ""
>> (
>> (org-agenda-overriding-columns-format "%75ITEM
>> %7Effort{:} %7CLOCKSUM{Total} %15TAGS %SCHEDULED") ;; no
>> (org-agenda-view-columns-initially t) ;; no
>> (org-agenda-show-log t) ;;yes
>> (org-agenda-ndays 1) ;; yes
>> (org-agenda-skip-function ;; yes
>> '(org-agenda-skip-entry-if 'notregexp "\\*
>> TODO")))))
>> nil nil)))
>>
>> I presume that a similar problem afflicts the column view variables,
>> but I have not gone there yet.
>>
>
> The problem with the column variables is similar but not quite the
> same:
> column view is set in org-finalize, and org-finalize is called
> *twice*:
>
> The custom commands are executed by org-run-agenda-series, which first
> calls org-agenda-list with the (let ...) settings from the
> definition of
> the custom command and which eventually calls org-finalize with the
> proper values of the column view variables. But once org-agenda-list
> returns to org-run-agenda-series, the latter continues on and calls
> org-finalize again with no (let ...) bindings. The last call wins and
> column view loses.
>
> Thanks,
> Nick
>
>
next prev parent reply other threads:[~2009-06-04 7:49 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-27 2:05 Trouble setting variables in custom agenda command Christopher DeMarco
2009-06-03 15:17 ` Carsten Dominik
2009-06-03 18:45 ` Matthew Lundin
2009-06-03 19:18 ` Sebastian Rose
2009-06-03 19:42 ` Eric S Fraga, Eric S Fraga
2009-06-03 19:10 ` Bernt Hansen
2009-06-03 22:26 ` Nick Dokos
2009-06-03 22:59 ` Nick Dokos
2009-06-04 7:49 ` Carsten Dominik [this message]
2009-06-04 15:06 ` Christopher DeMarco
2009-06-05 1:48 ` Matthew Lundin
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=08FF8C08-A8CA-4DC9-B5C4-86240CA36B11@gmail.com \
--to=carsten.dominik@gmail.com \
--cc=bernt@norang.ca \
--cc=demarco@maya.com \
--cc=emacs-orgmode@gnu.org \
--cc=mdl@imapmail.org \
--cc=nicholas.dokos@hp.com \
/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.