paredit preso

Post on 20-Jan-2015

10.979 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

A simple intro to Emacs Paredit minor mode.

TRANSCRIPT

Bay Area Clojure Meetupfunctional lispers

December 3, 2009Runa Galactic Headquarters

Friday, December 4, 2009

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

mudphone (kyle oba)irc / twitter / github

runa employee 9

Friday, December 4, 2009

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

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, December 4, 2009

So, why paredit?

commit 2ecf00a124062d7b4c4538f79426bc19c6b11b83Author: Philip (flip) Kromer <flip@infochimps.org>Date: Mon Aug 24 23:38:14 2009 -0500

Paredit fucking sucks my balls

Friday, December 4, 2009

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

http://xkcd.com/297/

Friday, December 4, 2009

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

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

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 paredit and show-parens modes

M-x paredit-mode

M-x show-paren-mode

Friday, December 4, 2009

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

1.2/8 demo

wrapping

killing

raising

splicing

slurping / barfing

splitting / joining

Friday, December 4, 2009

2/8 basic insertion commands

Friday, December 4, 2009

paredit-open-round

(a b |c d)

(a b (|) c d)

keys

(

Friday, December 4, 2009

paredit-close-round-and-newline

(a b |c )

(a b c)|

keys

)

Friday, December 4, 2009

paredit-close-round

(a b |c )

(a b c)|

keys

M-)

Friday, December 4, 2009

paredit-open-square

(a b |c d)

(a b [|] c)

keys

[

Friday, December 4, 2009

paredit-close-square

(defn cky [bcn| ] 2)

(defn cky [bcn]| 2)

keys

]

Friday, December 4, 2009

paredit-doublequote

(ça va |bien)

(ça va “|” bien)

keys

Friday, December 4, 2009

paredit-doublequote

(while in a quote)

(the “q|uick” fox)

(the “q\”|uick” fox)

keys

Friday, December 4, 2009

paredit-meta-doublequote

(the |(cky) bcn)

(the “|(cky)” bcn)

keys

M-”

Friday, December 4, 2009

paredit-meta-doublequote

(while in quote)

(the “chk|y” bcn)

(the “chky” |bcn)

keys

M-”

Friday, December 4, 2009

paredit-comment-dwim

(blah |xyz) ; baz

(blah xyz) ; |baz

keys

M-;

Friday, December 4, 2009

paredit-comment-dwim

(amit siva)|

(amit siva) ; |

keys

M-;

Friday, December 4, 2009

paredit-comment-dwim

(hbase)|(clojure)

(hbase);;; |(clojure)

keys

M-;

Friday, December 4, 2009

paredit-comment-dwim

(ruby) |(java)

(ruby);;; |(java)

keys

M-;

Friday, December 4, 2009

paredit-newline

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

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

keys

C-j

Friday, December 4, 2009

intermission

http://xkcd.com/224/

Friday, December 4, 2009

3/8 deleting & killing

Friday, December 4, 2009

paredit-forward-delete

(|”third” worst)

(“|third” worst)keys

C-d(“|hird” worst)

Friday, December 4, 2009

paredit-forward-delete

(w |(x) y)

(w (|x) y)keys

C-d (w (|) y)

(w | y)

Friday, December 4, 2009

paredit-backward-delete

(“speed” w|alk)

(“speed” |alk)keys

DEL (“speed”|alk)

(“speed|”alk)

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

paredit-backward-delete

(w (x)| y)

(w (x|) y)keys

DEL (w (|) y)

(w | y)

Friday, December 4, 2009

paredit-kill

(zee)| ;comment

(zee)|

keys

C-k

Friday, December 4, 2009

paredit-kill

(|zee) ;comment

(|) ;commentkeys

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

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

paredit-forward-kill-word

|(declare x) ;commentkeys

M-d(| x) ;comment

(|) ;comment

() ;|

Friday, December 4, 2009

paredit-forward-kill-word

;| hack(declare x)

keys

M-d;|(declare x)

;(| x)

Friday, December 4, 2009

paredit-backward-kill-word

(declare x) ;comment(zee) |

keys

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

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

paredit-backward-kill-word

keys

M-DEL

(declare x) ;|

(declare |)

(|)

Friday, December 4, 2009

4/8 movement & navigation

Friday, December 4, 2009

paredit-forward

keys

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

(conj [1 2 3]| 4)

Friday, December 4, 2009

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

paredit-backward

keys

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

(conj |[1 2 3] 4)

Friday, December 4, 2009

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

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

M-((eat |cky bcn)

(eat (|cky) bcn)

same for {}, [], and “”

Friday, December 4, 2009

paredit-splice-sexp

keys

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

(eat |cky bcn sdwch)

Friday, December 4, 2009

paredit-splice-sexp-killing-backward

keys

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

(eat |bcn)

Friday, December 4, 2009

paredit-splice-sexp-killing-forward

keys

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

(eat cky|)

Friday, December 4, 2009

paredit-raise-sexp

keys

M-r

(eat (cky |bcn) sdwch)

(eat |bcn sdwch)

|bcn

Friday, December 4, 2009

6/8 barfage & slurpage

Friday, December 4, 2009

paredit-forward-slurp-sexp

keys

C-)C-<right>

(eat (|cky) bcn z)

(eat (|cky bcn) z)

Friday, December 4, 2009

paredit-forward-barf-sexp

keys

C-}C-<left>

(eat (|cky bcn) z)

(eat (|cky) bcn z)

Friday, December 4, 2009

paredit-backward-slurp-sexp

keys

C-(C-M-<left>

(omg eat (|cky) bcn)

(omg (eat |cky) bcn)

Friday, December 4, 2009

paredit-backward-barf-sexp

keys

C-{C-M-<right>

(omg (eat |cky) bcn)

(omg eat (|cky) bcn)

Friday, December 4, 2009

7/8 miscellaneous commands

Friday, December 4, 2009

paredit-split-sexp

keys

M-S-s(cky |bcn)

(cky) |(bcn)

same for {}, [], and “”

Friday, December 4, 2009

paredit-join-sexps

keys

M-S-j

same for {}, [], and “”

(cky)| (bcn)

(cky| bcn)

chunky-| bacon

chunky-|bacon

Friday, December 4, 2009

Friday, December 4, 2009

intermission

Friday, December 4, 2009

8/8 in the wild(tips and tricks)

Friday, December 4, 2009

8.1/8 demo

C-w is not a paredit thing

show-paren-mode warning

fixing unbalanced parens

Friday, December 4, 2009

add parens when unbalanced

(override matched keys w/ C-q)

(important )|

keys

C-q )(important |

same for {}, [], and “”

Friday, December 4, 2009

remove pesky spaces

(important|)

(important |)

keys

C-k then

<del>

(important| )

Friday, December 4, 2009

remove stray parens

with comments

poor paren|)keys

DELthen ; then

C-d

poor paren)|

poor paren;|)

poor paren;|

Friday, December 4, 2009

override paredit delete

LTR

keys

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

Friday, December 4, 2009

remove stray parens

probably the right way

poor paren|

keys

C-u DELpoor paren)|

Friday, December 4, 2009

dammit, emacs

keys

M-x butterfly LTR

Friday, December 4, 2009

M-x butterflyhttp://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 () (paredit-mode +1)))

Karol Skocik - http://coding.derkeiler.com/Archive/Lisp/comp.lang.lisp/2007-07/

Friday, December 4, 2009

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

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

stole from...

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

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

technomancy - screencast soon?

Friday, December 4, 2009

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

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

top related