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-formfirst arg is now namedlispy-forminstead ofform. It was impossible to evaluate an unrelatedformvariable 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-regionin 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.elfor Elisp. - M-m works better in unbalanced buffers, which should be an rare thing.
- add
defhydratolispy-tag-arity: now g will recognizedefhydrastatements. - The tag logic was improved to do less parsing.
lispy-outlinewas updated to match the standard^;;;outline regex. Try pressing I in e.g. org.el, it's quite beautiful.- All
lispy-evalfunctions 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 usesavyto 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
rangeand setito 1 - set
ito 2 - set
ito 3 - set
ito nil - call
rangeand setito 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-columnsis 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!