Download - Paredit Preso
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 <[email protected]>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