#+title:    :editor lispy
#+subtitle: Vim for lisp, for people who don't like vim
#+created:  October 27, 2018
#+since:    2.0.0

* Description :unfold:
This module adds a keybind scheme for navigating and editing S-expressions in
Lisps; including S-exp awareness for Evil users. This affects the following
languages:

- Common Lisp
- Emacs Lisp
- Scheme
- Racket
- [[http://docs.hylang.org/en/stable/][Hy]]
- [[http://lfe.io/][LFE]]
- Clojure
- [[https://fennel-lang.org][Fennel]]

** Maintainers
*This module needs a maintainer.* [[doom-contrib-maintainer:][Become a maintainer?]]

** Module flags
/This module has no flags./

** Packages
- [[doom-package:lispy]]
- [[doom-package:lispyville]] if [[doom-module::editor evil +everywhere]]

** Hacks
/No hacks documented for this module./

** TODO Changelog
# This section will be machine generated. Don't edit it by hand.
/This module does not have a changelog yet./

* Installation
[[id:01cffea4-3329-45e2-a892-95a384ab2338][Enable this module in your ~doom!~ block.]]

/This module has no external requirements./

* TODO Usage
#+begin_quote
 󱌣 /This module's usage documentation is incomplete./ [[doom-contrib-module:][Complete it?]]
#+end_quote

If [[doom-module::editor evil]] is enabled, [[doom-package:lispyville]] would also be activated for every mode
where [[doom-package:lispy]] is active.

* TODO Configuration
#+begin_quote
 󱌣 /This module's configuration documentation is incomplete./ [[doom-contrib-module:][Complete it?]]
#+end_quote

The default key themes that are set are as follows:
#+begin_src emacs-lisp
'((operators normal)
  c-w
  (prettify insert)
  (atom-movement normal visual)
  slurp/barf-lispy
  additional
  additional-insert)
#+end_src

To change the key themes set ~lispyville-key-theme~. Think of
~lispyville-key-theme~ as the equivalent of ~parinfer-extensions~. See
lispyville's [[https://github.com/noctuid/lispyville/blob/master/README.org][README]] for more info on the specific keybindings of each key theme
(starting [[https://github.com/noctuid/lispyville#operators-key-theme][here]]).

** Working with Brackets

By default, =[= and =]= are [[https://github.com/noctuid/lispyville/tree/master#additional-movement-key-theme][bound]] to =lispyville-previous-opening= and
=lispyville-next-closing= respectively. If you use a language which makes frequent
use of brackets (e.g. Clojure, Racket, Scheme), you can insert a bracket pair =[]=
by typing ={=. If you prefer to use the bracket keys for input, you can rebind
them like below:

#+begin_src emacs-lisp
;; in $DOOMDIR/config.el

(map! :after (lispy lispyville)
      :map lispy-mode-map-lispy
      ;; unbind individual bracket keys
      "[" nil
      "]" nil
      ;; re-bind commands bound to bracket keys by default
      "M-[" #'lispyville-previous-opening
      "M-]" #'lispyville.next-opening)
#+end_src

* Troubleshooting
[[doom-report:][Report an issue?]]

** Mouse wheel and =wrap=/=additional-wrap= key themes in TTY Emacs ([[https://github.com/hlissner/doom-emacs/issues/2573][#2573]])
lispyville binds [[kbd:][M-[]] to ~lispyville-wrap-brackets~ when the =wrap= or
=additional-wrap= key themes are enabled. In terminal Emacs, this is the key
Emacs receives when you scroll with your mouse wheel.

* Frequently asked questions
/This module has no FAQs yet./ [[doom-suggest-faq:][Ask one?]]

* TODO Appendix
#+begin_quote
 󱌣 This module has no appendix yet. [[doom-contrib-module:][Write one?]]
#+end_quote
