From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rainer M Krug Subject: Re: Capture template and elisp expression Date: Fri, 07 Jan 2011 09:22:28 +0100 Message-ID: <4D26CD44.1070604@gmail.com> References: <4D25B0BE.3040408@gmail.com> <23766.1294352789@gamaville.americas.hpqcorp.net> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Return-path: Received: from [140.186.70.92] (port=46418 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Pb7aj-0006Ez-Mo for emacs-orgmode@gnu.org; Fri, 07 Jan 2011 03:22:35 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Pb7ai-0001GB-3Y for emacs-orgmode@gnu.org; Fri, 07 Jan 2011 03:22:33 -0500 Received: from mail-ww0-f49.google.com ([74.125.82.49]:55288) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Pb7ah-0001G5-Rs for emacs-orgmode@gnu.org; Fri, 07 Jan 2011 03:22:32 -0500 Received: by wwb17 with SMTP id 17so17726239wwb.30 for ; Fri, 07 Jan 2011 00:22:31 -0800 (PST) In-Reply-To: List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Carsten Dominik Cc: nicholas.dokos@hp.com, emacs-orgmode On 01/06/2011 11:44 PM, Carsten Dominik wrote: > > On Jan 6, 2011, at 11:26 PM, Nick Dokos wrote: > >> Rainer M Krug wrote: >> >>> >>> Hi >>> >>> I want to use a Capture Template to record changes to files under >>> version control. Everything works as expected, but I would like to >>> include the current revision in the template. >>> >>> Therefore I tried the following: >>> >>> * %T %? at %a by Rainer M Krug, email: Rainer@krugs.de >>> %(vc-working-revision buffer-file-name) >>> >>> for the template, but I get an error: >>> >>> **** <2011-01-06 Thu 13:06> at >>> [[file:~/Documents/Projects/BiocontrolAndAlienDynamics/nonSpatialAcacia/trunc/R/nsa.org::*Finalise][Finalise]] >>> >>> by Rainer M Krug, email: Rainer@krugs.de %![Error: (wrong-type-argument >>> stringp nil)] >>> >>> Any idea how I could get the revision of the org file from which the >>> Capture has been initiated (here >>> ~/Documents/Projects/BiocontrolAndAlienDynamics/nonSpatialAcacia/trunc/R/nsa.org >>> >>> )? >>> >> >> There are a few problems: the evaluation of the sexp happens in the >> capture buffer where buffer-file-name returns nil. Even if you could >> get the file name, vc-working-revision would return nil on a file that >> is not VC-registered and the template would barf. >> >> Those are easy problems to solve but there is another one that seems >> insurmountable (with current code): my original thought was to use the >> %a escape to pass the link to a lisp function, extract the file name >> from it[fn:1] and run vc-working-revision on it (with appropriate >> safeguards >> to catch non-VC files), something like this: >> >> "* %T %? at %a by Rainer M Krug, email: Rainer@krugs.de >> %(rk-custom-function-to-get-vc-revision \"%a\")" >> >> However, this fails because at the time that %(sexp) constructs are >> expanded, simple %a etc. constructs have not been expanded yet, so what >> the function above gets is a literal "%a": the subtitution sequence is >> >> ;; %[] Insert contents of a file. >> >> ... >> >> ;; %() embedded elisp >> >> ... >> >> ;; Simple %-escapes >> >> (see lisp/org-capture.el, lines 1181-1229 or so). >> >> Moreover, this sequence was different and was changed deliberately (see >> the thread http://thread.gmane.org/gmane.emacs.orgmode/27649), so if it >> is changed back, Sebastion Rose will not be happy :-) >> >> So it seems there is no way to pass values from the capture context to a >> lisp function in the capture template, but maybe I'm missing something. >> >> Thanks, >> Nick >> >> Footnotes: >> [fn:1] Is there an easier way to get the filename of the file I was >> visiting when I initiated the capture? If not, should there be? Perhaps >> a %f escape? > > Hi Nick, Hi Carsten, > > you can use > > (buffer-file-name (org-capture-get :original-buffer)) This works perfectly - thanks a million. For the record: I use %(vc-working-revision (buffer-file-name (org-capture-get :original-buffer))) to get the vc revision number. But now I thought - OK - now I can add the state of the file, returned by vc-state (this is working i a nother document in the org-document). So I added: %(vc-state (buffer-file-name (org-capture-get :original-buffer))) but I get the error Capture abort: (wrong-type-argument char-or-string-p edited) It seems, that vc-state (which should be "up-to-date" or "edited") does return a different type then vc-working-revision ? Can I convert vc-state, so that it works? > > and we could certainly introduce a special escape for it if helpful. as this is a basic info, I think it would be useful to have a special escape for this. > > If it is easier, we can also put the filename itself into the property > list, > and any other information we like. This should happen in the function > org-capture, > close to the location where the buffer is stored, so near this line: > > (org-capture-put :original-buffer orig-buf :annotation annotation > :initial initial) > > org-capture uses this property list precisely so that it is simple > to add any information required. In addition to above, it should also be in the properties, oncluding with other information, like e.g. path. > > Note that, after the template has been filled in, it is better > to access information in the property list with > > > (org-capture-get PROPERTY 'local) > > to avoid conflicts with other ongoing capture processes. Does this affect me for my template, or does it concern the implementation of the buffer name as a property (above)? Because if it does affect my template, I should ask for clarification, because I don't understand what you mean here. > > Hope this helps. This definitely helps, Thanks a lot, Cheers, Rainer > > - Carsten > > > > > > >> >> _______________________________________________ >> 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 > -- Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Natural Sciences Building Office Suite 2039 Stellenbosch University Main Campus, Merriman Avenue Stellenbosch South Africa Tel: +33 - (0)9 53 10 27 44 Cell: +27 - (0)8 39 47 90 42 Fax (SA): +27 - (0)8 65 16 27 82 Fax (D) : +49 - (0)3 21 21 25 22 44 Fax (FR): +33 - (0)9 58 10 27 44 email: Rainer@krugs.de Skype: RMkrug