1Upcoming version
2----------------
3
4SLY 1.0.42 (December 2020)
5------------------------------
6
7### Much improved company completion
8
9If you haven't yet, just `M-x package-install RET company-mode`, to
10enable `company`.  It should start working in every SLY buffer.
11
12Moreover, a new "lazy" way to SLY collect completions from the Lisp
13backend means that user input is not blocked if this takes a long
14time.  The result is a much more responsive on-the-fly completion
15experience.
16
17If you don't like company, you can still use the normal on-request TAB
18completion, which also features an improved UI.
19
20### Fixed Helm conflicts
21
22Helm users should now get access to the full capabilities of SLY's
23completion function without needing to install any extra packages.
24Just need to `M-x sly-symbol-completion-mode` to turn off SLY's
25default completion UI.  (https://github.com/joaotavora/sly/issues/303)
26
27### Redesigned completion backend
28
29A redesigned completion backend replaces the legacy contribs
30`sly-fuzzy` and `sly-c-p-c`. The new "flex" backend considers package
31designators in the search string so you can complete other package's
32symbols even when outside a package.
33
34Here's an example:
35
36```
37CL-USER> (quiloa)         ->  (ql:quickload)
38CL-USER> (scan)           ->  (ppcre:scan)
39CL-USER> (setf locadirs)  ->  (setf ql:*local-project-directories*)
40CL-USER> (mvbind)         ->  (multiple-value-bind)
41```
42
43Flex completion is on by default, but that can be changed via
44`sly-complete-symbol-function`. The
45[documentation](http://joaotavora.github.io/sly/#Completion) has more
46information.
47
48Package-local nicknames are also considered (provided your
49implementation supports them).
50
51### Completely rewritten manual
52
53Manual has been reviewed from top to bottom. It should be much easier
54to navigate and nicer read in general, thouch it *still needs quite
55some proofreading*
56
57[A new chapter for existing SLIME users](http://joaotavora.github.io/sly/#A-SLY-tour-for-SLIME-users)
58figures prominently in the top-level.
59
60Presently no major omissions (*except maybe for multiple inspectors*).
61Reorganized nodes into a new structure not so focused on core vs
62contribs. Deleted stale sections. REPL section heavily rewritten to
63explain output types and backreferences.
64
65### New command M-x sly-import-symbol-at-point bound to C-c i by default
66
67This is a counterpart to the existing M-x sly-export-symbol-at-point,
68bound to C-c e. It strips the symbol under point of its package
69designator, and adds it under the :import-from subclause of the
70current package's defpackage form. An improvement suggested and
71implemented by Alexander Artemenko (github #147).
72
73### Improved SLY Stickers UI
74
75The UI for SLY Stickers, particularly for `M-x sly-stickers-replay`
76has been cleanup up. Upon entering the replay mode, SLY may ask user
77if she wants to delete the previous recordings, a commonly forgotten
78but useful pre-step (an idea by Javier Olaechea, github #91). Also,
79window management is less random.
80
81### Stale buffers are killed on connection close
82
83Inspector, debugger, and other buffers pertaining to a connection are
84automatically killed when the connection is closed.  The types of
85buffers that are exempt from this is configurable in a new
86`sly-keep-buffers-on-connection-close` defcustom, which lists
87REPL buffers by default.
88
89### Autodoc function args available in minibuffer prompts
90
91In minibuffer prompts like the one of `M-x sly-inspect`, autodoc
92information is available and displayed temporarily in the mode-line.
93
94### `C-c C-o` and `C-c M-o` bound in the REPL
95
96These clear recent output and the whole REPL, respectively.
97
98### Easy to parse copied calls to REPL
99
100The "Copy call to REPL" funcionality in the Trace Dialog and SLY-DB
101buffers now understands that symbols and numbers can be printed
102directly in the reconstructed function call, which eases reading.
103
104### The .swankrc and .swank.lisp are not loaded by default
105
106A problem encountered by Zach Beane.
107
108### Window management with M-. has been fixed
109
110When finding the definition of a generic function with M-., an *xref*
111buffer pops up in a (possibly reused) window, showing code
112locations. When selecting one of those locations, make sure to honor
113the original intent of M-. of switching buffers in the original
114window. Quit the *xref* window should fully restore the previous
115window configuration. Thanks to Michael Fiano for insisting on what is
116indubitably the correct behavior (github #123).
117
118### More predictably choose REPL windows
119
120Calling `sly-mrepl` interactively, either via `M-x` or
121 `sly-selector-map` switches to buffer in the current
122 window. Accessing the REPL indirectly (by returning objects into it
123 form other modes) attempts to pop the buffer in another window.
124
125A problem encoutered by Zach Beane.
126
127### Travis CI infrastructure has been revamped
128
129The Travis CI infrastructure now uses `roswell` and `emacs-travis`
130instead of `cl-travis` and `apt`, respectively. Thus no longer needs
131Travis's `sudo` and uses directory caching, resulting in much faster
132builds.
133
134### New variables `*SLYNK:ECHO-NUMBER-ALIST*` and `*SLYNK:PRESENT-NUMBER-ALIST*`
135
136Customize the formats that integer numbers get presented back to SLY,
137additionally to the binary, octal and hex defaults. Good when working
138with Unix Epoch times, for example. See manual "Other configurables"
139for documentation and example.
140
141### New customization variable `sly-command-switch-to-existing-lisp`
142
143This makes a prefixless `M-x sly` switch to an active connection
144instead of starting a new one.  Customize this to `never` to never
145prompted, or to `always` to always move to the first live connection.
146
147### Loading contribs is a more robust process
148
149If the Slynk-side of a contrib fails to load for whatever
150reason, a CONTINUE restart is provided. On the SLY side, the user
151can choose to disable that contrib temporarily.
152
153### A lot of cleanup to SLY sources
154
155Courtesy of Zach Shaftel <zshaftel@gmail.com>, sly-cl-indent.el no
156longer clobbers or conflicts with Emacs's own cl-indent.el.  The cl.el
157library is no longer required, not even at compile-time or in tests.
158A lot of cleanup and performance improvements.
159
160### On par with SLIME 2.26
161
162Where applicable, SLY tracks bug-fixes and improvements contributed to
163SLIME:
164
165- More secure handling of ~/.sly-secret files
166
167- Compatibility with the latest SBCL and older SBCL.
168
169- ECL backend now supports threads
170
171- Function `create-server` now accepts optional `interface` argument.
172
173- In SBCL, slynk can be bound to IPv6 interface and can work on IPv6-only machines.
174
175- Clasp/ABCL improvements.
176
177SLY 1.0.0-beta-2 (March 2016)
178-----------------------------
179
180### Improved `sly-stickers` contrib:
181
182There is now updated documentation for this contrib. See
183http://joaotavora.github.io/sly/#SLY-Stickers
184
185Added a menu to help discover the functionality.
186
187Use `M-x sly-stickers-toggle-break-on-stickers` to turn on stepping
188for forms. The debugger pops up with useful restarts and interactive
189buttons.
190
191The "replay" interface, `M-x sly-stickers-replay` has been cleaned up.
192
193### Three new independent SLY contribs
194
195In https://github.com/joaotavora/sly-named-readtables there is an
196external contrib that adds support for Tobias C Rittweiler's
197`EDITOR.HINTS-NAMED.READTABLES`. Available on MELPA.
198
199In https://github.com/joaotavora/sly-macrostep there is a SLY
200contrib for expanding CL macros right inside the source
201file. Available on MELPA.
202
203In https://github.com/joaotavora/sly-quicklisp there is a SLY
204contrib for expanding CL macros right inside the source
205file. Available on MELPA.
206
207These contribs also showcase how third-party contribs with both Elisp
208and CL parts can be written independently of SLY. See
209https://github.com/joaotavora/sly-hello-world for how to write such
210contribs.
211
212### Apropos
213
214Argument list information is present in apropos output like
215this. A suggestion of Javier Olaechea (github #53)
216
217```
218...
219SLYNK:TO-LINE
220  Function: Print OBJECT to a single line. Return the string.
221  Arglist: (OBJECT &OPTIONAL WIDTH)
222...
223```
224
225`M-- sly-apropos` prompts for just the package. A suggestion of Javier
226Olaechea (github #53).
227
228`C-u sly-apropos` allows searching all packages (github #53)
229
230### Macroexpansion
231
232Discovery of the "sexp near point" has been much improved and won't
233error cryptically when there is no macroexpansion possible.
234
235### REPL enhancements
236
237`paredit-mode` works in the REPL, as does Emacs 24.4's
238`electric-pair-mode` or other parenthesis-matching tools, just like in
239any other Lisp buffer.
240
241New variable `sly-mrepl-output-filter-functions` for REPL
242output. These work like `comint-preoutput-filter-functions`. Functions
243like `ansi-color-apply` are good candidates (github #38).
244
245When using multiple REPL, frame variables from SLY-DB triggered in
246secondary REPLs, when returned with M-RET, appear in the correct REPL.
247
248mREPL notes are synched displayed correctly at the "process mark", not
249"output mark". This avoids some `; note` in wrong
250places (github #45).
251
252Popping up SLY-DB buffers from different threads no longer
253misteriously updates a REPL's environment for `*`, `**`, `***`, etc...
254
255Tearing down a reverse-isearch with `C-g` no longer errors (github
256\#39).
257
258### Manual
259
260The "Tips and tricks" section was rewritten.
261
262Keymap documentation was corrected and enhanced by Javier Olaechea
263(github #36).
264
265### Other
266
267The thread-list buffer can now be properly quit. Reported by Javier
268Olaechea (github #51).
269
270Let user ignore protocol mismatches per connection This issue popped
271up in SLIME, where it is still unsolved. See discussion in
272https://github.com/slime/slime/issues/250
273
274`view-mode` bindings no longer creep into SLY's popup
275buffers. By Paul M. Rodriguez.
276
277`sly-inspect-fetch-all` now actually does something (github #49).
278
279`sly-expand-1` and friends error less often and less cryptically when
280no nearby sexp's can be found. The region about to be macroexpanded is
281flashed for visual feedback.
282
283### On par with SLIME 2.14 and 2.15
284
285Where applicable, SLY tracks bugfixes and improvements contributed to
286SLIME:
287
288- Rationals are displayed in the echo area as floats too
289
290- The sly-c-p-c contrib now takes a better guess at symbol case
291  (issue https://github.com/slime/slime/issues/233)
292
293- SBCL backend now able to jump to ir1-translators, declaims and alien types
294
295- Various updates supporting SBCL 1.2.12
296
297- ABCL backend fixed inspection of frame-locals in the debugger
298
299- Following a suggestion by Attile Lendvai to SLIME, mouse-1 is now
300activates SLY's "part buttons".
301
302- SBCL's M-. can locate forms within PROGN/MACROLET/etc. Needs SBCL 1.2.15
303
304### On par with upcoming SLIME 2.16
305
306- SBCL and ABCL support completion of package-local nicknames
307
308- Robustify the indentation cache request handler
309  (issue https://github.com/slime/slime/issues/280)
310
311
312SLY 1.0.0-beta (March 2015)
313----------------------------------------
314
315### mREPL enhancements
316
317In the REPL, a reader macro allows easy backreferences to previously
318returned values. `#v3` will access the first value of the fourth
319values-form ever returned and `#v3:2` will access the third of those
320values. Backreferences are automatically highlighted.
321
322New customization option `sly-mrepl-eli-like-history-navigation` makes
323history navigation via `C-r`, `M-p` and `M-n` keep the current input
324and add the history input at point.
325
326### New commands `sly-next-connection` and `sly-prev-connection`
327
328Replace deprecated `sly-cycle-connections` and provide more feedback.
329
330### On par with SLIME 2.13
331
332Where applicable, SLY tracks bugfixes and improvements contributed to
333SLIME:
334
335- Experimental CLASP support (see `slynk/backend/clasp.lisp`).
336
337- Fix a source-path-parsing bug. A problem raised and solved by Gabor
338  M�lis in http://permalink.gmane.org/gmane.lisp.slime.devel/11543.
339
340- Hot updating via MELPA on won't cause SLYNK/SLY version mismatch
341
342  SLIME issue [125](https://github.com/slime/slime/issues/125)
343
344- Allegro's "modern mode" is supported again.
345
346- Port conflicts can be resolved interactively
347
348  SLIME issue [204](https://github.com/slime/slime/issues/204)
349
350- New `SLYNK-FUZZY:*FUZZY-DUPLICATE-SYMBOL-FILTER*` option.
351
352  SLIME issue [215](https://github.com/slime/slime/issues/215)
353
354- `sly-recompile-xrefs` has been fixed.
355
356- More minor issues.
357
358SLY 1.0.0-alpha-3 (December 2014)
359---------------------------------
360
361### sly-stickers: live source-code annotation tool
362
363`sly-stickers` is a live code annotation tool, a replacement for the
364"print" statements that are often included for debugging the value of
365a particular variable or expression. See a much more complete
366description in http://joaotavora.github.io/sly/#SLY-Stickers.
367
368Thanks to Artem Malyshev for early testing and ideas.
369
370### Documentation rewrite
371
372The documentation rewrite is underway (github issue #9), mentioning
373only a residual amount of SLIME-specific functionality. Browse to
374http://joaotavora.github.io/sly for the online version in HTML.
375
376### SLY is available in MELPA
377
378The README.md file has an updated install recipe, basically `M-x
379package-install RET sly RET`. Thanks to Kan-Ru Chen for the idea.
380
381### mREPL enhancements
382
383The "comma" shortcut for "sayoonara", "restart lisp", "in-package"
384commands has been restored and uses ido-style completion by
385default. Suggested by Javier Olaechea (github #18).
386
387`C-c C-z` switches to the nearest REPL, much like `sly-mrepl-sync`,
388but without changing the REPL's state. Suggested by Javier Olaechea
389(github #13).
390
391`sly-mrepl-sync` is now bound to `C-c ~` in any SLY buffer. A `C-u`
392prefix will also yank the last expression into the current REPL.
393
394New customization variable `sly-mrepl-prevent-duplicate-history`
395offers finer control over saved history.
396
397When a connection disconnects, a status line is inserted in the REPL
398stating the reason for disconnection (network failure, user abort,
399etc...)
400
401### Other enhancements
402
403SLY asks the user to confirm the Lisp to kill with `M-x sly-quit` or
404disconnect with `M-x sly-disconnect`. It also doesn't ask any
405irrelevant questions about switching to a default connection when it
406doesn't exist (github #5).
407
408### Notable bugfixes
409
410* Closed github #26: `sly-mrepl` history saved when killing
411  Emacs. Reported by Javier Olaechea.
412
413* Closed github #24: Common-lisp-style indentation now works in
414  `sly-mrepl`. Reported by Kan-Ru Chen.
415
416* Closed github #22: Compilation with `C-u` debug info now
417  working. Reported by Javier Olaechea.
418
419* Closed github #21: Enable incremental output with dedicated output
420  streams. Reported by Paul M. Rodriguez.
421
422* Closed github #5: `sly-quit` no longer asks irrelevant questions
423
424### Swank is now called Slynk
425
426Slynk is SLY's implementation of Swank, the supporting Lisp server
427where Emacs connects to. A project-wide rename was performed,
428including this NEWS.md file.
429
430A `sly-retro` contrib, enabled by default ensures that:
431
432* SLY can still talk to non-lisp Swank backends
433* SLY can serve requests for the Swank protocol
434* Most user customization in `~/.swankrc` is still valid in SLY.
435
436For details on the architecture of these changes, see the "Swank is
437now called Slynk" in the CONTRIBUTING.md.
438
439Thanks to Zach Beane for the great name.
440
441### On par with SLIME 2.10.1
442
443Where applicable, SLY tracks bugfixes and improvements contributed to
444SLIME:
445
446- `sly-autodoc` has been rewritten by Helmut Eller. Multiline is
447  enabled by default.
448- Experimental support for MKCL has been added
449
450
451SLY 1.0.0-alpha (September 2014)
452--------------------------------
453
454Since this is the first pre-release of SLY since the fork, this entry
455focuses directly on the differences to SLIME.
456
457### Completely redesigned REPL
458
459The `sly-mrepl` contrib is a extensively redesigned
460Read-Eval-Print-Loop (REPL) for SLY.
461
462Multiple independent REPLs can be created with the `sly-mrepl-new`
463command.
464
465`sly-mrepl` is fully based on Emacs's `comint.el` and as such has a
466more familiar interface for history navigation. `C-r` and `C-M-r`,
467when used at the prompt, should provide a bash/zsh-like experience.
468
469The prompt gives a visual indication of long-running evaluations that
470haven't returned yet.
471
472The prompt gives a visual indication of the number of debugger levels
473currently caused by the last evaluation.
474
475Every return part can be inspected and re-returned as the last value.
476
477`C-c ~` on any Lisp file switches to the REPL and synchronized its
478`*PACKAGE*` and `*DEFAULT-PATHNAME-DEFAULTS*` with the file's.
479
480Output redirection is automatically setup. The first REPL created is
481the target for all threads' output onto the standard output
482streams. REPLs created afterward only see their own output. To turn
483this off configure the Slynk-side variable
484`SLYNK-MREPL:*GLOBALLY-REDIRECT-IO*`.
485
486A dedicated stream connection for output is automatically set
487up. Configure the `SLYNK-MREPL:*USE-DEDICATED-OUTPUT-STREAM*` if it
488doesn't suit you.
489
490There is saner scrolling behavior as provided by the `comint.el`
491substrate. The variables `comint-scroll-show-maximum-output`,
492`comint-scroll-to-bottom-on-input` and
493`comint-scroll-to-bottom-on-output` (which see) are set to `nil` by
494default, but the user might reconfigure them to her liking in the
495`sly-mrepl-hook`.
496
497There are Sylvesters. See `sly-mrepl-pop-sylvester`.
498
499### Regexp-capable M-x sly-apropos
500
501If SLY detects that [`cl-ppcre`](http://weitz.de/cl-ppcre/) is
502available in the Lisp side it will try to use it for "apropos"
503searches, otherwise the user is hinted at this possibility. As regexp
504searches are slower, this is only triggered if the pattern is a valid
505regular-expression.
506
507This is the default implementation of the new
508`SLYNK-BACKEND:MAKE-APROPOS-MATCHER` interface that particular
509implementations may wish to override.
510
511The search pattern, whether regexp-enabled or not, is now also applied
512to the package qualifier.
513
514### Contribs enabled by default
515
516By default, SLY enables the `sly-fancy` meta-contrib. This contains
517`sly-mrepl`, `sly-autodoc`, `sly-fancy-inspector`, `sly-fancy-trace`,
518`sly-fuzzy`, `sly-scratch`, `sly-package-fu`, `sly-fontifying-fu`,
519`sly-trace-dialog`, `sly-indentation` and `sly-tramp`.
520
521### SLY uses ASDF and loads contribs on demand.
522
523If the user sets `sly-contribs` to `sly-mrepl` she can be sure that no
524Lisp code related to other contribs appears in your run-time. Even if
525ASDF is unavailable, an improved version of the `slynk-loader.lisp`
526program will behave in a similar non-intrusive manner.
527
528This change also enables developers to write completely independent
529third-party extensions like
530[in this example](http://github.com/joaotavora/sly-hello-world).
531
532See the CONTRIBUTING.md file for more details on architecture changes.
533
534### More consistent interface
535
536The SLY-DB, Inspector, XREF and Apropos buffers have been
537redesigned to use a common class of push button with consistent
538interfaces. These context-aware commands are known as "part actions"
539
540For instance, the `i`,`p` and `M-RET` commands (`sly-button-inspect`,
541`sly-button-pretty-print` and `sly-mrepl-copy-to-repl`) are available
542for every interactive part, regardless of the SLY buffer in
543question. A command such as `v` (`sly-button-show-source`) is only
544available where it makes sense for the represented object.
545
546The same interfaces are also available in the "mREPL" and "Trace
547Dialog" buffers.
548
549`sly-mode` is now activated in every buffer related to SLY is now,
550meaning global keybindings like `C-c T` and `C-c I` work everywhere.
551
552### Multiple inspectors
553
554Interactive commands for inspecting Lisp objects can be prefixed with
555`C-u` to prompt the user for an inspector name. Separate inspector
556streams are kept. An idea by Olof-Joachim Frahm
557(http://macrolet.net/).
558
559### Copy function call to REPL
560
561An experimental feature: from the Trace Dialog or SLY-DB buffers, a
562new button action called "Copy call to REPL" is offered and bound to
563
564If SLY can calculate the arguments and the function symbol of the
565function call represented in the backtrace of trace entry, it will
566return them to the REPL, along with an uncommitted input line that
567refers back to them and calls the function.
568
569### Other miscellaneous enhancements over SLIME
570
571Faces have been revised and are based on Emacs's standard
572faces. Hopefully, SLY will remain readable even when the user
573switches themes.
574
575Popping up windows and buffers has been much improved. Windows are
576reused if the buffer names match or are similar, meaning that no
577longer will the SLY-DB "jump around" in multi-window configurations when
578selecting a restart that signals another error.
579
580Interactive expression evaluation will use a separate buffer when the
581results is too big to fit in the echo area.
582
583SLY's mode-line string is placed at the right side of the mode-line.
584
585SLY intrudes less than SLIME in the Emacs name-space, and uses more
586standard idioms. Macros like `with-struct` and `sly-define-keys` have
587been removed.
588
589Buffer names have been consolidated: every buffer name related to SLY
590obeys the same structure, stating the type, connection name and any
591pertinent additional info.
592
593Reading from the minibuffer has been improved. SLY uses `ido`
594completion by default, but it can customized via
595`sly-complete-symbol-function`.
596
597Messages and warnings prefix themselves accordingly with "[sly]".
598
599Fixed source locations when recompiling from an xref buffer.  This is
600outstanding https://github.com/slime/slime/pull/175 pull-request in
601SLIME. Thanks Bart Botta.
602
603Fixed bugs in `contrib/sly-package-fu.el`. This is the outstanding
604https://github.com/slime/slime/pull/145 pull-request in SLIME. Thanks
605Leo Liu.
606
607### On par with SLIME 2.9
608
609Where applicable, SLY tracks bugfixes and improvements contributed to
610SLIME.
611
612### Anti-NEWS (Things removed from SLIME)
613
614SLY 1.0-Alpha supports Emacs 24.3 only. SLY 1.0 is expected to only
615support Emacs 24.4.
616
617There is very limited backward compatibility SLIME and only in the
618SLIME->SLY direction, meaning a contrib-less SLIME may connect to a
619Slynk server started by SLY, but any other combination will probably
620fail beyond very basic functionality.
621
622The portable profiling commands have been removed from the SLY menu
623`metering.lisp` and the profiling interfaces in `slynk-backend.lisp`
624have been kept. SLY 1.0.0 will hopefully have a better integrated
625portable profiler.
626
627The `slime-presentations` has been removed. The consistent button
628interface is better.
629
630The `slime-c-p-c` contrib has been removed, as it contained a lot of
631non-standard window-managing code. Its functionality has been merged
632into `sly-fuzzy` and setting `sly-complete-symbol-function` to
633`sly-c-p-c-complete-symbol` should give you the previous behavior.
634