Skip to content
Oleh Krehel edited this page Apr 7, 2015 · 1 revision

Intro

lispy-alt-multiline can be used on a LISP expression to re-format it across multiple lines.

This has to be done with some rules, since a one-line expression can transform to multiple viable multi-line forms. So far, these rules are implemented by customizing these variables:

(defvar lispy--multiline-take-3
  '(defvar defun defmacro defcustom defgroup)
  "List of constructs for which the first 3 elements are on the first line.")

(defvar lispy--multiline-take-2 '(defface define-minor-mode
  condition-case while incf car cdr > >= < <= eq equal incf decf
  cl-incf cl-decf catch require provide setq cons when if unless interactive)
  "List of constructs for which the first 2 elements are on the first line.")

Usage

There's actually a family of commands available:

  • lispy-alt-multiline is bound to T
  • lispy-multiline is bound to M
  • lispy-oneline is bound to O

All of these apply to the current expression. To be really sure which one, turn on show-paren-mode. You can also call these functions not from special, although this isn't very convenient.

The difference between M and T is that M is older and ad-hoc, while T is newer and rule-based. This means that the latter can misbehave, since it's not yet fully tested. However, it has the following built-in check to make sure that it doesn't mess up your code:

The read expression before transformation should be equal to the read transformed expression

If the above check fails, no change will be performed on the source code.

Demo

In the following image, I just press T once, starting from an unchanged buffer:

lispy-alt-multiline-1.gif

Clone this wiki locally