Bay Area Clojure Meetup
          functional lispers




                                        December 3, 2009
        ...
paredit
          At first it sucks, but then it’s awesome.




                                                     mudpho...
about runa
          We are simultaneously the largest cloud-based
          manufacturer, distributor, and consumer of
  ...
and we’re hiring
          clojure-hbase-ruby-hadoop-rails-javascript-chefs




Friday, December 4, 2009
0/8              why




Friday, December 4, 2009
Q: What is paredit?


         A: paredit is a minor mode for Emacs,
            created by Taylor R. Campbell.




Friday...
commit 2ecf00a124062d7b4c4538f79426bc19c6b11b83
                           Author: Philip (flip) Kromer <flip@infochimps.org...
Because, these are your father’s parentheses...




                                              http://xkcd.com/297/

Fr...
http://technomancy.us/126

          Hingebjerg – 2009-06-01T14:05:40Z
          Hi Phil,

          Just installed the em...
0/8         why
          1/8         balancing
          2/8         basic insertion commands
          3/8         delet...
1/8              balancing




Friday, December 4, 2009
balancing basics




           keys

            ([“             ([“”])



Friday, December 4, 2009
1.1/8            assumptions




Friday, December 4, 2009
you’re using the emacs starter kit
           or, you’re already familiar setting the modes up


          you’ve got pare...
install?

          ;;; Install paredit by placing `paredit.el' in `/path/to/elisp', a
          ;;; directory of your cho...
wrapping
                                  killing
                                  raising
                             ...
2/8 basic        insertion commands




Friday, December 4, 2009
paredit-open-round




           keys
                              (a b |c d)
                (
                        ...
paredit-close-round-and-newline




           keys                (a b |c     )
                )              (a b c)
  ...
paredit-close-round




           keys
                               (a b |c    )
          M-)
                        ...
paredit-open-square




           keys
                               (a b |c d)
                [
                      ...
paredit-close-square




           keys
                           (defn cky [bcn|   ] 2)
                ]
             ...
paredit-doublequote




           keys
                           (ça va |bien)
               “
                        ...
paredit-doublequote
         (while in a quote)



           keys
                           (the “q|uick” fox)
         ...
paredit-meta-doublequote




           keys
                           (the |(cky) bcn)
           M-”
                  ...
paredit-meta-doublequote
         (while in quote)



           keys            (the “chk|y” bcn)
           M-”         ...
paredit-comment-dwim




           keys
                           (blah |xyz)   ; baz
           M-;
                   ...
paredit-comment-dwim




           keys
                           (amit siva)|
           M-;
                          ...
paredit-comment-dwim

                                (hbase)
                                |
           keys           ...
paredit-comment-dwim




                            (ruby) |(java)
           keys

           M-;              (ruby)
  ...
paredit-newline




           keys            (let [x 2] |(list x y)
             C-j           (let [x 2]
              ...
intermission



                           http://xkcd.com/224/
Friday, December 4, 2009
3/8 deleting     & killing




Friday, December 4, 2009
paredit-forward-delete



                           (|”third” worst)
           keys
                           (“|third”...
paredit-forward-delete

                                  (w |(x) y)

           keys                   (w (|x) y)
       ...
paredit-backward-delete


                             (“speed” w|alk)
           keys             (“speed” |alk)
        ...
paredit-backward-delete

                                   (w (x)| y)

           keys                    (w (x|) y)
    ...
paredit-kill




           keys
                           (zee)| ;comment
           C-k
                           (zee...
paredit-kill


                           (|zee) ;comment

           keys            (|) ;comment
           C-k
        ...
paredit-forward-kill-word



                           |(declare x) ;comment
           keys
                           (...
paredit-forward-kill-word

                                     ;| hack
                                     (declare x)
 ...
paredit-backward-kill-word

                           (declare x) ;comment
                           (zee) |
           ...
paredit-backward-kill-word




           keys                       (declare x) ;|
        M-DEL                         ...
4/8 movement     & navigation




Friday, December 4, 2009
paredit-forward




           keys
                           (conj |[1 2 3] 4)
           C-M-f
                        ...
paredit-forward




           keys            (conj [1 2 3] |4)
           C-M-f           (conj [1 2 3] 4|)
            ...
paredit-backward




           keys
                            (conj [1 2 3]| 4)
         C-M-b
                        ...
paredit-backward




           keys             (conj| [1 2 3] 4)
         C-M-b              (|conj [1 2 3] 4)
         ...
intermission



                           http://www.flickr.com/photos/nickporjr/2158780350/
Friday, December 4, 2009
5/8 depth-changing    commands




Friday, December 4, 2009
paredit-wrap-around




           keys
                                      (eat |cky bcn)
          M-(
               ...
paredit-splice-sexp




           keys
                           (eat (|cky bcn) sdwch)
         M-s
                   ...
paredit-splice-sexp-killing-backward




           keys
                               (eat (cky |bcn))
          M-<up>
...
paredit-splice-sexp-killing-forward




           keys
                                (eat (cky |bcn))
         M-<down>...
paredit-raise-sexp




           keys            (eat (cky |bcn) sdwch)
          M-r              (eat |bcn sdwch)
     ...
6/8 barfage      & slurpage




Friday, December 4, 2009
paredit-forward-slurp-sexp




           keys
                               (eat (|cky) bcn z)
         C-)
         C-<...
paredit-forward-barf-sexp




           keys
                               (eat (|cky bcn) z)
         C-}
         C-<l...
paredit-backward-slurp-sexp




           keys
         C-(                (omg eat (|cky) bcn)
         C-M-<left> (omg ...
paredit-backward-barf-sexp




           keys
         C-{         (omg (eat |cky) bcn)
         C-M-<right> (omg eat (|c...
7/8 miscellaneous   commands




Friday, December 4, 2009
paredit-split-sexp




           keys
                                      (cky |bcn)
          M-S-s
                  ...
paredit-join-sexps
                                      (cky)| (bcn)
                                      (cky| bcn)
   ...
Friday, December 4, 2009
intermission




Friday, December 4, 2009
8/8 in the wild
          (tips and tricks)




Friday, December 4, 2009
C-w is not a paredit thing
                                  show-paren-mode warning
          8.1/8            demo   fixi...
add parens when unbalanced
         (override matched keys w/ C-q)



           keys                       (important |
 ...
remove pesky spaces


                               (important
                               |       )
           keys
 ...
remove stray parens
         with comments

                               poor paren)|
           keys
                  ...
override paredit delete




           keys
          C-u DEL
          C-u C-d                  LTR
          C-u C-k
Fri...
remove stray parens
         probably the right way



           keys
                                  poor paren)|
    ...
dammit, emacs




           keys

           M-x butterfly    LTR



Friday, December 4, 2009
M-x butterfly
                           http://xkcd.com/378/
Friday, December 4, 2009
add paredit to the SLIME REPL

          ;; enable paredit in slime repl
          (add-hook 'slime-repl-mode-hook (lambda...
customize

          ;;; Customize paredit using `eval-after-load':
          ;;;
          ;;; (eval-after-load 'paredit
...
http://www.emacswiki.org/emacs/PareditCheatsheet
Friday, December 4, 2009
stole from...


          ๏    http://mumble.net/~campbell/emacs/paredit.html
          ๏    http://p.hagelb.org/paredit-s...
consume these...

          ๏    http://www.emacswiki.org/emacs/ParEdit
          ๏    http://steve.yegge.googlepages.com/...
images and food...
          ๏ Pretzels - http://www.flickr.com/photos/bellalago/3938498023/
          ๏ XKCD “Lisp Cycles”...
Upcoming SlideShare
Loading in...5
×

Paredit Preso

11,560

Published on

A simple intro to Emacs Paredit minor mode.

Published in: Technology
0 Comments
25 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
11,560
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
200
Comments
0
Likes
25
Embeds 0
No embeds

No notes for slide

Paredit Preso

  1. 1. Bay Area Clojure Meetup functional lispers December 3, 2009 Runa Galactic Headquarters Friday, December 4, 2009
  2. 2. paredit At first it sucks, but then it’s awesome. mudphone (kyle oba) irc / twitter / github runa employee 9 Friday, December 4, 2009
  3. 3. about runa We are simultaneously the largest cloud-based manufacturer, distributor, and consumer of Bavarian-style pretzels, nationally. http://www.flickr.com/photos/bellalago/3938498023/ Friday, December 4, 2009
  4. 4. and we’re hiring clojure-hbase-ruby-hadoop-rails-javascript-chefs Friday, December 4, 2009
  5. 5. 0/8 why Friday, December 4, 2009
  6. 6. Q: What is paredit? A: paredit is a minor mode for Emacs, created by Taylor R. Campbell. Friday, December 4, 2009
  7. 7. commit 2ecf00a124062d7b4c4538f79426bc19c6b11b83 Author: Philip (flip) Kromer <flip@infochimps.org> Date: Mon Aug 24 23:38:14 2009 -0500 Paredit fucking sucks my balls So, why paredit? Friday, December 4, 2009
  8. 8. Because, these are your father’s parentheses... http://xkcd.com/297/ Friday, December 4, 2009
  9. 9. http://technomancy.us/126 Hingebjerg – 2009-06-01T14:05:40Z Hi Phil, Just installed the emacs-starter-kit and clojure-mode, and i can't delete curly braces when in clojure-mode. Is there a logical explanation for that? Phil – 2009-06-12T09:37:15Z Hingebjerg: That's a feature of paredit-mode; it enforces that you can't delete parens (or other matched chars) unless they're empty so you don't end up with invalid structure in your code. It's unbelievably handy/ addictive once you get used to it, but if you're not sure what's going on it can be pretty annoying. Friday, December 4, 2009
  10. 10. 0/8 why 1/8 balancing 2/8 basic insertion commands 3/8 deleting & killing 4/8 movement & navigation 5/8 depth-changing commands 6/8 barfage & slurpage 7/8 miscellaneous commands 8/8 in the wild (tips & tricks) Friday, December 4, 2009
  11. 11. 1/8 balancing Friday, December 4, 2009
  12. 12. balancing basics keys ([“ ([“”]) Friday, December 4, 2009
  13. 13. 1.1/8 assumptions Friday, December 4, 2009
  14. 14. you’re using the emacs starter kit or, you’re already familiar setting the modes up you’ve got paredit and show-parens modes M-x paredit-mode M-x show-paren-mode Friday, December 4, 2009
  15. 15. install? ;;; Install paredit by placing `paredit.el' in `/path/to/elisp', a ;;; directory of your choice, and adding to your .emacs file: ;;; ;;; (add-to-list 'load-path "/path/to/elisp") ;;; (autoload 'paredit-mode "paredit" ;;; "Minor mode for pseudo-structurally editing Lisp code." ;;; t) ;;; ;;; Toggle Paredit Mode with `M-x paredit-mode RET', or enable it ;;; always in a major mode `M' (e.g., `lisp' or `scheme') with: ;;; ;;; (add-hook M-mode-hook (lambda () (paredit-mode +1))) http://mumble.net/~campbell/emacs/paredit.el Friday, December 4, 2009
  16. 16. wrapping killing raising splicing slurping / barfing 1.2/8 demo splitting / joining Friday, December 4, 2009
  17. 17. 2/8 basic insertion commands Friday, December 4, 2009
  18. 18. paredit-open-round keys (a b |c d) ( (a b (|) c d) Friday, December 4, 2009
  19. 19. paredit-close-round-and-newline keys (a b |c ) ) (a b c) | Friday, December 4, 2009
  20. 20. paredit-close-round keys (a b |c ) M-) (a b c)| Friday, December 4, 2009
  21. 21. paredit-open-square keys (a b |c d) [ (a b [|] c) Friday, December 4, 2009
  22. 22. paredit-close-square keys (defn cky [bcn| ] 2) ] (defn cky [bcn]| 2) Friday, December 4, 2009
  23. 23. paredit-doublequote keys (ça va |bien) “ (ça va “|” bien) Friday, December 4, 2009
  24. 24. paredit-doublequote (while in a quote) keys (the “q|uick” fox) “ (the “q”|uick” fox) Friday, December 4, 2009
  25. 25. paredit-meta-doublequote keys (the |(cky) bcn) M-” (the “|(cky)” bcn) Friday, December 4, 2009
  26. 26. paredit-meta-doublequote (while in quote) keys (the “chk|y” bcn) M-” (the “chky” |bcn) Friday, December 4, 2009
  27. 27. paredit-comment-dwim keys (blah |xyz) ; baz M-; (blah xyz) ; |baz Friday, December 4, 2009
  28. 28. paredit-comment-dwim keys (amit siva)| M-; (amit siva) ;| Friday, December 4, 2009
  29. 29. paredit-comment-dwim (hbase) | keys (clojure) M-; (hbase) ;;; | (clojure) Friday, December 4, 2009
  30. 30. paredit-comment-dwim (ruby) |(java) keys M-; (ruby) ;;; | (java) Friday, December 4, 2009
  31. 31. paredit-newline keys (let [x 2] |(list x y) C-j (let [x 2] |(list x y)) Friday, December 4, 2009
  32. 32. intermission http://xkcd.com/224/ Friday, December 4, 2009
  33. 33. 3/8 deleting & killing Friday, December 4, 2009
  34. 34. paredit-forward-delete (|”third” worst) keys (“|third” worst) C-d (“|hird” worst) Friday, December 4, 2009
  35. 35. paredit-forward-delete (w |(x) y) keys (w (|x) y) C-d (w (|) y) (w | y) Friday, December 4, 2009
  36. 36. paredit-backward-delete (“speed” w|alk) keys (“speed” |alk) DEL (“speed”|alk) (“speed|”alk) (“spee|”alk) Friday, December 4, 2009
  37. 37. paredit-backward-delete (w (x)| y) keys (w (x|) y) DEL (w (|) y) (w | y) Friday, December 4, 2009
  38. 38. paredit-kill keys (zee)| ;comment C-k (zee)| Friday, December 4, 2009
  39. 39. paredit-kill (|zee) ;comment keys (|) ;comment C-k (println “|x is:” x) (println “|” x) Friday, December 4, 2009
  40. 40. paredit-forward-kill-word |(declare x) ;comment keys (| x) ;comment M-d (|) ;comment () ;| Friday, December 4, 2009
  41. 41. paredit-forward-kill-word ;| hack (declare x) keys ;| M-d (declare x) ; (| x) Friday, December 4, 2009
  42. 42. paredit-backward-kill-word (declare x) ;comment (zee) | keys (declare x) ;comment M-DEL (|) (declare x) ;| Friday, December 4, 2009
  43. 43. paredit-backward-kill-word keys (declare x) ;| M-DEL (declare |) (|) Friday, December 4, 2009
  44. 44. 4/8 movement & navigation Friday, December 4, 2009
  45. 45. paredit-forward keys (conj |[1 2 3] 4) C-M-f (conj [1 2 3]| 4) Friday, December 4, 2009
  46. 46. paredit-forward keys (conj [1 2 3] |4) C-M-f (conj [1 2 3] 4|) (conj [1 2 3] 4)| Friday, December 4, 2009
  47. 47. paredit-backward keys (conj [1 2 3]| 4) C-M-b (conj |[1 2 3] 4) Friday, December 4, 2009
  48. 48. paredit-backward keys (conj| [1 2 3] 4) C-M-b (|conj [1 2 3] 4) |(conj [1 2 3] 4) Friday, December 4, 2009
  49. 49. intermission http://www.flickr.com/photos/nickporjr/2158780350/ Friday, December 4, 2009
  50. 50. 5/8 depth-changing commands Friday, December 4, 2009
  51. 51. paredit-wrap-around keys (eat |cky bcn) M-( (eat (|cky) bcn) same for {}, [], and “” Friday, December 4, 2009
  52. 52. paredit-splice-sexp keys (eat (|cky bcn) sdwch) M-s (eat |cky bcn sdwch) Friday, December 4, 2009
  53. 53. paredit-splice-sexp-killing-backward keys (eat (cky |bcn)) M-<up> (eat |bcn) Friday, December 4, 2009
  54. 54. paredit-splice-sexp-killing-forward keys (eat (cky |bcn)) M-<down> (eat cky|) Friday, December 4, 2009
  55. 55. paredit-raise-sexp keys (eat (cky |bcn) sdwch) M-r (eat |bcn sdwch) |bcn Friday, December 4, 2009
  56. 56. 6/8 barfage & slurpage Friday, December 4, 2009
  57. 57. paredit-forward-slurp-sexp keys (eat (|cky) bcn z) C-) C-<right> (eat (|cky bcn) z) Friday, December 4, 2009
  58. 58. paredit-forward-barf-sexp keys (eat (|cky bcn) z) C-} C-<left> (eat (|cky) bcn z) Friday, December 4, 2009
  59. 59. paredit-backward-slurp-sexp keys C-( (omg eat (|cky) bcn) C-M-<left> (omg (eat |cky) bcn) Friday, December 4, 2009
  60. 60. paredit-backward-barf-sexp keys C-{ (omg (eat |cky) bcn) C-M-<right> (omg eat (|cky) bcn) Friday, December 4, 2009
  61. 61. 7/8 miscellaneous commands Friday, December 4, 2009
  62. 62. paredit-split-sexp keys (cky |bcn) M-S-s (cky) |(bcn) same for {}, [], and “” Friday, December 4, 2009
  63. 63. paredit-join-sexps (cky)| (bcn) (cky| bcn) keys chunky- M-S-j | bacon chunky-|bacon same for {}, [], and “” Friday, December 4, 2009
  64. 64. Friday, December 4, 2009
  65. 65. intermission Friday, December 4, 2009
  66. 66. 8/8 in the wild (tips and tricks) Friday, December 4, 2009
  67. 67. C-w is not a paredit thing show-paren-mode warning 8.1/8 demo fixing unbalanced parens Friday, December 4, 2009
  68. 68. add parens when unbalanced (override matched keys w/ C-q) keys (important | C-q ) (important )| same for {}, [], and “” Friday, December 4, 2009
  69. 69. remove pesky spaces (important | ) keys (important C-k then |) <del> (important |) Friday, December 4, 2009
  70. 70. remove stray parens with comments poor paren)| keys poor paren|) DEL then ; then poor paren;|) C-d poor paren;| Friday, December 4, 2009
  71. 71. override paredit delete keys C-u DEL C-u C-d LTR C-u C-k Friday, December 4, 2009
  72. 72. remove stray parens probably the right way keys poor paren)| C-u DEL poor paren| Friday, December 4, 2009
  73. 73. dammit, emacs keys M-x butterfly LTR Friday, December 4, 2009
  74. 74. M-x butterfly http://xkcd.com/378/ Friday, December 4, 2009
  75. 75. add paredit to the SLIME REPL ;; enable paredit in slime repl (add-hook 'slime-repl-mode-hook (lambda () (paredit-mode +1))) Karol Skocik - http://coding.derkeiler.com/Archive/Lisp/comp.lang.lisp/2007-07/ Friday, December 4, 2009
  76. 76. customize ;;; Customize paredit using `eval-after-load': ;;; ;;; (eval-after-load 'paredit ;;; '(progn ...redefine keys, &c....)) ;;; ;;; ... Now `)' is bound to a ;;; command that does not insert a newline, and `M-)' is bound to the ;;; command that inserts a newline. To revert to the former behaviour, ;;; add the following forms to an `eval-after-load' form for paredit.el ;;; in your .emacs file: ;;; ;;; (define-key paredit-mode-map (kbd ")") ;;; 'paredit-close-round-and-newline) ;;; (define-key paredit-mode-map (kbd "M-)") ;;; 'paredit-close-round) http://mumble.net/~campbell/emacs/paredit.el Friday, December 4, 2009
  77. 77. http://www.emacswiki.org/emacs/PareditCheatsheet Friday, December 4, 2009
  78. 78. stole from... ๏ http://mumble.net/~campbell/emacs/paredit.html ๏ http://p.hagelb.org/paredit-screencast.html technomancy - screencast soon? Friday, December 4, 2009
  79. 79. consume these... ๏ http://www.emacswiki.org/emacs/ParEdit ๏ http://steve.yegge.googlepages.com/effective-emacs ๏ Peepcode: Meet Emacs ๏ http://peepcode.com/products/meet-emacs ๏ Peepcode: Functional Programming with Clojure ๏ http://peepcode.com/products/functional-programming-with-clojure Friday, December 4, 2009
  80. 80. images and food... ๏ Pretzels - http://www.flickr.com/photos/bellalago/3938498023/ ๏ XKCD “Lisp Cycles” - http://xkcd.com/297/ ๏ XKCD “Lisp” - http://xkcd.com/224/ ๏ XKCD “Real Programmers” - http://xkcd.com/378/ ๏ Obligatory LOLCAT - http://www.flickr.com/photos/nickporjr/2158780350/ ๏ http://www.emacswiki.org/emacs/PareditCheatsheet ๏ thanks to runa, for the food http://bitterfilms.shop.musictoday.com/Product.aspx?pc=8BCT06# Friday, December 4, 2009
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×