[Orgmode] Default directory in org-agenda-mode

2011-01-12 Thread niels giesen
Hi all,

I would like `default-directory' in `org-agenda-mode' to be the
value of `org-directory'. This is because I tend to start my
working day by opening the Agenda view, and then decide to open
some org file (which I all have inside `org-directory' and that
may or may not have items present in the specific Agenda view). 

To this end I tried doing the following:

#+begin_src emacs-lisp
  (add-to-list
   'default-directory-alist
   `(org-agenda-mode
 ,org-directory))
#+end_src

But this does not work. Any ideas?

Regards, Niels.

___
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode


Re: [Orgmode] Default directory in org-agenda-mode

2011-01-12 Thread Nick Dokos
niels giesen niels.gie...@gmail.com wrote:

 Hi all,
 
 I would like `default-directory' in `org-agenda-mode' to be the
 value of `org-directory'. This is because I tend to start my
 working day by opening the Agenda view, and then decide to open
 some org file (which I all have inside `org-directory' and that
 may or may not have items present in the specific Agenda view). 
 
 To this end I tried doing the following:
 
 #+begin_src emacs-lisp
   (add-to-list
'default-directory-alist
`(org-agenda-mode
  ,org-directory))
 #+end_src
 
 But this does not work. Any ideas?
 

AFAIK, there is no variable default-directory-alist - at least, my
emacs does not know anything about it.

What you want is to change the default directory of the agenda buffer.
When the agenda buffer is created, org-agenda-mode is called to set
the major mode. Most major modes (including org-agenda-mode) define
hooks: a hook is a variable that holds a list of functions. The mode
calls each function in the hook when it is enabled. So the trick
is to add a function to the appropriate hook. Typically something
like this will suffice:

   (add-hook 'org-agenda-mode-hook (function (lambda () (setq default-directory 
org-directory

The only problem is where to add this line of code: if you add it to .emacs
or some other initialization file, you might get an error because
org-agenda-mode-hook is not defined yet. One way to get out of the
chicken/egg situation is to load org-agenda before you add the function
to the hook. Another way is to eval the above on demand when org
agenda is loaded:

   (eval-after-load org-agenda
 (quote
   (progn 
  ...
  (add-hook 'org-agenda-mode-hook (function (lambda () (setq 
default-directory org-directory)))

(the progn is there in case you have to do more than one thing when
loading the agenda: if you only have one thing, just remove the
ellipsis).  This can safely be put into an initialization file like
.emacs.

You should also read the doc for add-hook (C-h f add-hook RET) and for
whatever hook variable you are modifying (e.g. C-h v
org-agenda-mode-hook RET: there are some fine points in add-hook that
I have not gone into above - otoh, org-agenda-mode-hook is bog-standard.

HTH,
Nick



___
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode


Re: [Orgmode] Default directory in org-agenda-mode

2011-01-12 Thread Niels Giesen
Hi Nick,

Nick Dokos nicholas.do...@hp.com writes:

[...]

 AFAIK, there is no variable default-directory-alist - at least, my
 emacs does not know anything about it.

Ah, yes, I see it's provided by dired-x, which does ship with emacs, but
is not loaded by default.

Its documentation says

#+begin_example
Alist of major modes and their opinion on `default-directory'.
This is given as a Lisp expression to evaluate.  A resulting value of
nil is ignored in favor of `default-directory'.
#+end_example

Looking some more into the code, it looks like it is not meant to be a
generic replacement for `default-directory', although its name would
suggest that (to me at least).

[...]

(eval-after-load org-agenda
  (quote
(progn 
   ...
   (add-hook 'org-agenda-mode-hook (function (lambda () (setq 
 default-directory org-directory)))

That is a great solution, thanks!

[...]


-- 
http://pft.github.com/

___
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode