README.md
1[![Build Status](https://travis-ci.org/joaotavora/sly.png?branch=master)](https://travis-ci.org/joaotavora/sly)
2[![MELPA](http://melpa.org/packages/sly-badge.svg)](http://melpa.org/#/sly)
3
4```lisp
5 _____ __ __ __
6 / ___/ / / \ \/ / |\ _,,,---,,_
7 \__ \ / / \ / /,`.-'`' -. ;-;;,_
8 ___/ / / /___ / / |,4- ) )-,_..;\ ( `'-'
9 /____/ /_____/ /_/ '---''(_/--' `-'\_)
10
11```
12
13SLY is Sylvester the Cat's Common Lisp IDE for Emacs:
14
15* Read [a short illustrated guide][tutorial]
16* ️ Scroll down this README for some [pretty gifs](#animated_gifs)
17* Read the [NEWS][6] file
18* Read the [manual][documentation]
19
20SLY's highlights are:
21
22* A [full-featured REPL](#repl) based on Emacs's `comint.el`. Everything can be
23 copied to the REPL;
24* [Stickers](#stickers), or live code annotations that record values as code
25 traverses them.
26* [Flex-style completion](#company-flex-completion) out-of-the-box, using
27 Emacs's completion API. Company, Helm, and other [supported
28 natively](#completion), no plugin required;
29* An interactive [Trace Dialog][trace-dialog];
30* Cleanly ASDF-loaded by default, including contribs, enabled out-of-the-box;
31* Multiple inspectors and multiple REPLs;
32* "Presentations" replaced by [interactive backreferences](#repl) which
33 highlight the object and remain stable throughout the REPL session;
34* Support for [NAMED-READTABLES][11], [macrostep.el][12] and [quicklisp][13]
35* A [portable, annotation-based stepper][16] in [early][17] but functional
36 prototype stage.
37
38SLY is a fork of [SLIME][1]. We tracks its bugfixes, particularly to the
39implementation backends. All SLIME's familar features (debugger, inspector,
40xref, etc...) are still available, with improved overall UX.
41
42Installation
43------------
44
45Ensure that [MELPA][10] is setup as usual and ask `M-x package-install` to
46install the package `sly`.
47
48*That's it*. `sly-mode` will automatically come up in every `.lisp` file. To
49fire up SLY, connect to a Lisp and get a friendly REPL, use `M-x sly`.
50
51Even if you already have SLIME installed, SLY will ask you and temporarily
52disable it for the Emacs session.
53
54<a name="animated_gifs"></a>
55_Obligatory animated gif section_
56-----------------------------------
57
58<a name="company-flex-completion"></a>
59[Flex completion](http://joaotavora.github.io/sly/#Completion)
60
61![company-flex-completion](./doc/animations/company-flex-completion.gif)
62
63<a name="repl"></a>
64[Backreferences](http://joaotavora.github.io/sly/#REPL-backreferences)
65
66![backreferences](./doc/animations/backreferences.gif)
67
68[Reverse i-search](http://joaotavora.github.io/sly/#REPL-commands)
69
70![reverse-isearch](./doc/animations/reverse-isearch.gif)
71
72<a name="stickers"></a>
73[Stickers](http://joaotavora.github.io/sly/#Stickers)
74
75![stickers-example](./doc/animations/stickers-example.gif)
76
77Install from git
78-------------------
79
80Clone this repository, add this to your `~/.emacs` file and fill in the
81appropriate file names:
82
83```el
84(add-to-list 'load-path "~/dir/to/cloned/sly")
85(require 'sly-autoloads)
86(setq inferior-lisp-program "/opt/sbcl/bin/sbcl")
87```
88
89If you wish to byte-compile SLY yourself (not needed generally) you can do `make
90compile compile-contrib` in the dir where you cloned SLY.
91
92Running the server standalone
93-----------------------------
94
95This also works
96```
97$ sbcl
98...
99* (push #p"~/dir/to/sly" asdf:*central-registry*)
100* (asdf:load-system :slynk)
101* (slynk:create-server :port 4008)
102```
103
104Now in Emacs you can do `sly-connect` and give it the host and the 4008 port as
105a destination.
106
107Faster startup
108--------------
109
110If the Lisp program doesn't start fast enough for you, look in [the
111manual][instasly], for ways to make it faster.
112
113Additional Contribs
114-------------------
115
116* https://github.com/joaotavora/sly-quicklisp
117* https://github.com/joaotavora/sly-named-readtables
118* https://github.com/joaotavora/sly-macrostep
119* https://github.com/joaotavora/sly-stepper
120* https://github.com/mmgeorge/sly-asdf
121* https://github.com/40ants/sly-package-inferred
122
123<a name="completion"></a>
124Completion UIs
125--------------
126
127SLY works with most Emacs "completion UIs" out of the box, providing completion
128in source files and inputting Common Lisp symbol names from the minibuffer.
129[Company][14], Emacs 27's Fido-mode, and Helm are well-supported, as is
130"vanilla" completion. For consistency, SLY defaults to its own UI,
131`sly-symbol-completion-mode`, useful if you don't have or like any of those.
132You can turn it off. Also, if you use Helm and wish to have even more
133Helm-based fanciness, you can use [helm-sly][15].
134
135License
136-------
137
138SLY is free software. All files, unless explicitly stated otherwise, are public
139domain. ASCII artwork is copyright by Felix Lee, Joan G. Stark and Hayley Jane
140Wakenshaw.
141
142Fork
143----
144
145SLIME is the work of Eric Marsden, Luke Gorrie, Helmut Eller, Tobias
146C. Rittweiler and [many others][8]. I forked SLIME because I used it daily,
147for work, had a long list of hacks developed for myself, and wanted to share
148them with others.
149
150In 2013, SLIME development was stalling, patches and issues rotting. In early
1512014, Luís Oliveira and myself moved SLIME to Github and set up its Travis CI
152system. I brought in the old bug reports from the Launchpad tracker, fixed
153long-standing problems and submitted many changes, particularly to the
154under-curated but popular "contrib" section.
155
156Now, the changes that SLY brings to the table are too deep at the Elisp and Lisp
157level to be accepted to SLIME, given its current focus on stability (for the
158record, I find this perfectly reasonable). The new features, such as stickers or
159multiple inspectors, cannot be realized well using only the existing "contrib"
160system. Finally, SLY frees itself from the shackles of Emacs 23 and supports
161Emacs 24.3+ only, allowing for much cleaner code and liberal use of lexical
162binding.
163
164The list of technical reasons is bigger than this though, and you can read up on
165them in the [CONTRIBUTING.md][9] file.
166
167Contributing
168------------
169
170[Open an issue or a pull request][4], but at least have a quick look at the
171first part [CONTRIBUTING.md][5] file for instructions on how to contribute.
172
173[1]: http://www.common-lisp.net/project/slime/
174[2]: https://github.com/joaotavora/sly/blob/master/README.md#fork
175[4]: https://github.com/joaotavora/sly/issues
176[5]: https://github.com/joaotavora/sly/blob/master/CONTRIBUTING.md
177[6]: https://github.com/joaotavora/sly/blob/master/NEWS.md
178[7]: https://www.youtube.com/watch?v=xqWkVvubnSI
179[8]: http://common-lisp.net/project/slime/doc/html/Credits.html#Credits
180[9]: https://github.com/joaotavora/sly/blob/master/CONTRIBUTING.md#architecture
181[10]: https://github.com/milkypostman/melpa
182[11]: https://github.com/joaotavora/sly-named-readtables
183[12]: https://github.com/joaotavora/sly-macrostep
184[13]: https://github.com/joaotavora/sly-quicklisp
185[14]: https://github.com/company-mode/company-mode
186[15]: https://github.com/emacs-helm/helm-sly
187[16]: https://zenodo.org/record/3742759
188[17]: https://github.com/joaotavora/sly-stepper
189[documentation]: http://joaotavora.github.io/sly
190[instasly]: http://joaotavora.github.io/sly/#Loading-Slynk-faster
191[trace-dialog]: http://joaotavora.github.io/sly/#Trace-Dialog
192[tutorial]: http://joaotavora.github.io/sly/#A-SLY-tour-for-SLIME-users
193
194<!-- Local Variables: -->
195<!-- fill-column: 80 -->
196<!-- End: -->
197