From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Schulte Subject: Re: [PATCH] Common Lisp source blocks are now wrapped in a LET form which binds the symbol *default-pathname-defaults* to the directory in which the org file resides. Date: Wed, 01 Jun 2011 06:47:27 -0600 Message-ID: <87vcwpu3a8.fsf@gmail.com> References: Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([140.186.70.92]:34335) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QRkpm-0006gr-4i for emacs-orgmode@gnu.org; Wed, 01 Jun 2011 08:47:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QRkpj-0006q7-H4 for emacs-orgmode@gnu.org; Wed, 01 Jun 2011 08:47:38 -0400 Received: from mail-pv0-f169.google.com ([74.125.83.169]:48645) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QRkpi-0006pt-Rs for emacs-orgmode@gnu.org; Wed, 01 Jun 2011 08:47:35 -0400 Received: by pvc12 with SMTP id 12so3071395pvc.0 for ; Wed, 01 Jun 2011 05:47:33 -0700 (PDT) In-Reply-To: (Mark Cox's message of "Wed, 1 Jun 2011 15:17:59 +1000") 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-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Mark Cox Cc: emacs-orgmode@gnu.org Hi Mark, I agree that this would constitute more reasonable default behavior. I've implemented your suggestion with a simpler version of the patch you supplied which makes use of the `default-directory' variable. This version also uses the :dir header argument, which can be used to override (or unset) the local directory. #+begin_src lisp *default-pathname-defaults* #+end_src #+results: : #P/home/eschulte/path/to/org/file/ #+begin_src lisp :dir /tmp/ *default-pathname-defaults* #+end_src #+results: : #P/tmp/ #+begin_src lisp :dir *default-pathname-defaults* #+end_src #+results: : NIL Thanks for these patches. If you think you may continue to make contributions it may be worth starting the FSF copyright assignment now as it takes some time to complete and without it we can not apply patches >10 lines long. See http://orgmode.org/worg/org-contribute.html for more information on copyright assignment and contributing to Org-mode. Many Thanks -- Eric Mark Cox writes: > Hi, > > This may be contentious and break backward compatibility for some people. > > Currently, relative pathnames in Common Lisp source blocks are > meaningless as the *default-pathname-defaults* symbol is set to > whatever the value is when SLIME was invoked. This behaviour is > contrary to the shell source block processor (I haven't checked the > others). > > This is in /tmp/example1/test.org > #+begin_src sh > pwd > #+end_src > > #+results: > : #P"/tmp/example1/" > > This is in /tmp/example2/test.org > #+begin_src sh > pwd > #+end_src > > #+results: > : #P"/tmp/example2/" > > The attached patch brings this expected behaviour (well from my point > of view) to lisp source blocks. Given the behaviour of Emacs commands > like DIRED and COMPILE, I think the patch makes things more > consistent. > > I couldn't figure out how the sh block processor determines the path > to the org file so I hacked together something that works using some > of the Org hooks. > > Thanks > Mark > > lisp/ob-lisp.el: Added new variable ORG-BABEL-LISP-CURRENT-BUFFER > which is used to store a reference to the currently being processed org file. > This variable is setq'd in the hooks for > ORG-BABEL-PRE-TANGLE-HOOK, ORG-CTRL-C-CTRL-C-HOOK and > ORG-EXPORT-FIRST-HOOK. > > lisp/ob-lisp.el (org-babel-expand-body:lisp): The code sent to SLIME > is now wrapped in a LET block which binds > COMMON-LISP:*DEFAULT-PATHNAME-DEFAULTS* to the directory where the > currently being processed org file resides. > > diff --git a/lisp/ob-lisp.el b/lisp/ob-lisp.el > index a875d55..db06182 100644 > --- a/lisp/ob-lisp.el > +++ b/lisp/ob-lisp.el > @@ -40,6 +40,14 @@ > > (defvar org-babel-default-header-args:lisp '()) > (defvar org-babel-header-arg-names:lisp '(package)) > +(defvar org-babel-lisp-current-buffer nil) > + > +(let ((fn (lambda () > + (setq org-babel-lisp-current-buffer (current-buffer)) > + nil))) > + (dolist (hook '(org-babel-pre-tangle-hook org-ctrl-c-ctrl-c-hook > org-export-first-hook)) > + (add-hook hook fn))) > + > > (defun org-babel-expand-body:lisp (body params) > "Expand BODY according to PARAMS, return the expanded body." > @@ -73,8 +81,10 @@ > (read (org-bable-lisp-vector-to-list (cadr result))) > (error (cadr result))))) > (slime-eval `(swank:eval-and-grab-output > - ,(format "(progn %s)" (buffer-substring-no-properties > - (point-min) (point-max)))) > + ,(format "(let > ((common-lisp:*default-pathname-defaults* #P%S)) %s)" > + (file-name-directory (buffer-file-name > org-babel-lisp-current-buffer)) > + (buffer-substring-no-properties > + (point-min) (point-max)))) > (cdr (assoc :package params))))) > (org-babel-pick-name (cdr (assoc :colname-names params)) > (cdr (assoc :colnames params))) > -- Eric Schulte http://cs.unm.edu/~eschulte/