Minor mode for Emacs that deals with parens pairs and tries to be smart about it.
Emacs Lisp Shell
Latest commit 9682ba9 Nov 1, 2017 @Fuco1 Fuco1 Merge pull request #805 from alexmurray/narrow-after-syntax-ppss-check
Narrow in `sp-region-ok-p` after doing syntax checks
Permalink
Failed to load latest commit information.
.github Fix grammar Oct 20, 2017
dev Add a dev note about pair settings inheritance Jul 1, 2017
docs [docs] Add permissions Jun 18, 2017
images Reworking README to showcase best features. Dec 12, 2015
test Add org-mode configuration Oct 21, 2017
.gitignore Ignore local stuff locally in .git/info/exclude Mar 12, 2017
.travis.yml Build for 25.2 Oct 15, 2017
Cask [Fix #710] Add setup for ' in haskell-mode Oct 15, 2017
LICENSE [Issue #295] Add LICENSE Feb 4, 2014
README.md Use my personal email for paypal Sep 22, 2017
make-release.sh Make release script executable Apr 24, 2017
smartparens-clojure.el Match "`" with "`" in Clojure-related modes Oct 15, 2016
smartparens-config.el Add org-mode configuration Oct 21, 2017
smartparens-elixir.el Fix handling of commas during slurp and barf in elixir-mode Jul 22, 2017
smartparens-ess.el Fix apostrophe in ESS comments Jul 5, 2017
smartparens-haskell.el Add LiquidHaskell pragma Oct 29, 2017
smartparens-html.el [Fix #797] Remove obsolete variable sp-navigate-consider-stringlike-sexp Oct 19, 2017
smartparens-javascript.el Add typescript-mode to smartparens-javascript.el (#748) May 24, 2017
smartparens-latex.el [Fix #797] Remove obsolete variable sp-navigate-consider-stringlike-sexp Oct 19, 2017
smartparens-lua.el Add missing docstrings to silence doccheck Mar 11, 2017
smartparens-markdown.el [Fix #804] Do not rebind wrap keys in markdown mode Oct 31, 2017
smartparens-ml.el Add fsharp-mode Jun 4, 2017
smartparens-org.el Add org-mode configuration Oct 21, 2017
smartparens-pkg.el Release 1.10.1 Apr 24, 2017
smartparens-python.el [Fix #320] Properly rewrap python's tripple-quotes. May 11, 2017
smartparens-racket.el Add configuration for racket modes Oct 27, 2015
smartparens-ruby.el [Fix #797] Remove obsolete variable sp-navigate-consider-stringlike-sexp Oct 19, 2017
smartparens-rust.el [Fix #793][rust-mode] Do not parse > where it is not a valid delimiter Oct 19, 2017
smartparens-scala.el Add missing SPC trigger Jul 1, 2017
smartparens-text.el [Fix #713] Support insertion of emoticons in strict mode in text-mode Jul 16, 2017
smartparens.el Narrow in `sp-region-ok-p` after doing syntax checks Nov 1, 2017

README.md

Smartparens

MELPA Documentation Status MELPA Stable Documentation Status Build Status Coverage Status Paypal logo Patreon

Table of Contents

Smartparens is a minor mode for dealing with pairs in Emacs.

It can automatically insert pairs:

smartparens insert

wrap, unwrap and rewrap pairs:

smartparens wrapping

expand and contract pairs:

smartparens slurping

navigate pairs:

smartparens navigating

and much more!

Getting Started

We generally target GNU Emacs version 24.3 and newer, however, everything should work mostly fine on anything newer than version 24.

You can install smartparens from MELPA. Once installed, enable the default configuration:

(require 'smartparens-config)

You can now use smartparens with M-x smartparens-mode. To automatically enable smartparens in a programming mode:

;; Always start smartparens mode in js-mode.
(add-hook 'js-mode-hook #'smartparens-mode)

You may want to try smartparens-strict-mode. This enforces that pairs are always balanced, so commands like kill-line keep your code well-formed.

Usage

Inside Emacs, M-x sp-cheat-sheet will show you all the commands available, with examples.

There's also a great article demonstrating movement and editing in smartparens and extensive documentation in the wiki.

Contributing

We love pull requests. Please include tests. Smartparens uses ert-runner for testing. To run all the tests, run:

$ cask exec ert-runner

Alternatively, you can open the individual files in Emacs, then M-x eval-buffer M-x ert.

You can learn more about how we test on the testing wiki page.

Language Support

Smartparens has a default configuration that works well for most languages. For language-specific behaviour, smartparens has a separate smartparens-FOO.el file for every language and smartparens-config.el loads these automatically.

Supporting Smartparens

If you want to support this project, you can:

  • Contribute code. If you have an idea that is not yet implemented and will benefit this project, feel free to implement it and submit a pull request. If you have any concerns whether your contribution will be accepted, ask beforehand. You can email the author or start an issue on the tracker.

  • Contribute ideas. Even if you can't code Emacs Lisp, you can still contribute valuable ideas for other programmers to implement. Simply start new issue on the tracker and submit your suggestion.

  • You can make a financial donation through PayPal or Patreon. If you like smartparens and can spare a modest amount on a donation, feel free to do so. These donations are expressions of your gratitude and are used for my personal "rewards" (books, games, music etc.). You can also gift me a game on Steam or buy something on Amazon. Regardless of the donations, smartparens will always be free both as in beer and as in speech.

Related Projects

Other Emacs projects that deal with pairs include:

Smartparens aims to provide a superset of these features, in all programming languages.