lispy 0.24.0 is out
08 Mar 2015The last release was a month ago, and there have been 70 commits to
master since then. If you're not familiar with lispy
, see
my intro post for version 0.21.0.
I'll just copy the release notes here,
while adding a few things.
Fixes
- DEL behaves properly after a string and one space.
- C-k works better for expressions preceded with "#".
- 3 should not add a space when there is one already.
- # will not add a space after a comma.
- C-j works better in comments after a quote.
lispy--eval-elisp-form
first arg is now namedlispy-form
instead ofform
. It was impossible to evaluate an unrelatedform
variable with the previous behavior.- F again works properly when jumping to a jar (e.g. to
defn
) from Clojure source. - C-k won't call
delete-region
in some obscure branches.
Enhancements
- P (
lispy-paste
) will add a newline when called from start of line. This way, nP becomes equivalent to c (lispy-clone
). Of course, it's more flexible: you can do e.g. nkP. - xb (
lispy-bind-variable
) now works on regions as well. Use it to bind the current sexp or region as a let-bound variable: it will put you iniedit
. When you're done withiedit
, press M-m (lispy-mark-symbol
) to exitiedit
. If you need to move the let binding around, use a combination of C (lispy-convolute
) and h (lispy-left
). - g will ignore
loaddefs.el
for Elisp. - M-m works better in unbalanced buffers, which should be an rare thing.
- add
defhydra
tolispy-tag-arity
: now g will recognizedefhydra
statements. - The tag logic was improved to do less parsing.
lispy-outline
was updated to match the standard^;;;
outline regex. Try pressing I in e.g. org.el, it's quite beautiful.- All
lispy-eval
functions will preserve the match data. - > will delete the extra whitespace while slurping.
- Added
undercover
/Coveralls test coverage report. - H (
lispy-ace-symbol-replace
) is now a Hydra: type h to delete more, type u to undo. - Q (
lispy-ace-char
) now usesavy
to jump. This change allows to cover this function with a test.
New features
p can now iterate dolist
variables in Elisp.
(defun range (a b)
(message "called range")
(number-sequence a b))
(dolist |(i (range 1 3))
(message "i=%d" i))
Pressing p with point where |
is, will
- call
range
and seti
to 1 - set
i
to 2 - set
i
to 3 - set
i
to nil - call
range
and seti
to 1
This is another step toward edebug
-less debugging, adding to special behavior for let
, cond
and labels
. Remember that you can drop out of edebug
with Z (lispy-edebug-stop
).
This function will take the current function arguments that edebug
provides, store them in
top-level, and exit edebug
.
This is really cool for setting up entry conditions for a function that you want to debug,
or even a function with an empty body that you want to write. Why am I so eager to exit edebug
?
Because it puts the code in read-only mode, which is quite restrictive.
Incompatible changes
lispy-helm-columns
is now a list'(60 80)
. The first number is the width of the tag name column, the second number is the width of both tag name and tag file. The tag name column is left-aligned, while the file column is right-aligned.- j and k should now move to outline when at beginning of comment. The previous behavior was to look for the first sexp in the direction. You can still do that with f.
- I (
lispy-shiftab
) is now a two-way cycle, instead of three-way, likeorg-mode
. The contents can be obtained with C-u I or C-u C-TAB.
Outro
It seems that lispy
is winding down feature-wise, which is a good
thing, because I'm almost out of keys - there's only Y and
U left.
Possible next steps would be to improve the test coverage (currently
48%) and the documentation. Perhaps I'll try to implement some
automation for generating
the function reference, or learn some
texinfo and write an actual manual, see how ox-texinfo
holds up.
I hope that you'll grow to enjoy lispy
as much as I do. Happy hacking!