Paredit Preso

15,940 views
15,669 views

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
15,940
On SlideShare
0
From Embeds
0
Number of Embeds
691
Actions
Shares
0
Downloads
201
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

×