Hey Rick, Rick Moynihan <rick.moyni...@gmail.com> writes:
> Hey Eric, > > I've just run your ob-clojure, and it seems to work fine, though as > you mention it would be nice if it'd start slime (if it isn't already > running). > Alright, I'm going to fold this into the master branch (we'll still have the entirety of the existing ob-clojure in git for resurrection if need be). > > I'm not sure what you mean by "external evaluation", but have found > that if I do M-x slime-connect (to connect to an existing > clojure/swank vm) that I have access to the same vm, via the > *slime-repl* buffer, which is nice. Is this what you were referring > to, or was it something else? > So what I mean was execution outside of slime, e.g. by writing a code block to a temporary file and then executing that file with clj-env or some such Clojure scripting command. However the more I think about this the more I'm satisfied with slime, as it allows access to both local and remote virtual machines... > > Having access to other sessions seems like a useful feature, but I've > not begun to use these more advanced babel features. > > Anyway, great work; I really appreciate you working on this! > My pleasure, I use Clojure from within Org-mode files on a regular basis (these days I'm probably writing more Clojure than elisp), so this helps me too. Cheers -- Eric > > R. > > On 25 November 2010 17:40, Eric Schulte <schulte.e...@gmail.com> wrote: >> Hi Rick, >> >> I'm not quite sure what the best permanent solution would be. I'm >> tempted to switch to a drastically stripped down version of Clojure >> interaction which relies very heavily on slime. I'm attaching a first >> pass at this which allows for slime-based execution, can assign >> variables, handles lazy evaluation, etc... >> >> The downside to this new version is that it doesn't support buffer-based >> sessions or external evaluation, but the upside is that it is incredibly >> simple, and by relying so heavily on slime it should be very robust. >> >> Once this is enhanced with some code to start slime, and a simple >> :session setup (namely the ability to grab the slime context from a >> buffer specified by :session) I may prefer this to the existing >> ob-clojure. >> >> I'd be interested to hear what others think. Personally I'm happy to >> lose external evaluation and switch to purely slime-based evaluation, >> but I don't want to trash it if it is an important part of someones work >> flow. >> >> Best -- Eric >> >> >> >> Rick Moynihan <rick.moyni...@gmail.com> writes: >> >>> Hi Eric, >>> >>> Sorry for the delay in getting back to you. >>> >>> I can confirm the fix you quoted below works for me also. >>> >>> I've not been using any of the multiple session features, so I haven't >>> run into the other problems you mention. >>> >>> Any idea on what a more permanent solution might be? >>> >>> R. >>> >>> On 6 November 2010 17:58, Eric Schulte <schulte.e...@gmail.com> wrote: >>>> Hi Rick, >>>> >>>> I've noticed this as well. I'm not the original author of ob-clojure.el >>>> (Joel Boehland is), so I'm not sure how the clojure interaction >>>> currently works, although I know it makes heavy usage of slime. There >>>> must be an existing mechanism used by slime to unroll these lazy >>>> evaluations, for example in the repl (range 10) *is* expanded >>>> >>>> user> (range 10) >>>> (0 1 2 3 4 5 6 7 8 9) >>>> >>>> I'm using clojure extensively in my studies so I have all the more >>>> reason to try to figure this out. I'll put this on my stack. >>>> >>>> BTW: I've noticed that I am unable to get Clojure code blocks to play >>>> nicely with existing slime sessions, say for example I have some large >>>> piece of data in scope in a slime sessions and I'd like to access that >>>> data from a clojure code block and dump some analysis to an Org-mode >>>> document. I have not yet found out how to make this work. If you have, >>>> I'd love to hear how, otherwise I'll look into this as well. >>>> >>>> Best -- Eric >>>> >>>> Having just looked at this quickly, the following function over-defines >>>> `org-babel-execute:clojure' s.t. the body of the code block is sent to >>>> the superior list in the same manner as when calling `slime-eval-defun' >>>> from within a .clj file. While this doesn't handle starting up clojure >>>> instances or differentiate between session and external evaluation it >>>> should fix the issues mentioned above and could be the beginning of a >>>> permanent solution. >>>> >>>> #+begin_src emacs-lisp >>>> (defun org-babel-execute:clojure (body params) >>>> (with-temp-buffer >>>> (insert body) >>>> (read >>>> (slime-eval >>>> `(swank:interactive-eval-region >>>> ,(buffer-substring-no-properties (point-min) (point-max))))))) >>>> #+end_src >>>> >>>> which then results in >>>> >>>> #+begin_src clojure >>>> (map (fn [el] (list el (* el el))) (range 10)) >>>> #+end_src >>>> >>>> evaluating to >>>> >>>> #+results: >>>> | 0 | 0 | >>>> | 1 | 1 | >>>> | 2 | 4 | >>>> | 3 | 9 | >>>> | 4 | 16 | >>>> | 5 | 25 | >>>> | 6 | 36 | >>>> | 7 | 49 | >>>> | 8 | 64 | >>>> | 9 | 81 | >>>> >>>> Rick Moynihan <rick.moyni...@gmail.com> writes: >>>> >>>>> I have the following org file: >>>>> >>>>> #+BEGIN_SRC clojure >>>>> (range 10) >>>>> #+END_SRC >>>>> >>>>> #+results: >>>>> : clojure.lang.lazy...@f35bf8c6 >>>>> >>>>> Where as I would expect to see the sequence. Evaluating the code >>>>> inside a doall doesn't seem to do anything either: >>>>> >>>>> #+BEGIN_SRC clojure >>>>> (doall (range 10)) >>>>> #+END_SRC >>>>> >>>>> #+results: >>>>> : clojure.lang.lazy...@f35bf8c6 >>>>> >>>>> Is there any parameter I can pass to the block to get the code to >>>>> execute in a doall and return the sequence values rather than the >>>>> lazy-seq object itself? >>>>> >>>>> R. >>>>> >>>>> _______________________________________________ >>>>> 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 >>>> >> >> _______________________________________________ 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