emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Default directory in org-agenda-mode
@ 2011-01-12 18:29 niels giesen
  2011-01-12 19:12 ` Nick Dokos
  2011-01-12 19:23 ` Tassilo Horn
  0 siblings, 2 replies; 4+ messages in thread
From: niels giesen @ 2011-01-12 18:29 UTC (permalink / raw)
  To: emacs-orgmode

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.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Default directory in org-agenda-mode
  2011-01-12 18:29 Default directory in org-agenda-mode niels giesen
@ 2011-01-12 19:12 ` Nick Dokos
  2011-01-12 19:41   ` Niels Giesen
  2011-01-12 19:23 ` Tassilo Horn
  1 sibling, 1 reply; 4+ messages in thread
From: Nick Dokos @ 2011-01-12 19:12 UTC (permalink / raw)
  To: niels giesen; +Cc: nicholas.dokos, emacs-orgmode

niels giesen <niels.giesen@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

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Default directory in org-agenda-mode
  2011-01-12 18:29 Default directory in org-agenda-mode niels giesen
  2011-01-12 19:12 ` Nick Dokos
@ 2011-01-12 19:23 ` Tassilo Horn
  1 sibling, 0 replies; 4+ messages in thread
From: Tassilo Horn @ 2011-01-12 19:23 UTC (permalink / raw)
  To: emacs-orgmode

niels giesen <niels.giesen@gmail.com> writes:

Hi Niels,

> 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    

`default-directory-alist' is defined in dired-x and only used by that.
Confusing that it's not prefixed with dired...

For your purpose, I use that:

--8<---------------cut here---------------start------------->8---
(defun th-org-agenda-mode-init ()
  (setq default-directory (file-name-as-directory org-directory))
  (hl-line-mode 1))

(add-hook 'org-agenda-mode-hook 'th-org-agenda-mode-init)
--8<---------------cut here---------------end--------------->8---

Bye,
Tassilo

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Default directory in org-agenda-mode
  2011-01-12 19:12 ` Nick Dokos
@ 2011-01-12 19:41   ` Niels Giesen
  0 siblings, 0 replies; 4+ messages in thread
From: Niels Giesen @ 2011-01-12 19:41 UTC (permalink / raw)
  To: nicholas.dokos; +Cc: emacs-orgmode

Hi Nick,

Nick Dokos <nicholas.dokos@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/

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-01-12 19:42 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-01-12 18:29 Default directory in org-agenda-mode niels giesen
2011-01-12 19:12 ` Nick Dokos
2011-01-12 19:41   ` Niels Giesen
2011-01-12 19:23 ` Tassilo Horn

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).