paredit preso

80
Bay Area Clojure Meetup functional lispers December 3, 2009 Runa Galactic Headquarters Friday, December 4, 2009

Upload: kyle-oba

Post on 20-Jan-2015

10.979 views

Category:

Technology


1 download

DESCRIPTION

A simple intro to Emacs Paredit minor mode.

TRANSCRIPT

Page 1: Paredit Preso

Bay Area Clojure Meetupfunctional lispers

December 3, 2009Runa Galactic Headquarters

Friday, December 4, 2009

Page 2: Paredit Preso

pareditAt first it sucks, but then it’s awesome.

mudphone (kyle oba)irc / twitter / github

runa employee 9

Friday, December 4, 2009

Page 3: Paredit Preso

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

Page 4: Paredit Preso

and we’re hiring

clojure-hbase-ruby-hadoop-rails-javascript-chefs

Friday, December 4, 2009

Page 5: Paredit Preso

0/8 why

Friday, December 4, 2009

Page 6: Paredit Preso

Q: What is paredit?

A: paredit is a minor mode for Emacs,

created by Taylor R. Campbell.

Friday, December 4, 2009

Page 7: Paredit Preso

So, why paredit?

commit 2ecf00a124062d7b4c4538f79426bc19c6b11b83Author: Philip (flip) Kromer <[email protected]>Date: Mon Aug 24 23:38:14 2009 -0500

Paredit fucking sucks my balls

Friday, December 4, 2009

Page 8: Paredit Preso

Because, these are your father’s parentheses...

http://xkcd.com/297/

Friday, December 4, 2009

Page 9: Paredit Preso

Hingebjerg – 2009-06-01T14:05:40ZHi 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:15ZHingebjerg: 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.

http://technomancy.us/126

Friday, December 4, 2009

Page 10: Paredit Preso

0/8 why1/8 balancing2/8 basic insertion commands3/8 deleting & killing4/8 movement & navigation5/8 depth-changing commands6/8 barfage & slurpage7/8 miscellaneous commands8/8 in the wild (tips & tricks)

Friday, December 4, 2009

Page 11: Paredit Preso

1/8 balancing

Friday, December 4, 2009

Page 12: Paredit Preso

balancing basics

([“”])

keys

