1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822
|
* Paredit Release Notes -*- outline -*-
paredit -- parenthetical editing in Emacs
https://paredit.org
Latest release: https://paredit.org/paredit.el
Current development version: https://paredit.org/paredit-beta.el
** Version 27 (beta)
*** Improved some edge cases in paredit-kill with kill-whole-line enabled.
**** Many other edge cases are slightly broken; patches welcome!
*** Enabled lexical-binding.
** Version 26 -- 2022-11-26
Minor bug fix release, mainly to set a new branch scheme:
- `master' branch is where development and releases happen
=> on release, one commit to remove beta and a second to bump version
- `release' branch points at latest release commit on master
- no `maint-N' branches
This replaces the old scheme where master was branched into maint-N and
then the beta tag was stripped off in the maint-N branch, which meant
no one branch would automatically track the current release as ELPA
prefers.
Other changes:
*** M-s (paredit-splice-sexp) now restores column in text fields like ielm.
*** Deletion now respects `delete-active-region'.
** Version 25 -- 2022-11-25
*** paredit now lives at paredit.org.
*** M-r (paredit-raise-sexp) now respects active mark in Transient Mark Mode.
*** Paredit Mode and Electric Indent Mode are noted as incompatible.
*** M-q (paredit-reindent-defun) now respects `fill-paragraph-function'.
*** New variables `paredit-comment-prefix-...' for `paredit-comment-dwim'.
*** Reading character in Backslash escape now inherits input method.
*** M-r (paredit-raise-sexp) no longer reindents single-line sexps.
*** Various bug fixes and additions to test suite.
*** Worked around brokenness induced by Electric Indent Mode.
**** (Thanks to Sean Whitton for reporting the bug and discussing the fix.)
NOTE: The Electric Indent Mode workaround turns out to break ielm and
other interactive modes, because paredit now defines RET, overriding
the binding in interactive modes that submits an input.
Workaround to restore the old behaviour:
(define-key paredit-mode-map (kbd "RET") nil)
(define-key paredit-mode-map (kbd "C-j") 'paredit-newline)
Recommended to disable Electric Indent Mode at the same time.
** Version 24 -- 2014-12-06
*** Slurp/barf now support prefix arguments with the obvious semantics.
*** HTML quick reference is a little prettier now, perhaps.
*** paredit.el no longer defines `backward-down-list'.
*** Slurp `(|) foo' now yields `(|foo)', not the frustrating `(| foo)'.
*** C-M-f/C-M-b (paredit-forward/paredit-backward) now move out of strings.
*** Changed M-" (paredit-meta-doublequote) to not break line, like M-).
*** New command: paredit-meta-doublequote-and-newline has old behaviour.
*** Several commands preserve indentation and point column better.
*** Motion commands support shift selection in GNU Emacs 24 and later.
*** `backward-delete-char' changes in GNU Emacs 24 no longer botch paredit.
*** Various bug fixes.
** Version 23 -- 2013-04-07
Paredit no longer runs in GNU Emacs 20. It now requires 21 or later.
Paredit now has a small set of automatic tests.
*** New key: `M-?' is bound to `paredit-convolute-sexp'
*** New variable: paredit-override-check-parens-function
*** New command: paredit-delete-region
*** New command: paredit-kill-region
*** Renamed command: paredit-recentre-on-sexp -> paredit-recenter-on-sexp
*** Various bug fixes.
** Version 22 -- 2010-10-09
The copying terms of paredit are now the GPLv3+, rather than the
3-clause BSD licence.
*** Style and Bugs
- paredit.el now has a header and footer conforming to the elisp
guidelines, so that it can be used with package.el.
- `paredit-mode' now has an autoload cookie.
- Miscellaneous bugs have been fixed, mostly to make paredit behave the
way it should when before it would simply signal an error, or to make
paredit signal an error when before it would do something bogus.
*** Altered Behaviour
- `paredit-raise-sexp' (M-r) now works when inside strings and
characters.
- `paredit-comment-dwim' (M-;) behaves slightly differently in the
following case:
(foo bar
|baz
quux)
Before:
(foo bar
baz ;|
quux)
After:
(foo bar
;; |
baz
quux)
- `paredit-raise-sexp', `paredit-splice-sexps', and
`paredit-comment-dwim' reindent a little more selectively.
- `paredit-newline' tries to keep invalid structure inside comments.
- `paredit-kill' now works in any string-like object, not just those
with double-quotes. E.g., Common Lisp's |...| notation for symbols.
- After `...)', inserting a double-quote will insert a space too. See
also `paredit-space-for-delimiter-predicates', below.
*** New Commands
- `paredit-copy-as-kill' is to `paredit-kill' as `copy-region-as-kill'
is to `kill-region'. That is, `paredit-copy-as-kill' copies the
region that would be killed with `paredit-kill', but does not kill
the region.
- `paredit-semicolon' is back, with better behaviour.
- `paredit-{for,back}ward-{up,down}' move up and down the list
structure, like `{backward-,}{up,down}-list', but also enter and exit
strings when appropriate. C-M-u, C-M-d, C-M-p, and C-M-u are now
bound to these commands.
- `paredit-kill-ring-save' and `paredit-kill-region' are an experiment
for killing regions without destroying structure -- specifically.
Later, I hope to implement `paredit-yank', although it is much
trickier to implement.
*** New Variables
- `paredit-space-for-delimiter-predicates' is a list controlling when
inserting a delimiter causes insertion of a space too. See the
documentation string for details. Example use, to make paredit less
frustrating with Common Lisp's #P, #A, #-, and #+ notations:
(defvar common-lisp-octothorpe-quotation-characters '(?P))
(defvar common-lisp-octothorpe-parameter-parenthesis-characters '(?A))
(defvar common-lisp-octothorpe-parenthesis-characters '(?+ ?- ?C))
(defun paredit-space-for-delimiter-predicate-common-lisp (endp delimiter)
(or endp
(let ((case-fold-search t)
(look
(lambda (prefix characters n)
(looking-back
(concat prefix (regexp-opt (mapcar 'string characters)))
(min n (point))))))
(let ((oq common-lisp-octothorpe-quotation-characters)
(op common-lisp-octothorpe-parenthesis-characters)
(opp common-lisp-octothorpe-parameter-parenthesis-characters))
(cond ((eq (char-syntax delimiter) ?\()
(and (not (funcall look "#" op 2))
(not (funcall look "#[0-9]*" opp 20))))
((eq (char-syntax delimiter) ?\")
(not (funcall look "#" oq 2)))
(else t))))))
(add-hook 'common-lisp-mode-hook
(defun common-lisp-mode-hook-paredit ()
(make-local-variable 'paredit-space-for-delimiter-predicates)
(add-to-list 'paredit-space-for-delimiter-predicates
'paredit-space-for-delimiter-predicate-common-lisp)))
** Version 21 -- 2008-07-24
Paredit 21 no longer has a message releasing it into the public domain.
Instead it is copyright (C) 2008, Taylor R. Campbell, and available
under the terms of the 3-clause BSD licence. See the paredit.el file
for details.
*** Style and Bugs
- Use of the terms `parenthesis', `bracket', and `delimiter' has been
clarified throughout the file:
. /Parentheses/ are nestable objects indicated by matching delimiter
pairs. For example, the text `(foo (bar baz) quux)' has two
parentheses, `(foo ... quux)' and `(bar baz)'; each is delimited
by matching round delimiters.
. /Delimiters/ are the actual atomic objects that delimit
parentheses. They may be shaped differently; for example, `[' is
an opening square delimiter, and `{' is an opening curly
delimiter.
. The terms `bracket', `brace', and `brocket' (the latter a
misspelling of `broket', for `broken bracket') are eschewed.
The names `paredit-open-parenthesis' &c. have been changed to
`paredit-open-round' &c., and likewise with `bracket' -> `square',
`brace' -> `curly', and `brocket' -> `angled'. The old names with
the morphemes `parenthesis' and `bracket' have been preserved so that
users need not update initialization files immediately, but will
instead be confused when a subsequent minor update breaks all their
initialization files for no good reason.
- Some commands now check their context more strictly, so that they
won't try to do anything in comments or strings. Whether this is the
right thing, I don't know.
- Several small elements of style were adjusted. This should make no
functional difference on the code. (If it does, then I have made a
mistake.)
- paredit.el no longer defines `kill-region-new'; the function is
instead called `paredit-hack-kill-region', to reflect its hackish
nature and to avoid name clashes. I believe that the only name
remaining defined by paredit.el without `paredit-' prefixed is
`backward-down-list', whose definition is so obvious that it would be
silly to define it any other way, so that any name conflict does not
worry me. (I suppose `kill-region-new' is obvious, too -- it is to
`kill-region' as `kill-new' is to `kill'. But the omission from a
pattern isn't as clear as with `backward-down-list'.)
- `paredit-comment-dwim' should work in GNU Emacs 21 now, whose
newcomment.el defines no `comment-or-uncomment-region'. More and
more ugly compatibility hacks are accruing in paredit.el as a
consequence, to my dismay. Oh well.
- The release notes are now formatted more legibly, paginated nicely,
and organized with Outline Mode. The gross discrepancy in writing
style over the years has not changed.
- The introductory comments in the file are more clearly written now.
- Fixed a bug in S-expression slurpage with mixed delimiters.
*** Altered Behaviour
- The bindings for `)' and `M-)' have been exchanged: `)' is bound to
`paredit-close-round' and `M-)' to `paredit-close-round-and-newline',
so that you can now without any glaring exceptions type new code
using the same keystrokes with and without Paredit Mode. You can
also now paste into Emacs through a terminal without leaving spurious
blank lines in the buffer. You are, of course, free to revert to the
old behaviour in your .emacs file.
- `paredit-semicolon' is no more. Now you may insert semicolons as
you please without the infuriating escape of the following text on
the line.
- `paredit-move-past-close-and-newline' will now leave comments on the
same line only if they are margin comments and no S-expressions are
intervening between the point and the comment; that is, only if it
looks like the margin comment really pertains to the expression being
closed will paredit leave it on the same line.
- `paredit-backward-delete', `paredit-forward-delete', and
`paredit-kill' formerly accepted prefix arguments to run the basic
`backward-delete-char', `delete-char', and `kill-line' commands
instead, without regard for the value of the prefix argument. Now
`C-u' will run the basic commands, but
. `paredit-kill' will pass a numeric argument on to `kill-line', and
. `paredit-backward-delete' and `paredit-forward-delete' will both
delete N characters if given a numeric prefix argument N.
(`paredit-kill' should probably do the same, but repeating the
command N times is probably not what you want -- what you probably
want is to kill at most N *lines*, but `paredit-kill' N times might
kill many more lines than that. I don't know what the right thing is
here, but I welcome feedback from users who want to do something like
this.)
- With a `C-u' prefix argument, `paredit-wrap-sexp' now wraps all
S-expressions following the point until the end of the buffer or a
closing delimiter.
- `paredit-splice-sexp' with a `C-u' prefix argument (also known as
`paredit-splice-sexp-killing-backward') will now kill from the point,
rather than from the beginning of the next S-expression (or, with
`C-u C-u', from the end of the previous S-expression). This means
that it is more likely to do what you mean with
(let ((a b) (c d))
|;; I want to preserve this comment after `C-u M-s'.
(foo bar baz))
- `paredit-splice-sexp' now splices strings, by removing backslash
escapes, or signals an error if doing so would destroy the structure
of the buffer.
- I have finally introduced the first bit of code to try to deal
sensibly with broken buffers. It will probably go only downhill from
here, and continue in an interminable series of kludges to handle
every possible way in which the buffer can go *wrong* (it's bad
enough how many ways it can be *right*). If you try type a closing
delimiter from within a partial S-expression that has an opening
delimiter but no closing delimiter, then it will honk at you and
insert the closing delimiter -- or if what you typed doesn't match
the opening delimiter, it will just honk and refuse to do anything.
Also, `DEL' and `C-d' will delete spurious (but not [yet] mismatched)
opening and closing delimiters, respectively. (Thanks to John
Wiegley for inspiring me to do these dreary deeds.)
*** New Commands
- New command `paredit-yank-pop' cooperates with `paredit-wrap-sexp' by
behaving either like `yank' or like `yank-pop' if the previous
command was `paredit-wrap-sexp' or `paredit-yank-pop', and with the
added bonus of reindenting the newly wrapped form. It is in need of
a key to be bound to it; since it is different from both `yank' and
`yank-pop', I decided not to override `C-y' or `M-y', and I
considered `C-c C-y', but I imagine that many major modes want to
take that.
- New command `paredit-focus-on-defun' moves display to the top of the
definition at the point.
- New command `paredit-reindent-defun', which `M-q' is bound to in
Paredit Mode, indents the definition the point is on, or, if the
point is in a string or comment, fills the paragraph instead.
(Thanks to John Wiegley for the idea.)
- New variations on slurpage, barfage, and joinage. I'm still looking
for keys to bind to these commands. Find them with the strings
`add-to-{previous,next}-list' and `join-with-{previous,next}-list' in
their names. (Again, thanks to John Wiegley for the idea.)
- New command `paredit-convolute-sexp' performs the combined function
of `paredit-splice-sexp-killing-backward', `paredit-wrap-sexp', and
`yank'. Example:
(let ((foo bar))
(let ((baz quux))
|(zot mumble)
(frotz))
(gargle mumph))
->
(let ((baz quux))
(let ((foo bar))
(zot mumble)
(frotz)
(gargle mumph)))
This would otherwise have been done with the key sequence `C-u M-s
C-M-u M-( C-y C-M-u C-M-q'. `C-u M-s' could be `M-up', and `C-y
C-M-u C-M-q' could be `C-c C-y' if that key is chosen for
`paredit-yank-pop', making the sequence `M-up C-M-u M-( C-c C-y'. If
there is a good key for `paredit-convolute-sexp', it could be a nice
improvement over even that terser sequence. (Once again, this was
inspired by John Wiegley's idea (and name).)
[Observe, though, that the form (FROTZ) stuck with (ZOT MUMBLE) the
whole time, and was not carried along as the `end' of the (LET ((BAZ
QUUX)) ...) form. Hence this is *not* the idea mentioned below by
the name `paredit-interchange-sexps', but a simpler approximation of
the idea.]
- `define-paredit-pair' now defines commands `paredit-wrap-...' for
wrapping S-expressions with different delimiters, like
`paredit-wrap-sexp'. The function `paredit-wrap-sexp' now accepts
optional arguments for the delimiters to insert; the new commands are
defined in terms of the modified `paredit-wrap-sexp'. `M-[' is now
bound to `paredit-wrap-square'.
** Version 20 -- 2007-04-04
*** Preliminary Support for XEmacs
This version introduces preliminary support for XEmacs. The changes
needed were:
- `check-parens' is called by the `paredit-mode' initialization only if
it is fbound.
- The forward and backward deletion keys are specified differently in
GNU Emacs and XEmacs.
- `paredit-forward' and `paredit-backward' use a "_" interactive
specification in XEmacs in order to preserve the mark.
- `paredit-region-active-p' is just `region-active-p' in XEmacs.
- Some hair was needed to handle S-expression parse error conditions
properly, and versions of XEmacs earlier than 21.5 may have obscure
problems as a result.
*** Style and Bugs
- rxvt-specific terminal escape sequences are no longer bound to the
commands that the keys those sequences denote are. Set your
environment variables correctly and keep your rxvt.el updated.
(Aren't terminals fun?)
- HTML output is now properly quoted. Some vestigial indirections in
the tables have been removed.
- Yet *ANOTHER* `paredit-kill' bug is fixed. I do not know what the
bug is or why it happened, but it seems to be gone now.
- Improved robustness of `paredit-join-sexps' and `paredit-splice-sexp'
with respect to their use in the middle of atoms, and made splicing
within a string illegal.
- Fixed several bugs in the paredit word killing commands. In the
process, however, I encountered what seems to be a bug in Emacs's
`parse-partial-sexp', which may mean bugs in other things...
- Eliminated dependency on `cl' feature.
- Fixed a bug in `paredit-backward-kill-word' that would cause deletion
of the first double-quote in `(foo "|")'.
- Fixed a bug with `paredit-backward-kill-word' at the end of buffer.
- Fixed a bug with `paredit-backward-kill-word' before any words in a
buffer.
*** Altered Behaviour and New Functionality
- `paredit-mode' now accepts a prefix argument to mean that it should
not check the parentheses in the buffer first. Supply the prefix
argument with care; though it is useful for editing small parts of a
buffer in Lisp when the rest is random, it might also screw the whole
buffer up in unpredictable ways, because most of paredit doesn't
even try to handle invalid structure.
- Parenthesis blinking is improved somewhat to better respect user
customization of `blink-matching-paren'.
- The paredit minor mode no longer exchanges C-j & RET; following the
GNU Emacs conventions, it now leaves RET alone and binds C-j to
`paredit-newline'. Those of you, such as me, who relied on the old
exchange will have to update your .emacs files.
- C-left and C-right are now bound to paredit-forward-barf-sexp and
paredit-forward-slurp-sexp, instead of M-left and M-right, whose word
motion bindings are no longer shadowed.
- The behaviour of (, ", M-(, and M-" with respect to active regions
and prefix arguments has been regularized:
. With neither an active region, i.e. an active mark and
transient-mark-mode, ( and " will insert a pair of delimiters at
the point, and M-( and M-" will wrap the following expression with
delimiters.
. With an active region and no prefix argument, if and only if the
region contains only balanced expressions, all four commands will
wrap the region with the respective delimiters.
. With a prefix argument N, all four commands will wrap the next N
expressions with the commands' respective delimiters.
" and M-", of course, escape any characters that need escaping first
if they are used to wrap regions.
- Implemented slurpage into strings.
- Made `M-- M-s' equivalent to `M-- M-1 M-s'.
- Changed `paredit-insert-pair' so that it will not skip whitespace
before inserting the pair.
- `paredit-splice-sexp' with a prefix argument and friends (i.e. `M-s',
`M-<up>', and `M-<down>') now always create a new entry on the kill
ring.
** Version 19 -- 2006-03-28
This version introduces support for delimiters other than round
brackets. Previously, if the major mode's syntax table considered
square brackets (and curly braces, &c.) to be delimiters, since no
paredit commands would insert them balanced, deleting them would be
tricky: paredit's DEL & C-d bindings would refuse to delete them
because they would be imbalanced unless you manually type the closing
delimiter.
Now commands are defined for the opening and closing of parentheses
(round), brackets (square), braces (curly), and brockets (angled),
named `paredit-open-<type>', `paredit-close-<type>-and-newline', and
`paredit-close-<type>'; paredit-mode binds the opening and closing
square bracket keys to be `paredit-open-bracket' and `paredit-close-
bracket', respectively. The rest you can bind yourself; this minimal
pair of bindings will, I think, account for accidental insertion,
elisp vectors, and (bletch) the equation of square and round brackets
as parentheses in some non-standard Scheme extensions.
Also now supported in this version is insertion of delimiter pairs
around active regions in transient-mark-mode. If you mark a region
with transient-mark-mode enabled, you can use any of the delimiter
pair insertion keys (like opening round bracket, double-quote, &c.)
to insert a pair of delimiters around the region. There are now two
ways to parenthesize lists of expressions with visual feedback: using
M-( (paredit-wrap-sexp) followed by C-) (paredit-forward-slurp-sexp)
until satisfied, and now C-M-SPC (mark-sexp) until you have marked
the desired expressions and then any of the delimiter pair insertion
keys to insert the delimiters.
** Version 18 -- 2006-02-11
*** Style and Bugs
- Corrected terminal arrow key sequences *again*. M-left and M-right
were backwards.
- Put the save-excursion back in paredit-recentre-on-sexp. I don't
remember why it was taken out in version 13.
- Fixed HTML output to stop producing spurious <tr> tags.
- Corrected a number of paredit command examples.
- Aesthetic changes to the code:
. Regularized some aspects of code style.
. Repaginated so that all pages are at most 80 lines long, and most
are at least 40 lines.
. Formatted headings for an outline regexp to match so that
outline-minor-mode works nicely on paredit.el.
*** Altered Behaviour and New Functionality
- Implemented paredit-forward-kill-word & paredit-backward-kill-word,
or M-d & M-DEL, which are like kill-word & backward-kill-word, but
they will not kill parenthesis, string, or comment delimiters; they
will preserve the structure of S-expressions, while the built-in
Emacs word killing commands would destroy it.
- M-" is now bound to paredit-meta-doublequote, which has the old
behaviour of paredit-close-string-and-newline if within a string,
but which wraps the following S-expression (or N S-expressions) in
double-quotes if without a string; paredit-doublequote does the
same, but the default argument is 0, not 1.
- M-S (paredit-split-sexp) no longer deletes horizontal space in
strings before splitting them into two. The rationale, as
suggested by Zbigniew Szadkowski, is that whitespace is usually
significant in strings, while not in lists, and you can type M-\
M-S if you really do want the horizontal space deleted anyway.
- Reintroduced paredit-join-sexps as M-J. The implementation is now
more robust: it ensures that the two S-expressions to join match --
i.e. they are both lists, or they are both strings, or they are
both symbols --, and it correctly handles the atom case now as
well.
- Extended paredit command examples to allow multiple steps in
succession of a single example.
** Version 17 -- 2005-12-31
*** Style and Bugs
- Rewrote all documentation strings to be in the imperative mood, per
GNU Emacs's guidelines. Some documentation strings may have been
corrected, too, but I can't be bothered to grovel through the diff
to pick out all changes to all documentation strings.
- Forced parenthesis flashing even with show-paren-mode enabled.
- Fixed bug in forward deletion within strings so that the empty
string can be deleted.
- Simplified determination of whether the point is in a comment.
*** Altered Behaviour and New Functionality
- Eliminated paredit-terminal-mode. All key bindings it had are now
incorporated into paredit-mode's keymap. I may have changed some
keybindings, too, but I don't remember what they were if I did. I
think I fixed some of the keybindings in the terminal.
- Added examples to documentation of all paredit commands, as well as
code to generate an HTML file containing the examples in nicely
formatted tables (sorry, web purists).
- Made paredit-mode refuse to be enabled in a buffer with imbalanced
parentheses.
- Updated documentary heading. It now explains how to customize keys
while still autoloading and how to make paredit's RET work nicely
with SLIME's REPL.
- Improved semicolon insertion: (a) to accept a numeric prefix
argument dictating a number of semicolons to insert, instead of a
prefix argument that forces the insertion of a semicolon without a
trailing newline, which can be effected with C-q anyway; and (b) to
allow insertion of semicolons before existing comments without
inserting a superfluous leading newline. To comment out code, you
must still use M-; or M-x comment-region.
** Version 16 -- 2005
- Introduced M-S (paredit-split-sexp) to split lists or strings from
the middle.
- Fixed the definition of M-; to use (kbd "M-;") to correctly
identify the key sequence meta-semicolon, not "M-;" for M hyphen
semicolon.
** Version 15 -- 2005
- Rewrote comment insertion code.
- Implemented M-; (paredit-comment-dwim), which is like comment-dwim
but inserts comments more appropriately with respect to paredit.
** Version 14 -- 2005
Version 14 introduced fancy comment handling:
- paredit-close-list-and-newline now refuses to move a margin comment
to another line; instead it will help to preserve the column of the
comment.
- The semicolon key is now bound to a command that will automatically
move any code following the point onto the next line, so that you
do not inadvertently comment out half expressions. You can still
use M-; (comment-dwim) to comment out specific regions that are not
meant to be code (e.g., old comments that were accidentally
uncommented) or whole S-expressions, usually in conjunction with
C-M-SPC (mark-sexp).
** Version 13 -- 2005
- Removed M-\ (paredit-join-sexps), whose key binding conflicts with
delete-horizontal-space and whose implementation was inadequate and
led to general uselessness of the command.
- Improved RET (paredit-newline) so that it does not do anything
fancy within strings and first tests whether the point is in a
comment before checking whether it is in a character.
- Changed paredit-skip-whitespace from skip-syntax-{forward,backward}
to skip-chars-{forward,backward}, because in the Lisp syntax table
newlines are not considered whitespace -- rather, they are comment
ends --, but we want to skip them nevertheless.
- Corrected paredit-kill in a way I don't understand.
- Minor code improvements, including:
. Changed call to previous-line to use forward-line instead.
. Removed unnecessary save-excursion in paredit-recentre-on-sexp.
. IF indentation changes.
** Version 12 -- 2005
- Implemented M-r (paredit-raise-sexp), which raises a single
S-expression up the tree, deleting all of its siblings and its
enclosing list.
- Rearranged some arrow key bindings again.
- Made paredit-forward-delete and paredit-backward-delete check for
buffer bounds and also matching of the delimiters of empty lists.
- Added a buffer bounds check to paredit-kill.
- Made backward barfing signal an error, not just a message.
** Version 11 -- 2005
- Changed the key for paredit-splice-sexp from M-/, which is by
default the popular dabbrev-expand, to M-s, which I was surprised
to find no existing binding for.
- Added a prefix argument to paredit-splice-sexp; see the command's
documentation for details. M-up is now equivalent to C-u M-s;
M-down, to C-u C-u M-s.
- Fixed a lot of the terminal key sequences for the arrow key
bindings in paredit-terminal-mode.
- Modified the behaviour of paredit-forward and paredit-backward to
change only one level of nesting depth, not to repeat until there
is a sibling S-expression to move across.
- Changed a lot of code to use character syntax, instead of exact
character comparisons, for better generality.
- Rewrote much of paredit-kill, again.
** Version 10 -- 2005
- Introduced paredit-forward and paredit-backward, which are like
forward-sexp and backward-sexp but which will also go up a nesting
level if at the end of a list.
- Introduced C-c C-M-l (paredit-recentre-on-sexp), whose name is
self-explanatory.
- Added support for numeric prefix arguments to paredit-open-list.
- Fixed paredit-kill so that it would correctly kill whitespace
between parentheses, as in ( ).
- Changed suggestion of what to put in your .emacs from require to
autoload.
** Version 9 -- 2005
- Introduced enable-paredit-mode and disable-paredit-mode to better
choose which one to enable.
- Forced blinkage of matching parentheses in paredit-close-list and
paredit-close-list-and-newline, even if show-paren-mode is enabled.
** Version 8 -- 2005
- Added paredit-terminal-mode, which is like paredit-mode but which
provides key bindings that work in terminals, while paredit-mode
contains many (such as controlled brackets) that do not work in
terminals. Thanks to Jorgen Schaefer for suggesting many of the
terminal key bindings.
- Exchanged RET and C-j: RET now inserts the fancy newline with auto-
indentation, while C-j inserts a literal line feed. While this
defies convention, and some people prefer not to do this, I have
found that it is more convenient for RET to have the behaviour of
the common case, where auto-indentation is desired, and for C-j to
insert the uncommon exact, literal line feed. You can always
customize the key bindings yourself, of course.
- Rearranged arrow key bindings.
- Implemented paredit-close-list-and-newline, which is like
paredit-close-list followed by RET (paredit-newline); and M-"
(paredit-close-string-and-newline), which is similar but for
strings.
The closing round bracket character now inserts the newline, while
the meta modifier inhibits this.
- Overhauled paredit-kill.
- Extended slurpage and barfage to permit their operation across
arbitrary depth changes.
- Fixed bizarre bug with backward barfage. I apologize for the
alliteration.
- Fixed a number of other small bugs.
- Prefixed `paredit-' to the remaining functions defined in the file
that did not already have the prefix.
- Defined backward-down-list, which for some reason is not provided
by lisp.el, although up-list, down-list, & backward-up-list all
are. (This is the sole exception to the above item. It deserves
no prefix because it ought to be defined in lisp.el with this name
anyway.)
** Version 7 -- 2005-09
- Changed paredit-open-list and paredit-close-list so that they will
refuse to insert parentheses inside character literals.
- Substituted new code for GNU Emacs's move-past-close-and-reindent.
I do not remember why now, and I no longer understand either code
well enough to discern differences, other than that Emacs's
m-p-c-a-r is probably faster because it incrementally parses each
step of the way. All I can see is that paredit.el's code now
inserts indentation before the closing parenthesis while Emacs's
m-p-c-a-r does not.
- Fixed bugs in deletion within character literals and strings.
** Versions 2 through 6 -- 2005-08-09
(I lost versions 2, 3, 4, & 5.)
- Flushed M-" (paredit-insert-doublequote), which was rather useless
and which " (paredit-doublequote) now subsumes the functionality of.
- Added instrumented forward deletion as well as backward deletion,
which now behave well inside strings.
- Flushed unnecessary individual round bracket insertion keys; use
C-q instead.
- Added C-left & C-right: backward-sexp & forward-sexp, respectively.
- Fixed the test of whether the point is in a character literal.
- Modified " (paredit-doublequote) to insert escaped double-quote if
in the middle of the string, rather than to jump past the string's
closing delimiter.
- Introduced bogus backslash escaping mechanism.
- Introduced new command for breaking the line and indenting, and
bound C-j, rather than RET, to it, according to convention.
- Improved C-k (paredit-kill), particularly in strings where it will
no longer kill the closing delimiter of the string.
- Changed the splicage, joinage, slurpage, and barfage commands so
that they will reindent only the modified list, not the whole
definition.
** Version 1 -- 2005-08-01
|