147 lines
6 KiB
Org Mode
147 lines
6 KiB
Org Mode
#+TITLE: Common Lisp layer
|
||
|
||
#+TAGS: dsl|layer|lisp|programming
|
||
|
||
[[file:img/slime.png]]
|
||
|
||
* Table of Contents :TOC_5_gh:noexport:
|
||
- [[#description][Description]]
|
||
- [[#features][Features:]]
|
||
- [[#install][Install]]
|
||
- [[#structuraly-safe-editing][Structuraly safe editing]]
|
||
- [[#key-bindings][Key bindings]]
|
||
- [[#working-with-lisp-files-barfage-slurpage--more][Working with lisp files (barfage, slurpage & more)]]
|
||
- [[#leader][Leader]]
|
||
- [[#help][Help]]
|
||
- [[#evaluation][Evaluation]]
|
||
- [[#repl][REPL]]
|
||
- [[#compile][Compile]]
|
||
- [[#navigation][Navigation]]
|
||
- [[#macroexpansion][Macroexpansion]]
|
||
|
||
* Description
|
||
This layer provides support for Common Lisp to Spacemacs.
|
||
|
||
** Features:
|
||
- Syntax highlighting
|
||
- Auto-completion using company
|
||
- Repl support via [[https://github.com/slime/slime][SLIME]]
|
||
- Support for specific lisp navigation styles via =common-lisp-mode=
|
||
- Support for [[http://www.sbcl.org/][sbcl]] backend or any other =common-lisp= implementation
|
||
|
||
* Install
|
||
If you have previously installed slime in any other way, it is recommended that
|
||
you uninstall it before proceeding. You should clean up any config files tied to
|
||
slime that are left behind as well. Linux users can just purge the slime package
|
||
if it was a distribution install.
|
||
|
||
To use this configuration layer, add it to your =~/.spacemacs=. You will need to
|
||
add =common-lisp= to the existing =dotspacemacs-configuration-layers= list in this
|
||
file.
|
||
|
||
This layer defaults to using [[http://www.sbcl.org/][sbcl]]. If you want to use a different implementation
|
||
of Common Lisp, you can specify it in your =~/.spacemacs=
|
||
|
||
#+BEGIN_SRC emacs-lisp
|
||
(defun dotspacemacs/user-config ()
|
||
(setq inferior-lisp-program "/path/to/your/lisp"))
|
||
#+END_SRC
|
||
|
||
* Structuraly safe editing
|
||
This layer adds support for =evil-cleverparens= which allows to safely edit
|
||
lisp code by keeping the s-expressions balanced.
|
||
|
||
By default this mode is not activated. You can turn it on locally on the active
|
||
buffer with ~SPC m T s~ (=s= for safe).
|
||
|
||
To turn it on automatically for all =common-lisp= buffers call the following
|
||
function in your =dotspacemacs/user-config= function:
|
||
|
||
#+BEGIN_SRC emacs-lisp
|
||
(spacemacs/toggle-evil-safe-lisp-structural-editing-on-register-hook-common-lisp-mode)
|
||
#+END_SRC
|
||
|
||
or to enable it for all supported modes:
|
||
|
||
#+BEGIN_SRC emacs-lisp
|
||
(spacemacs/toggle-evil-safe-lisp-structural-editing-on-register-hooks)
|
||
#+END_SRC
|
||
|
||
When enabled the symbol =🆂= should be displayed in the mode-line.
|
||
|
||
* Key bindings
|
||
** Working with lisp files (barfage, slurpage & more)
|
||
Spacemacs comes with a special =lisp-state= for working with lisp code that
|
||
supports slurpage, barfage and more tools you’ll likely want when working with
|
||
lisp.
|
||
|
||
As this state works the same for all files, the documentation is in global
|
||
[[https://github.com/syl20bnr/spacemacs/blob/master/doc/DOCUMENTATION.org#lisp-key-bindings][DOCUMENTATION.org]]. In general, use ~SPC k~ to interact with the lisp-state.
|
||
|
||
** Leader
|
||
*** Help
|
||
|
||
| Key binding | Description |
|
||
|-------------+---------------------------------------------------------|
|
||
| ~SPC m h a~ | SLIME apropos |
|
||
| ~SPC m h d~ | Disassemble symbol at point |
|
||
| ~SPC m h h~ | Describe symbol at point |
|
||
| ~SPC m h i~ | Inspect definition |
|
||
| ~SPC m h H~ | Hyperspec lookup symbol at point |
|
||
| ~SPC m h p~ | Browse apropos results for a package’s exported symbols |
|
||
| ~SPC m h t~ | Toggle tracing of the function at point |
|
||
| ~SPC m h T~ | Untrace all functions |
|
||
| ~SPC m h <~ | Show all known callers |
|
||
| ~SPC m h >~ | Show all known callees |
|
||
| ~SPC m h m~ | Show all usages of a macro |
|
||
| ~SPC m h r~ | Show references to global variable |
|
||
| ~SPC m h s~ | Show all methods specialized on a class |
|
||
|
||
*** Evaluation
|
||
|
||
| Key binding | Description |
|
||
|-------------+---------------------------------------------------|
|
||
| ~SPC m e b~ | Evaluate buffer |
|
||
| ~SPC m e c~ | Evaluate parent sexp of current form around point |
|
||
| ~SPC m e C~ | Evaluate current =def= or =set= form around point |
|
||
| ~SPC m e e~ | Evaluate last sexp |
|
||
| ~SPC m e l~ | Go to end of line and evaluate last sexp |
|
||
| ~SPC m e f~ | Evaluate top level sexp |
|
||
| ~SPC m e F~ | Undefine the function at point |
|
||
| ~SPC m e r~ | Evaluate region |
|
||
| ~SPC m e s~ | Evaluate symbol around point |
|
||
|
||
*** REPL
|
||
|
||
| Key binding | Description |
|
||
|-------------+----------------------------------|
|
||
| ~SPC m s i~ | Start an inferior process |
|
||
| ~SPC m s e~ | Evaluate last expression in REPL |
|
||
| ~SPC m s q~ | Quit |
|
||
|
||
*** Compile
|
||
|
||
| Key binding | Description |
|
||
|-------------+--------------------------|
|
||
| ~SPC m c c~ | Compile file |
|
||
| ~SPC m c C~ | Compile file and load it |
|
||
| ~SPC m c l~ | Load file |
|
||
| ~SPC m c n~ | Remove compilation notes |
|
||
| ~SPC m c f~ | Compile function |
|
||
| ~SPC m c r~ | Compile region |
|
||
|
||
*** Navigation
|
||
|
||
| Key binding | Description |
|
||
|---------------------------+------------------|
|
||
| ~SPC m g g~ | Go to definition |
|
||
| ~SPC m g b~ | Go back |
|
||
| ~SPC m g n~ | Next note |
|
||
| ~SPC m g N~ or ~SPC m g p | Previous note |
|
||
|
||
*** Macroexpansion
|
||
|
||
| Key binding | Description |
|
||
|-------------+-----------------------------------------------|
|
||
| ~SPC m m a~ | Macroexpand the expression at point completly |
|
||
| ~SPC m m o~ | Macroexpand the expression at point once |
|