Re: [O] ob-clojure.el alternative using nrepl

2013-10-04 Thread Oleh
Thanks, Eric.

Your changes work.

Still, I think that it's needed to require ob-tangle.
It defines the variable `org-babel-tangle-lang-exts' that ob-clojure
wants to modify right at loading. So it's impossible to load ob-clojure
unless ob-tangle was already loaded.

Just to clarify, this code will work:

(setq org-babel-tangle-lang-exts nil)
(require 'ob-clojure)

whereas

(require 'ob-clojure)

will not.

regards,
Oleh


  Alright, I just pushed this up.

 Thanks for testing, I haven't used Clojure in a couple of years now
 (since happily moving on to Common Lisp as my lisp of choice).

 Thanks to Oleh for the patch!

 Cheers,

 --
 Eric Schulte
 https://cs.unm.edu/~eschulte
 PGP: 0x614CA05D



Re: [O] ob-clojure.el alternative using nrepl

2013-10-04 Thread Eric Schulte
Oleh ohwoeo...@gmail.com writes:

 Thanks, Eric.

 Your changes work.


Great, thanks for the patch.


 Still, I think that it's needed to require ob-tangle.
 It defines the variable `org-babel-tangle-lang-exts' that ob-clojure
 wants to modify right at loading. So it's impossible to load ob-clojure
 unless ob-tangle was already loaded.

 Just to clarify, this code will work:

 (setq org-babel-tangle-lang-exts nil)
 (require 'ob-clojure)

 whereas

 (require 'ob-clojure)

 will not.


I think this must be particular to your system.  The (defvar
org-babel-tangle-lang-exts) form in ob-clojure.el should take care of
this problem, and indeed does for me.

$ emacs --batch --eval (progn (add-to-list 'load-path 
\~/src/org-mode/lisp\) (require 'org) (require 'ob-clojure) (message 
\success\))
success

Cheers,


 regards,
 Oleh


  Alright, I just pushed this up.

 Thanks for testing, I haven't used Clojure in a couple of years now
 (since happily moving on to Common Lisp as my lisp of choice).

 Thanks to Oleh for the patch!

 Cheers,

 --
 Eric Schulte
 https://cs.unm.edu/~eschulte
 PGP: 0x614CA05D


-- 
Eric Schulte
https://cs.unm.edu/~eschulte
PGP: 0x614CA05D



[O] ob-clojure.el alternative using nrepl

2013-10-03 Thread Oleh
Hi all,

Current method of clojure evaluation is through slime.
I couldn't get it to work, when I tried long ago.
So I attach one that uses nrepl.
Switching between the two should be as easy as using

(require 'ob-clojure)
or
(require 'ob-clojure-nrepl).

regards,
Oleh


Re: [O] ob-clojure.el alternative using nrepl

2013-10-03 Thread Oleh
I guess that I forgot the attachment.

Oleh


On Thu, Oct 3, 2013 at 5:45 PM, Oleh ohwoeo...@gmail.com wrote:

 Hi all,

 Current method of clojure evaluation is through slime.
 I couldn't get it to work, when I tried long ago.
 So I attach one that uses nrepl.
 Switching between the two should be as easy as using

 (require 'ob-clojure)
 or
 (require 'ob-clojure-nrepl).

 regards,
 Oleh



0001-ob-clojure-nrepl.el-Added-nrepl-alternative-to-ob-cl.patch
Description: Binary data


Re: [O] ob-clojure.el alternative using nrepl

2013-10-03 Thread Bastien
Hi Oleh,

Oleh ohwoeo...@gmail.com writes:

 Current method of clojure evaluation is through slime.
 I couldn't get it to work, when I tried long ago.
 So I attach one that uses nrepl.
 Switching between the two should be as easy as using

 (require 'ob-clojure)
 or
 (require 'ob-clojure-nrepl).

Nice, something needed.  I guess we should rather have an option for
this in ob-clojure.el, letting users decide whether they want to use
nrepl.el or slime, a sensible default being to use nrepl.el.

What do you think?

-- 
 Bastien



Re: [O] ob-clojure.el alternative using nrepl

2013-10-03 Thread Oleh
Here's an updated patch.
I use defalias, is that OK?

Oleh


On Thu, Oct 3, 2013 at 6:23 PM, Bastien b...@gnu.org wrote:

 Hi Oleh,

 Oleh ohwoeo...@gmail.com writes:

  Should I rather put the code in ob-clojure.el with something like
  (defcustom ob-clojure-method nrepl)?

 Yes, I think it's better.  Maybe

 (defcustom ob-clojure-repl 'nrepl)

 Let's discuss this on the list so that others can chime in.

 Thanks for bringing this up!

 --
  Bastien



0001-ob-clojure.el-switch-to-nREPL-as-the-main-method-of-.patch
Description: Binary data


Re: [O] ob-clojure.el alternative using nrepl

2013-10-03 Thread Eric Schulte
Thanks for this update.

Oleh ohwoeo...@gmail.com writes:

 Here's an updated patch.
 I use defalias, is that OK?


Two changes.

1. instead of customization through a defalias, use defcustom and a
   variable which determines which function (eval-slime or eval-nrepl)
   is called.

2. ob-*.el files should not require ob-tangle.

If you prefer not to make these changes I can apply your patch, and then
make the required changes myself over-top.

Best,


 Oleh


 On Thu, Oct 3, 2013 at 6:23 PM, Bastien b...@gnu.org wrote:

 Hi Oleh,

 Oleh ohwoeo...@gmail.com writes:

  Should I rather put the code in ob-clojure.el with something like
  (defcustom ob-clojure-method nrepl)?

 Yes, I think it's better.  Maybe

 (defcustom ob-clojure-repl 'nrepl)

 Let's discuss this on the list so that others can chime in.

 Thanks for bringing this up!

 --
  Bastien


 From ab5c9a8844b4103e40cd4c135f297a7089cd7cdf Mon Sep 17 00:00:00 2001
 From: Oleh Krehel ohwoeo...@gmail.com
 Date: Thu, 3 Oct 2013 18:23:16 +0200
 Subject: [PATCH] ob-clojure.el: switch to nREPL as the main method of
  evaluating Clojure.

 Get the old behavior with:
 (defalias 'org-babel-execute:clojure 'org-babel--execute-clojure-slime)
 ---
  lisp/ob-clojure.el | 34 ++
  1 file changed, 26 insertions(+), 8 deletions(-)

 diff --git a/lisp/ob-clojure.el b/lisp/ob-clojure.el
 index bc2bbc0..3b82f0a 100644
 --- a/lisp/ob-clojure.el
 +++ b/lisp/ob-clojure.el
 @@ -2,8 +2,8 @@
  
  ;; Copyright (C) 2009-2013 Free Software Foundation, Inc.
  
 -;; Author: Joel Boehland
 -;;   Eric Schulte
 +;; Author: Joel Boehland, Eric Schulte, Oleh Krehel
 +;;
  ;; Keywords: literate programming, reproducible research
  ;; Homepage: http://orgmode.org
  
 @@ -24,20 +24,26 @@
  
  ;;; Commentary:
  
 -;;; support for evaluating clojure code, relies on slime for all eval
 +;;; support for evaluating clojure code, relies either on slime or
 +;;; on nrepl for all eval
  
  ;;; Requirements:
  
  ;;; - clojure (at least 1.2.0)
  ;;; - clojure-mode
 -;;; - slime
 +;;; - either slime or nrepl
  
 -;;; By far, the best way to install these components is by following
 -;;; the directions as set out by Phil Hagelberg (Technomancy) on the
 -;;; web page: http://technomancy.us/126
 +;;; For SLIME-way, the best way to install these components is by
 +;;; following the directions as set out by Phil Hagelberg (Technomancy)
 +;;; on the web page: http://technomancy.us/126
 +
 +;;; For nREPL-way:
 +;;; get clojure is with https://github.com/technomancy/leiningen
 +;;; get nrepl from MELPA (clojure-mode is a dependency).
  
  ;;; Code:
  (require 'ob)
 +(require 'ob-tangle)
  
  (declare-function slime-eval ext:slime (sexp optional package))
  
 @@ -72,7 +78,7 @@
  (format (clojure.core/with-out-str %s) body))
 (t body
  
 -(defun org-babel-execute:clojure (body params)
 +(defun org-babel--execute-clojure-slime (body params)
Execute a block of Clojure code with Babel.
(require 'slime)
(with-temp-buffer
 @@ -88,6 +94,18 @@
   ,(buffer-substring-no-properties (point-min) (point-max)))
(cdr (assoc :package params))
  
 +(defun org-babel--execute-clojure-nrepl (body params)
 +  Execute a block of Clojure code with Babel and nREPL.
 +  (require 'nrepl)
 +  (if (nrepl-current-connection-buffer)
 +  (let* ((result (nrepl-eval body))
 + (s (plist-get result :stdout))
 + (r (plist-get result :value)))
 +(if s (concat s \n r) r))
 +(error nREPL not connected! Use M-x nrepl-jack-in.)))
 +
 +(defalias 'org-babel-execute:clojure 'org-babel--execute-clojure-nrepl)
 +
  (provide 'ob-clojure)

-- 
Eric Schulte
https://cs.unm.edu/~eschulte
PGP: 0x614CA05D



Re: [O] ob-clojure.el alternative using nrepl

2013-10-03 Thread Oleh
Hi Eric,

I can make the changes tomorrow.
Or you can make them now if you like.
I required ob-tangle because it's a pre-requisite for ob-clojure:
an error is thrown if I try to load ob-clojure before ob-tangle.
So it makes sense to me to require it.

regards,
Oleh


On Thu, Oct 3, 2013 at 8:06 PM, Eric Schulte schulte.e...@gmail.com wrote:

 Thanks for this update.

 Oleh ohwoeo...@gmail.com writes:

  Here's an updated patch.
  I use defalias, is that OK?
 

 Two changes.

 1. instead of customization through a defalias, use defcustom and a
variable which determines which function (eval-slime or eval-nrepl)
is called.

 2. ob-*.el files should not require ob-tangle.

 If you prefer not to make these changes I can apply your patch, and then
 make the required changes myself over-top.

 Best,

 
  Oleh
 
 
  On Thu, Oct 3, 2013 at 6:23 PM, Bastien b...@gnu.org wrote:
 
  Hi Oleh,
 
  Oleh ohwoeo...@gmail.com writes:
 
   Should I rather put the code in ob-clojure.el with something like
   (defcustom ob-clojure-method nrepl)?
 
  Yes, I think it's better.  Maybe
 
  (defcustom ob-clojure-repl 'nrepl)
 
  Let's discuss this on the list so that others can chime in.
 
  Thanks for bringing this up!
 
  --
   Bastien
 
 
  From ab5c9a8844b4103e40cd4c135f297a7089cd7cdf Mon Sep 17 00:00:00 2001
  From: Oleh Krehel ohwoeo...@gmail.com
  Date: Thu, 3 Oct 2013 18:23:16 +0200
  Subject: [PATCH] ob-clojure.el: switch to nREPL as the main method of
   evaluating Clojure.
 
  Get the old behavior with:
  (defalias 'org-babel-execute:clojure 'org-babel--execute-clojure-slime)
  ---
   lisp/ob-clojure.el | 34 ++
   1 file changed, 26 insertions(+), 8 deletions(-)
 
  diff --git a/lisp/ob-clojure.el b/lisp/ob-clojure.el
  index bc2bbc0..3b82f0a 100644
  --- a/lisp/ob-clojure.el
  +++ b/lisp/ob-clojure.el
  @@ -2,8 +2,8 @@
 
   ;; Copyright (C) 2009-2013 Free Software Foundation, Inc.
 
  -;; Author: Joel Boehland
  -;;   Eric Schulte
  +;; Author: Joel Boehland, Eric Schulte, Oleh Krehel
  +;;
   ;; Keywords: literate programming, reproducible research
   ;; Homepage: http://orgmode.org
 
  @@ -24,20 +24,26 @@
 
   ;;; Commentary:
 
  -;;; support for evaluating clojure code, relies on slime for all eval
  +;;; support for evaluating clojure code, relies either on slime or
  +;;; on nrepl for all eval
 
   ;;; Requirements:
 
   ;;; - clojure (at least 1.2.0)
   ;;; - clojure-mode
  -;;; - slime
  +;;; - either slime or nrepl
 
  -;;; By far, the best way to install these components is by following
  -;;; the directions as set out by Phil Hagelberg (Technomancy) on the
  -;;; web page: http://technomancy.us/126
  +;;; For SLIME-way, the best way to install these components is by
  +;;; following the directions as set out by Phil Hagelberg (Technomancy)
  +;;; on the web page: http://technomancy.us/126
  +
  +;;; For nREPL-way:
  +;;; get clojure is with https://github.com/technomancy/leiningen
  +;;; get nrepl from MELPA (clojure-mode is a dependency).
 
   ;;; Code:
   (require 'ob)
  +(require 'ob-tangle)
 
   (declare-function slime-eval ext:slime (sexp optional package))
 
  @@ -72,7 +78,7 @@
   (format (clojure.core/with-out-str %s) body))
  (t body
 
  -(defun org-babel-execute:clojure (body params)
  +(defun org-babel--execute-clojure-slime (body params)
 Execute a block of Clojure code with Babel.
 (require 'slime)
 (with-temp-buffer
  @@ -88,6 +94,18 @@
,(buffer-substring-no-properties (point-min) (point-max)))
 (cdr (assoc :package params))
 
  +(defun org-babel--execute-clojure-nrepl (body params)
  +  Execute a block of Clojure code with Babel and nREPL.
  +  (require 'nrepl)
  +  (if (nrepl-current-connection-buffer)
  +  (let* ((result (nrepl-eval body))
  + (s (plist-get result :stdout))
  + (r (plist-get result :value)))
  +(if s (concat s \n r) r))
  +(error nREPL not connected! Use M-x nrepl-jack-in.)))
  +
  +(defalias 'org-babel-execute:clojure 'org-babel--execute-clojure-nrepl)
  +
   (provide 'ob-clojure)

 --
 Eric Schulte
 https://cs.unm.edu/~eschulte
 PGP: 0x614CA05D



Re: [O] ob-clojure.el alternative using nrepl

2013-10-03 Thread Eric Schulte
Oleh ohwoeo...@gmail.com writes:

 Hi Eric,

 I can make the changes tomorrow.
 Or you can make them now if you like.

Please try out the attached patch which may be applied overtop of your
patch and let me know if it works?  I had to guess at the two nrepl
function arguments.

From ee6c792ec7657e50524d78d309538e7e58bb2989 Mon Sep 17 00:00:00 2001
From: Eric Schulte schulte.e...@gmail.com
Date: Thu, 3 Oct 2013 13:25:46 -0600
Subject: [PATCH 2/2] ob-clojure nrepl customization variable

  - ensure body is expanded for n-repl as well
  - declare n-repl functions
  - remove require ob-tangle from ob-clojure

* lisp/ob-clojure.el (org-babel-clojure-backend): Customization
  variable to select clojure backend
  (nrepl-eval): Declared function.
  (nrepl-current-connection-buffer): Declared function.
  (org-babel-execute:clojure): Execution now uses customized backend.
---
 lisp/ob-clojure.el | 59 +-
 1 file changed, 32 insertions(+), 27 deletions(-)

diff --git a/lisp/ob-clojure.el b/lisp/ob-clojure.el
index 3b82f0a..255fe8d 100644
--- a/lisp/ob-clojure.el
+++ b/lisp/ob-clojure.el
@@ -43,9 +43,10 @@
 
 ;;; Code:
 (require 'ob)
-(require 'ob-tangle)
 
 (declare-function slime-eval ext:slime (sexp optional package))
+(declare-function nrepl-current-connection-buffer ext:nrepl ())
+(declare-function nrepl-eval ext:nrepl (body))
 
 (defvar org-babel-tangle-lang-exts)
 (add-to-list 'org-babel-tangle-lang-exts '(clojure . clj))
@@ -53,6 +54,11 @@
 (defvar org-babel-default-header-args:clojure '())
 (defvar org-babel-header-args:clojure '((package . :any)))
 
+(defcustom org-babel-clojure-backend 'nrepl
+  Backend used to evaluate Clojure code blocks.
+  :group 'org-babel
+  :type 'symbol)
+
 (defun org-babel-expand-body:clojure (body params)
   Expand BODY according to PARAMS, return the expanded body.
   (let* ((vars (mapcar #'cdr (org-babel-get-header params :var)))
@@ -78,33 +84,32 @@
 	   (format (clojure.core/with-out-str %s) body))
 	  (t body
 
-(defun org-babel--execute-clojure-slime (body params)
+(defun org-babel-execute:clojure (body params)
   Execute a block of Clojure code with Babel.
-  (require 'slime)
-  (with-temp-buffer
-(insert (org-babel-expand-body:clojure body params))
-((lambda (result)
-   (let ((result-params (cdr (assoc :result-params params
-	 (org-babel-result-cond result-params
-	   result
-	   (condition-case nil (org-babel-script-escape result)
-	 (error result)
- (slime-eval
-  `(swank:eval-and-grab-output
- 	,(buffer-substring-no-properties (point-min) (point-max)))
-  (cdr (assoc :package params))
-
-(defun org-babel--execute-clojure-nrepl (body params)
-  Execute a block of Clojure code with Babel and nREPL.
-  (require 'nrepl)
-  (if (nrepl-current-connection-buffer)
-  (let* ((result (nrepl-eval body))
- (s (plist-get result :stdout))
- (r (plist-get result :value)))
-(if s (concat s \n r) r))
-(error nREPL not connected! Use M-x nrepl-jack-in.)))
-
-(defalias 'org-babel-execute:clojure 'org-babel--execute-clojure-nrepl)
+  (let ((expanded (org-babel-expand-body:clojure body params)))
+(case org-babel-clojure-backend
+  (slime
+   (require 'slime)
+   (with-temp-buffer
+	 (insert expanded)
+	 ((lambda (result)
+	(let ((result-params (cdr (assoc :result-params params
+	  (org-babel-result-cond result-params
+		result
+		(condition-case nil (org-babel-script-escape result)
+		  (error result)
+	  (slime-eval
+	   `(swank:eval-and-grab-output
+	 ,(buffer-substring-no-properties (point-min) (point-max)))
+	   (cdr (assoc :package params))
+  (nrepl
+   (require 'nrepl)
+   (if (nrepl-current-connection-buffer)
+	   (let* ((result (nrepl-eval expanded))
+		  (s (plist-get result :stdout))
+		  (r (plist-get result :value)))
+	 (if s (concat s \n r) r))
+	 (error nREPL not connected! Use M-x nrepl-jack-in.))
 
 (provide 'ob-clojure)
 
-- 
1.8.4


 
 I required ob-tangle because it's a pre-requisite for ob-clojure: an
 error is thrown if I try to load ob-clojure before ob-tangle.  So it
 makes sense to me to require it.


I don't see this.  With the latest version of Org-mode I'm able to
require ob-clojure w/o any problems when starting with no configuration
(e.g., emacs -Q).

Cheers,


 regards,
 Oleh


 On Thu, Oct 3, 2013 at 8:06 PM, Eric Schulte schulte.e...@gmail.com wrote:

 Thanks for this update.

 Oleh ohwoeo...@gmail.com writes:

  Here's an updated patch.
  I use defalias, is that OK?
 

 Two changes.

 1. instead of customization through a defalias, use defcustom and a
variable which determines which function (eval-slime or eval-nrepl)
is called.

 2. ob-*.el files should not require ob-tangle.

 If you prefer not to make these changes I can apply your patch, and then
 make the required changes myself over-top.

 Best,

 
  Oleh
 
 
  On Thu, Oct 3, 2013 at 6:23 PM, 

Re: [O] ob-clojure.el alternative using nrepl

2013-10-03 Thread Bastien
Hi Eric,

Eric Schulte schulte.e...@gmail.com writes:

 Please try out the attached patch which may be applied overtop of your
 patch and let me know if it works?  I had to guess at the two nrepl
 function arguments.

It works fine for nrepl.el, thanks a lot!

-- 
 Bastien



Re: [O] ob-clojure.el alternative using nrepl

2013-10-03 Thread Eric Schulte
Bastien b...@altern.org writes:

 Hi Eric,

 Eric Schulte schulte.e...@gmail.com writes:

 Please try out the attached patch which may be applied overtop of your
 patch and let me know if it works?  I had to guess at the two nrepl
 function arguments.

 It works fine for nrepl.el, thanks a lot!

Alright, I just pushed this up.

Thanks for testing, I haven't used Clojure in a couple of years now
(since happily moving on to Common Lisp as my lisp of choice).

Thanks to Oleh for the patch!

Cheers,

-- 
Eric Schulte
https://cs.unm.edu/~eschulte
PGP: 0x614CA05D