On Fri, Jul 22, 2016 at 1:54 PM, Michael Welle wrote: > Hello, > > Matt Price writes: > > > On Fri, Jul 22, 2016 at 11:38 AM, Matt Price wrote: > > > >> > >> (2) Is it possible to set the default value for interactive file > selection > >> to something OTHER than the currect directory of the current buffer? > >> Something like: > >> > >> (let > >> ((base-dir "./Assignment1/")) > >> (org-attach--attach)) > >> > >> I'd like to set different base directories when attaching files to > >> subtrees of different first-level trees in a buffer. I guess I would set > >> the value for the base directory with a property. > >> > > > > OK, I made some progress on this: > > > > (let ((default-directory (concat default-directory "Assignment1/") )) > > (call-interactively 'org-attach-attach)) > > > > However, I'd like to do something like: > > > > (let > > ((parent-basedir nil)) > > (save-excursion > > (outline-up-heading) > > (setq parent-basedir (org-get-entry "BASEDIR"))) > > (let > > ((default-directory (concat default-directory parent-basedir) )) > > (call-interactively 'org-attach-attach ))) > > > > > > > > But there are errors I don't understand in this code. Any hints? Thanks > > again! > well, I guess the errors are too secret to share them with us? The first > I can see is that org-get-entry doesn't need parameters. And the overall > structure looks strange, but that could be just me ;). > > :-( No, they're not too secret, I just have a terrible head cold and can hardly think, so didn't think to include it! The overall structure feels strange to me -- I just want a way of retaining a temprary variable value in a let that also includes a temporary excursion to the parent node. More on that shortly. > The reason for the current behaviour is the interactive form of > org-attach-attach. Ad hoc I have no idea how to change that. What I > would try is to (cd your-wanted-dir) before calling org-attach-attach. > Maybe a bit of cleanup if useful after calling the function. > So it turns out that, like most interactive functions, org-attach-attach uses the built-in read-file-name macro, which relies on the value of "default-directory", which is buffer-local. By calling org-attach-attach from inside a let statement, I can get the behaviour I want: (let ((default-directory (concat default-directory "Galileo/"))) (org-attach-attach)) The problem now is that I need to access a property from the parent node in order ot dynamically set the appropriate value for default-directory, and I'm struggling to do that. Here is a minimal test file: * Galileo :ASSIGNMENT: :PROPERTIES: :BASEDIR: Galileo :END: ** testing #+BEGIN_SRC emacs-lisp (let ((parent-basedir nil)) (save-excursion (outline-up-heading) (setq parent-basedir (org-entry-get (point) "BASEDIR")) (message parent-basedir)) (let ((default-directory (concat default-directory parent-basedir) )) (call-interactively 'org-attach-attach ))) #+END_SRC This seems to work but so far I'm having issues actually opening the attachment. This may be due to the way that org-attach constructs links to attachments (I prefer not to copy, as my disk space is limited). Anyway, thanks for your help; this seems to be getting closer, despite what feels like substantial mental impairment due to increased cranial pressure (ouch!) Matt > Regards > hmw > > >