From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Welle Subject: Re: two basic elisp questions Date: Sat, 23 Jul 2016 07:24:20 +0200 Message-ID: <4lbb6dxi1o.ln2@news.c0t0d0s0.de> References: Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:56356) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bQpRG-000571-Oo for emacs-orgmode@gnu.org; Sat, 23 Jul 2016 01:25:27 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bQpRC-0005tk-Ge for emacs-orgmode@gnu.org; Sat, 23 Jul 2016 01:25:25 -0400 Received: from plane.gmane.org ([80.91.229.3]:52806) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bQpRC-0005tP-5x for emacs-orgmode@gnu.org; Sat, 23 Jul 2016 01:25:22 -0400 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1bQpRA-0003RM-Q0 for emacs-orgmode@gnu.org; Sat, 23 Jul 2016 07:25:20 +0200 Received: from dslb-088-066-015-139.088.066.pools.vodafone-ip.de ([88.66.15.139]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sat, 23 Jul 2016 07:25:20 +0200 Received: from mwe012008 by dslb-088-066-015-139.088.066.pools.vodafone-ip.de with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sat, 23 Jul 2016 07:25:20 +0200 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: emacs-orgmode@gnu.org 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. > 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 ;). Regards hmw