On Sat, Jul 23, 2016 at 1:24 AM, Michael Welle wrote: > Hello, > > Matt Price writes: > > > 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! > don't worry and get well soon ;). > > > > 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)) > That makes sense. > > > > 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 > I use Emacs 25 and there outline-up-heading uses a mandatory > parameter. I changed that to (outline-up-heading 1). > > > > 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). > I haven't used attachments before, so I'm not sure what to expect. But if > I use the code from above, I get the attachment related properties, as you > said. Next I do M-x org-attach o and I get prompted for the attachment, > which isn't right I think. The reason is IMO, that org-attach-open > searches the attachment below the default-directory, not in the changed > path. So, if the default-directory is /tmp, it searches /tmp/data/$ID, > not /tmp/Galileo/date/$ID. Thinking about it that makes sense, somehow ;). > > So it looks like the are several more places where 'cheating' is needed > to make this work. > Yes. Looks like I wold need to rewrite org-attach-attach and bind to my new function; that feels hard so I've sort of given up on it for now. > > > > Anyway, thanks for your help; this seems to be getting closer, despite > what > > feels like substantial mental impairment due to increased cranial > pressure > > (ouch!) > I can feel your pain. Last week I had something that could have been an > inflammation of the middle ear or something like that. For two nights it > felt like my ear and the associated part of the head will explode. One > don't need that too often ;). > > FINALLY getting better! thank you! sorry ofr the longdelay. If I don get around to rewriting org-attach-attach I'll report back.