([“

Friday, December 4, 2009

Page 13: Paredit Preso

1.1/8 assumptions

Friday, December 4, 2009

Page 14: Paredit Preso

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

Page 15: Paredit Preso

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

Page 16: Paredit Preso

1.2/8 demo

wrapping

killing

raising

splicing

slurping / barfing

splitting / joining

Friday, December 4, 2009

Page 17: Paredit Preso

2/8 basic insertion commands

Friday, December 4, 2009

Page 18: Paredit Preso

paredit-open-round

(a b |c d)

(a b (|) c d)

keys

(

Friday, December 4, 2009

Page 19: Paredit Preso

paredit-close-round-and-newline

(a b |c )

(a b c)|

keys

)

Friday, December 4, 2009

Page 20: Paredit Preso

paredit-close-round

(a b |c )

(a b c)|

keys

M-)

Friday, December 4, 2009

Page 21: Paredit Preso

paredit-open-square

(a b |c d)

(a b [|] c)

keys

[

Friday, December 4, 2009

Page 22: Paredit Preso

paredit-close-square

(defn cky [bcn| ] 2)

(defn cky [bcn]| 2)

keys

]

Friday, December 4, 2009

Page 23: Paredit Preso

paredit-doublequote

(ça va |bien)

(ça va “|” bien)

keys

Friday, December 4, 2009

Page 24: Paredit Preso

paredit-doublequote

(while in a quote)

(the “q|uick” fox)

(the “q\”|uick” fox)

keys

Friday, December 4, 2009

Page 25: Paredit Preso

paredit-meta-doublequote

(the |(cky) bcn)

(the “|(cky)” bcn)

keys

M-”

Friday, December 4, 2009

Page 26: Paredit Preso

paredit-meta-doublequote

(while in quote)

(the “chk|y” bcn)

(the “chky” |bcn)

keys

M-”

Friday, December 4, 2009

Page 27: Paredit Preso

paredit-comment-dwim

(blah |xyz) ; baz

(blah xyz) ; |baz

keys

M-;

Friday, December 4, 2009

Page 28: Paredit Preso

paredit-comment-dwim

(amit siva)|

(amit siva) ; |

keys

M-;

Friday, December 4, 2009

Page 29: Paredit Preso

paredit-comment-dwim

(hbase)|(clojure)

(hbase);;; |(clojure)

keys

M-;

Friday, December 4, 2009

Page 30: Paredit Preso

paredit-comment-dwim

(ruby) |(java)

(ruby);;; |(java)

keys

M-;

Friday, December 4, 2009

Page 31: Paredit Preso

paredit-newline

(let [x 2] |(list x y)

(let [x 2] |(list x y))

keys

C-j

Friday, December 4, 2009

Page 32: Paredit Preso

intermission

http://xkcd.com/224/

Friday, December 4, 2009

Page 33: Paredit Preso

3/8 deleting & killing

Friday, December 4, 2009

Page 34: Paredit Preso

paredit-forward-delete

(|”third” worst)

(“|third” worst)keys

C-d(“|hird” worst)

Friday, December 4, 2009

Page 35: Paredit Preso

paredit-forward-delete

(w |(x) y)

(w (|x) y)keys

C-d (w (|) y)

(w | y)

Friday, December 4, 2009

Page 36: Paredit Preso

paredit-backward-delete

(“speed” w|alk)

(“speed” |alk)keys

DEL (“speed”|alk)

(“speed|”alk)

(“spee|”alk)Friday, December 4, 2009

Page 37: Paredit Preso

paredit-backward-delete

(w (x)| y)

(w (x|) y)keys

DEL (w (|) y)

(w | y)

Friday, December 4, 2009

Page 38: Paredit Preso

paredit-kill

(zee)| ;comment

(zee)|

keys

C-k

Friday, December 4, 2009

Page 39: Paredit Preso

paredit-kill

(|zee) ;comment

(|) ;commentkeys

C-k(println “|x is:” x)

(println “|” x)Friday, December 4, 2009

Page 40: Paredit Preso

paredit-forward-kill-word

|(declare x) ;commentkeys

M-d(| x) ;comment

(|) ;comment

() ;|

Friday, December 4, 2009

Page 41: Paredit Preso

paredit-forward-kill-word

;| hack(declare x)

keys

M-d;|(declare x)

;(| x)

Friday, December 4, 2009

Page 42: Paredit Preso

paredit-backward-kill-word

(declare x) ;comment(zee) |

keys

M-DEL (declare x) ;comment(|)

(declare x) ;|Friday, December 4, 2009

Page 43: Paredit Preso

paredit-backward-kill-word

keys

M-DEL

(declare x) ;|

(declare |)

(|)

Friday, December 4, 2009

Page 44: Paredit Preso

4/8 movement & navigation

Friday, December 4, 2009

Page 45: Paredit Preso

paredit-forward

keys

C-M-f(conj |[1 2 3] 4)

(conj [1 2 3]| 4)

Friday, December 4, 2009

Page 46: Paredit Preso

paredit-forward

keys

C-M-f

(conj [1 2 3] |4)

(conj [1 2 3] 4|)

(conj [1 2 3] 4)|

Friday, December 4, 2009

Page 47: Paredit Preso

paredit-backward

keys

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

(conj |[1 2 3] 4)

Friday, December 4, 2009

Page 48: Paredit Preso

paredit-backward

keys

C-M-b

(conj| [1 2 3] 4)

(|conj [1 2 3] 4)

|(conj [1 2 3] 4)

Friday, December 4, 2009

Page 49: Paredit Preso

intermission

http://www.flickr.com/photos/nickporjr/2158780350/

Friday, December 4, 2009

Page 50: Paredit Preso

5/8 depth-changing commands

Friday, December 4, 2009

Page 51: Paredit Preso

paredit-wrap-around

keys

M-((eat |cky bcn)

(eat (|cky) bcn)

same for {}, [], and “”

Friday, December 4, 2009

Page 52: Paredit Preso

paredit-splice-sexp

keys

M-s(eat (|cky bcn) sdwch)

(eat |cky bcn sdwch)

Friday, December 4, 2009

Page 53: Paredit Preso

paredit-splice-sexp-killing-backward

keys

M-<up>(eat (cky |bcn))

(eat |bcn)

Friday, December 4, 2009

Page 54: Paredit Preso

paredit-splice-sexp-killing-forward

keys

M-<down>(eat (cky |bcn))

(eat cky|)

Friday, December 4, 2009

Page 55: Paredit Preso

paredit-raise-sexp

keys

M-r

(eat (cky |bcn) sdwch)

(eat |bcn sdwch)

|bcn

Friday, December 4, 2009

Page 56: Paredit Preso

6/8 barfage & slurpage

Friday, December 4, 2009

Page 57: Paredit Preso

paredit-forward-slurp-sexp

keys

C-)C-<right>

(eat (|cky) bcn z)

(eat (|cky bcn) z)

Friday, December 4, 2009

Page 58: Paredit Preso

paredit-forward-barf-sexp

keys

C-}C-<left>

(eat (|cky bcn) z)

(eat (|cky) bcn z)

Friday, December 4, 2009

Page 59: Paredit Preso

paredit-backward-slurp-sexp

keys

C-(C-M-<left>

(omg eat (|cky) bcn)

(omg (eat |cky) bcn)

Friday, December 4, 2009

Page 60: Paredit Preso

paredit-backward-barf-sexp

keys

C-{C-M-<right>

(omg (eat |cky) bcn)

(omg eat (|cky) bcn)

Friday, December 4, 2009

Page 61: Paredit Preso

7/8 miscellaneous commands

Friday, December 4, 2009

Page 62: Paredit Preso

paredit-split-sexp

keys

M-S-s(cky |bcn)

(cky) |(bcn)

same for {}, [], and “”

Friday, December 4, 2009

Page 63: Paredit Preso

paredit-join-sexps

keys

M-S-j

same for {}, [], and “”

(cky)| (bcn)

(cky| bcn)

chunky-| bacon

chunky-|bacon

Friday, December 4, 2009

Page 64: Paredit Preso

Friday, December 4, 2009

Page 65: Paredit Preso

intermission

Friday, December 4, 2009

Page 66: Paredit Preso

8/8 in the wild(tips and tricks)

Friday, December 4, 2009

Page 67: Paredit Preso

8.1/8 demo

C-w is not a paredit thing

show-paren-mode warning

fixing unbalanced parens

Friday, December 4, 2009

Page 68: Paredit Preso

add parens when unbalanced

(override matched keys w/ C-q)

(important )|

keys

C-q )(important |

same for {}, [], and “”

Friday, December 4, 2009

Page 69: Paredit Preso

remove pesky spaces

(important|)

(important |)

keys

C-k then

<del>

(important| )

Friday, December 4, 2009

Page 70: Paredit Preso

remove stray parens

with comments

poor paren|)keys

DELthen ; then

C-d

poor paren)|

poor paren;|)

poor paren;|

Friday, December 4, 2009

Page 71: Paredit Preso

override paredit delete

LTR

keys

C-u DELC-u C-dC-u C-k

Friday, December 4, 2009

Page 72: Paredit Preso

remove stray parens

probably the right way

poor paren|

keys

C-u DELpoor paren)|

Friday, December 4, 2009

Page 73: Paredit Preso

dammit, emacs

keys

M-x butterfly LTR

Friday, December 4, 2009

Page 74: Paredit Preso

M-x butterflyhttp://xkcd.com/378/

Friday, December 4, 2009

Page 75: Paredit Preso

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

Page 76: Paredit Preso

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

Page 77: Paredit Preso

http://www.emacswiki.org/emacs/PareditCheatsheetFriday, December 4, 2009

Page 78: Paredit Preso

stole from...

๏ http://mumble.net/~campbell/emacs/paredit.html

๏ http://p.hagelb.org/paredit-screencast.html

technomancy - screencast soon?

Friday, December 4, 2009

Page 79: Paredit Preso

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

Page 80: Paredit Preso

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