paredit preso
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 <[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