1 | SLIME |
---|
2 | ===== |
---|
3 | |
---|
4 | Author: Mark Evenson |
---|
5 | Created: 16-MAR-2010 |
---|
6 | Modified: 18-MAR-2010 |
---|
7 | |
---|
8 | SLIME is divided conceptually in two parts: the "swank" server process |
---|
9 | which runs in the native Lisp and the "slime" client process running |
---|
10 | in Emacs Lisp. These instructions were were written to accompany |
---|
11 | ABCL, but there is nothing ABCL specific in the instructions |
---|
12 | |
---|
13 | ## Obtaining SLIME |
---|
14 | |
---|
15 | SLIME does not follow a release process in the standard sense with |
---|
16 | centrally versioned releases, so you are best off with obtaining the |
---|
17 | [latest version from CVS][1]. [Daily snapshots as gzipped tarballs are also available][2]. |
---|
18 | Your local OS packaging system (i.e. MacPorts on OSX) may have a |
---|
19 | version as well. |
---|
20 | |
---|
21 | [1]: http://common-lisp.net/project/slime/#downloading |
---|
22 | [2]: http://common-lisp.net/project/slime/snapshots/slime-current.tgz |
---|
23 | |
---|
24 | ## Starting SLIME |
---|
25 | |
---|
26 | One first locates the SLIME directory on the filesystem. In the code |
---|
27 | that follows, the SLIME top level directory is assumed to be |
---|
28 | `"~/work/slime"`, so adjust this value to your local value as you see |
---|
29 | fit. |
---|
30 | |
---|
31 | Then one configures Emacs with the proper initialization hooks by |
---|
32 | adding code something like the following to "~/.emacs": |
---|
33 | |
---|
34 | :::common-lisp |
---|
35 | (add-to-list 'load-path "~/work/slime") |
---|
36 | (setq slime-lisp-implementations |
---|
37 | '((abcl ("~/work/abcl/abcl")) |
---|
38 | (abcl.svn ("~/work/abcl.svn/abcl")) |
---|
39 | (sbcl ("/opt/local/bin/sbcl")))) |
---|
40 | (require 'slime) |
---|
41 | (slime-setup '(slime-fancy slime-asdf slime-banner)) |
---|
42 | |
---|
43 | One further need to customize the setting of |
---|
44 | `SLIME-LISP-IMPLEMENTATIONS` to the location(s) of the Lisp(s) you wish to |
---|
45 | invoke via SLIME. The value is list of lists of the form |
---|
46 | |
---|
47 | (SYMBOL ("/path/to/lisp")) |
---|
48 | |
---|
49 | where SYMBOL is a mnemonic for the Lisp implementation, and the string |
---|
50 | `"/path/to/lisp"` is the absolute path of the Lisp implementation that |
---|
51 | SLIME will associate with this symbol. In the example above, I have |
---|
52 | defined three implementations, the main abcl implementation, a version |
---|
53 | that corresponds to the latest version from SVN invoked by |
---|
54 | `"~/work/abcl.svn/abcl"`, and a version of SBCL. |
---|
55 | |
---|
56 | To start SLIME one simply issues `M-x slime` from Emacs. This will |
---|
57 | start the first entry in the SLIME-LISP-IMPLEMENTATIONS list. If you |
---|
58 | wish to start a subsequent Lisp, prefix the Emacs invocation with a |
---|
59 | negative argument (i.e. `C-- M-x slime`). This will present an |
---|
60 | interactive chooser over all symbols contained in |
---|
61 | `SLIME-LISP-IMPLEMENTATIONS`. |
---|
62 | |
---|
63 | After you invoke SLIME, you'll see a buffer open up named |
---|
64 | `*inferior-lisp*` where the Lisp image is started up, the required swank |
---|
65 | code is complied and then loaded, finally, you'll see the "flying |
---|
66 | letters" resolving itself to a `"CL-USER>"` prompt with an inspiration |
---|
67 | message in the minibuffer. Your initiation to SLIME has begun... |
---|
68 | |
---|
69 | |
---|
70 | ## Starting swank on its own |
---|
71 | |
---|
72 | In debugging, one may wish to start the swank server by itself without |
---|
73 | connection to Emacs. The following code will both load and start the swank server |
---|
74 | from a Lisp image. One merely needs to change *SLIME-DIRECTORY* to |
---|
75 | point to the top directory of the server process. |
---|
76 | |
---|
77 | :::commmon-lisp |
---|
78 | (defvar *slime-directory* #p"~/work/slime/") ;; Don't forget trailing slash |
---|
79 | (load (merge-pathnames "swank-loader.lisp" *slime-directory*) :verbose t) |
---|
80 | (swank-loader:init) |
---|
81 | (swank:start-server "/tmp/swank.port") ;; remove if you don't want |
---|
82 | ;; swank to start listening for connections. |
---|
83 | |
---|
84 | When this code finishes executing, an integer representing the port on |
---|
85 | which the server starts will be written to `'/tmp/swank.port'` and also |
---|
86 | returned as the result of evaluating `SWANK:START-SERVER`. One may |
---|
87 | connect to this port via issuing `M-x slime-connect` in Emacs. |
---|
88 | |
---|
89 | |
---|
90 | ### Historivia |
---|
91 | |
---|
92 | Luke Gorrie inherited a server implementation known as "Skank" which |
---|
93 | he rejected on the grounds of pure taste. |
---|
94 | |
---|