[slime-devel] cl-workbooks in emacs?

Mirko Vukovic mirko.vukovic at gmail.com
Tue Mar 1 16:15:59 UTC 2011

On Sun, Feb 20, 2011 at 9:09 AM, Mirko Vukovic <mirko.vukovic at gmail.com> wrote:
> On Sat, Feb 19, 2011 at 10:39 AM, Helmut Eller <heller at common-lisp.net>
> wrote:
>> * Mirko Vukovic [2011-02-19 14:30] writes:
>> > Are there any packages that can help me accomplish this?
>> I've used org-babel[1] a bit but only with gnuplot.  A lisp program
>> generates the data file, org-mode calls gnuplot to generates the graphs
>> and combines them into single html document.  I think there is also some
>> Slime integration for org-babel available but I have no experience with
>> that.
>> Helmut
>> [1]http://orgmode.org/worg/org-contrib/babel/
> I would like to use both.
> 1) Generate the files with dribble.  I can easily input text into repl.
> 2) Then switch to org-mode to edit the text and prepare for printing.
> However, I got a problem with dribble & slime on my windows xp:
>  - running clisp on cygwin, dribble works fine
>  - running clisp from slime on emacs-nt, dribble does not work.
> This is not the first time I am having issues running cygwin's clisp via
> slime on emacs-nt.  I hope in the near future to get a laptop where I can
> run both windows and linux, and do lisp work on the linux side.
> Enough dribbling :-)
> Mirko

Regarding dribble:

The issue was not clisp & cywgin, but slime, as (I am guessing here), it
is sending the input and output via streams that are not captured by dribble.

However, that is not a big problem.  After some thought, I realized
that dribbling
in slime is staring back at me:

*slime-repl ...* buffer is a dribble :-)

Regarding org-babel:

I started using org's babel feature.  It works very nicely with slime.
 Actually, that is an
understatement.  I love it!

For example, to set-up my analysis session, my org file has the
following snippet:
#+begin_src lisp :session
(in-package :cl-user)
(load-asdf-system :thermo)
(load-asdf-system :thermo-user)
(in-package :thermo-user)

One can edit the code in lisp mode by typing C-c ', and execute it by
typing C-c C-c.
Org-babel captures the lisp output into the file.

org-babel uses ob-lisp.el to set-up communication with slime.

I had to modify the following function in ob-lisp.el slightly to make
it more friendly.
See comments in the function below

(defun org-babel-execute:lisp (body params)
  "Execute a block of Lisp code with org-babel.
This function is called by `org-babel-execute-src-block'"
  (require 'slime)
  (message "executing Lisp source code block")
  (let* ((session (org-babel-lisp-initiate-session
		   (cdr (assoc :session params))))
         (result-type (cdr (assoc :result-type params)))
	 ;; enclose body into progn -- mv
         (full-body (format "(progn\n%s)\n"
			    (org-babel-expand-body:lisp body params))))
    (progn ;;read -- commented out by mv so as not to error on
unreadable return values
     (if session
         ;; session evaluation
           (cadr (slime-eval `(swank:eval-and-grab-output ,full-body))))
       ;; external evaluation
       (let ((script-file (org-babel-temp-file "lisp-script-")))
         (with-temp-file script-file
            ;; return the value or the output
            (if (string= result-type "value")
                (format "(print %s)" full-body)
	  (format "%s %s" org-babel-lisp-cmd
		  (org-babel-process-file-name script-file)) ""))))))


More information about the slime-devel mailing list