SlideShare a Scribd company logo
1 of 80
Download to read offline
Bay Area Clojure Meetup
          functional lispers




                                        December 3, 2009
                               Runa Galactic Headquarters


Friday, December 4, 2009
paredit
          At 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
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
Because, these are your father’s parentheses...




                                              http://xkcd.com/297/

Friday, December 4, 2009
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
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
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
wrapping
                                  killing
                                  raising
                                  splicing
                                  slurping / barfing
          1.2/8            demo   splitting / joining




Friday, December 4, 2009
2/8 basic        insertion commands




Friday, December 4, 2009
paredit-open-round




           keys
                              (a b |c d)
                (
                              (a b (|) c d)


Friday, December 4, 2009
paredit-close-round-and-newline




           keys                (a b |c     )
                )              (a b c)
                               |

Friday, December 4, 2009
paredit-close-round




           keys
                               (a b |c    )
          M-)
                               (a b c)|


Friday, December 4, 2009
paredit-open-square




           keys
                               (a b |c d)
                [
                               (a b [|] c)


Friday, December 4, 2009
paredit-close-square




           keys
                           (defn cky [bcn|   ] 2)
                ]
                           (defn cky [bcn]| 2)


Friday, December 4, 2009
paredit-doublequote




           keys
                           (ça va |bien)
               “
                           (ça va “|” bien)


Friday, December 4, 2009
paredit-doublequote
         (while in a quote)



           keys
                           (the “q|uick” fox)
               “
                           (the “q”|uick” fox)


Friday, December 4, 2009
paredit-meta-doublequote




           keys
                           (the |(cky) bcn)
           M-”
                           (the “|(cky)” bcn)


Friday, December 4, 2009
paredit-meta-doublequote
         (while in quote)



           keys            (the “chk|y” bcn)
           M-”             (the “chky”
                                |bcn)

Friday, December 4, 2009
paredit-comment-dwim




           keys
                           (blah |xyz)   ; baz
           M-;
                           (blah xyz)    ; |baz


Friday, December 4, 2009
paredit-comment-dwim




           keys
                           (amit siva)|
           M-;
                           (amit siva)    ;|


Friday, December 4, 2009
paredit-comment-dwim

                                (hbase)
                                |
           keys                 (clojure)
           M-;                  (hbase)
                                ;;; |
                                (clojure)
Friday, December 4, 2009
paredit-comment-dwim




                            (ruby) |(java)
           keys

           M-;              (ruby)
                            ;;; |
                            (java)
Friday, December 4, 2009
paredit-newline




           keys            (let [x 2] |(list x y)
             C-j           (let [x 2]
                             |(list x y))

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)
           keys
                           (“|third” worst)
          C-d
                           (“|hird” worst)

Friday, December 4, 2009
paredit-forward-delete

                                  (w |(x) y)

           keys                   (w (|x) y)
          C-d                     (w (|) y)

                                  (w | y)
Friday, December 4, 2009
paredit-backward-delete


                             (“speed” w|alk)
           keys             (“speed” |alk)
         DEL                (“speed”|alk)
                            (“speed|”alk)
                            (“spee|”alk)
Friday, December 4, 2009
paredit-backward-delete

                                   (w (x)| y)

           keys                    (w (x|) y)
         DEL                       (w (|) y)

                                   (w | y)
Friday, December 4, 2009
paredit-kill




           keys
                           (zee)| ;comment
           C-k
                           (zee)|


Friday, December 4, 2009
paredit-kill


                           (|zee) ;comment

           keys            (|) ;comment
           C-k
                           (println “|x is:” x)
                           (println “|” x)
Friday, December 4, 2009
paredit-forward-kill-word



                           |(declare x) ;comment
           keys
                           (| x) ;comment
          M-d
                           (|) ;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
                           (declare x) ;comment
        M-DEL
                           (|)

                           (declare x) ;|
Friday, December 4, 2009
paredit-backward-kill-word




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

Friday, December 4, 2009
4/8 movement     & navigation




Friday, December 4, 2009
paredit-forward




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


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




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


Friday, December 4, 2009
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
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
                                      (eat |cky bcn)
          M-(
                                      (eat (|cky) bcn)

            same for {}, [], and “”

Friday, December 4, 2009
paredit-splice-sexp




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


Friday, December 4, 2009
paredit-splice-sexp-killing-backward




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


Friday, December 4, 2009
paredit-splice-sexp-killing-forward




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


Friday, December 4, 2009
paredit-raise-sexp




           keys            (eat (cky |bcn) sdwch)
          M-r              (eat |bcn sdwch)
                           |bcn

Friday, December 4, 2009
6/8 barfage      & slurpage




Friday, December 4, 2009
paredit-forward-slurp-sexp




           keys
                               (eat (|cky) bcn z)
         C-)
         C-<right>             (eat (|cky bcn) z)


Friday, December 4, 2009
paredit-forward-barf-sexp




           keys
                               (eat (|cky bcn) z)
         C-}
         C-<left>              (eat (|cky) bcn z)


Friday, December 4, 2009
paredit-backward-slurp-sexp




           keys
         C-(                (omg eat (|cky) bcn)
         C-M-<left> (omg (eat |cky) bcn)

Friday, December 4, 2009
paredit-backward-barf-sexp




           keys
         C-{         (omg (eat |cky) bcn)
         C-M-<right> (omg eat (|cky) bcn)

Friday, December 4, 2009
7/8 miscellaneous   commands




Friday, December 4, 2009
paredit-split-sexp




           keys
                                      (cky |bcn)
          M-S-s
                                      (cky) |(bcn)

            same for {}, [], and “”

Friday, December 4, 2009
paredit-join-sexps
                                      (cky)| (bcn)
                                      (cky| bcn)
           keys
                                      chunky-
          M-S-j                       | bacon
                                      chunky-|bacon
            same for {}, [], and “”

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
C-w is not a paredit thing
                                  show-paren-mode warning
          8.1/8            demo   fixing unbalanced parens




Friday, December 4, 2009
add parens when unbalanced
         (override matched keys w/ C-q)



           keys                       (important |
          C-q )
                                      (important )|

            same for {}, [], and “”

Friday, December 4, 2009
remove pesky spaces


                               (important
                               |       )
           keys
                               (important
           C-k
           then                |)
           <del>               (important |)
Friday, December 4, 2009
remove stray parens
         with comments

                               poor paren)|
           keys
                               poor paren|)
           DEL
           then ; then         poor paren;|)
           C-d                 poor paren;|
Friday, December 4, 2009
override paredit delete




           keys
          C-u DEL
          C-u C-d                  LTR
          C-u C-k
Friday, December 4, 2009
remove stray parens
         probably the right way



           keys
                                  poor paren)|
           C-u DEL
                                  poor paren|


Friday, December 4, 2009
dammit, emacs




           keys

           M-x butterfly    LTR



Friday, December 4, 2009
M-x butterfly
                           http://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/PareditCheatsheet
Friday, 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

More Related Content

Viewers also liked

本格的に始めるzsh
本格的に始めるzsh本格的に始めるzsh
本格的に始めるzshHideaki Miyake
 
Ruby1.9のfiberのかっこいい使い方
Ruby1.9のfiberのかっこいい使い方Ruby1.9のfiberのかっこいい使い方
Ruby1.9のfiberのかっこいい使い方Kindai University
 
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪Kunihiro TANAKA
 
プログラマとして仕事をするために勉強すること
プログラマとして仕事をするために勉強することプログラマとして仕事をするために勉強すること
プログラマとして仕事をするために勉強することなおき きしだ
 
Code as data as code.
Code as data as code.Code as data as code.
Code as data as code.Mike Fogus
 
受託開発時におけるAWSクラウド活用術
受託開発時におけるAWSクラウド活用術受託開発時におけるAWSクラウド活用術
受託開発時におけるAWSクラウド活用術Hiroshi Koyama
 
ARC環境で メモリリークを起こす 7つの方法
ARC環境で メモリリークを起こす 7つの方法ARC環境で メモリリークを起こす 7つの方法
ARC環境で メモリリークを起こす 7つの方法ushiostarfish _
 
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略Teppei Sato
 
ChefConf 2013: Beginner Chef Antipatterns
ChefConf 2013: Beginner Chef AntipatternsChefConf 2013: Beginner Chef Antipatterns
ChefConf 2013: Beginner Chef AntipatternsJulian Dunn
 
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~Naotoshi Seo
 
Scala 初めての人が Heroku で Web アプリを公開するまで
Scala 初めての人が Heroku で Web アプリを公開するまでScala 初めての人が Heroku で Web アプリを公開するまで
Scala 初めての人が Heroku で Web アプリを公開するまでHideaki Miyake
 
Build Your Own SaaS using Docker
Build Your Own SaaS using DockerBuild Your Own SaaS using Docker
Build Your Own SaaS using DockerJulien Barbier
 
Purely Functional Data Structures in Scala
Purely Functional Data Structures in ScalaPurely Functional Data Structures in Scala
Purely Functional Data Structures in ScalaVladimir Kostyukov
 
かなりすごい発表(かなり) at VimConf2014
かなりすごい発表(かなり) at VimConf2014かなりすごい発表(かなり) at VimConf2014
かなりすごい発表(かなり) at VimConf2014Sugoi Kanari
 
From a monolithic Ruby on Rails app to the JVM
From a monolithic  Ruby on Rails app  to the JVMFrom a monolithic  Ruby on Rails app  to the JVM
From a monolithic Ruby on Rails app to the JVMPhil Calçado
 
Rubyからscalaに変えるべき15の理由
Rubyからscalaに変えるべき15の理由Rubyからscalaに変えるべき15の理由
Rubyからscalaに変えるべき15の理由Yukishige Nakajo
 

Viewers also liked (20)

本格的に始めるzsh
本格的に始めるzsh本格的に始めるzsh
本格的に始めるzsh
 
Ruby1.9のfiberのかっこいい使い方
Ruby1.9のfiberのかっこいい使い方Ruby1.9のfiberのかっこいい使い方
Ruby1.9のfiberのかっこいい使い方
 
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
 
プログラマとして仕事をするために勉強すること
プログラマとして仕事をするために勉強することプログラマとして仕事をするために勉強すること
プログラマとして仕事をするために勉強すること
 
Project Lambdaの基礎
Project Lambdaの基礎Project Lambdaの基礎
Project Lambdaの基礎
 
Code as data as code.
Code as data as code.Code as data as code.
Code as data as code.
 
受託開発時におけるAWSクラウド活用術
受託開発時におけるAWSクラウド活用術受託開発時におけるAWSクラウド活用術
受託開発時におけるAWSクラウド活用術
 
ARC環境で メモリリークを起こす 7つの方法
ARC環境で メモリリークを起こす 7つの方法ARC環境で メモリリークを起こす 7つの方法
ARC環境で メモリリークを起こす 7つの方法
 
ES6 at PayPal
ES6 at PayPalES6 at PayPal
ES6 at PayPal
 
Eclipse活用術
Eclipse活用術Eclipse活用術
Eclipse活用術
 
Storm Anatomy
Storm AnatomyStorm Anatomy
Storm Anatomy
 
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
 
ChefConf 2013: Beginner Chef Antipatterns
ChefConf 2013: Beginner Chef AntipatternsChefConf 2013: Beginner Chef Antipatterns
ChefConf 2013: Beginner Chef Antipatterns
 
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~
 
Scala 初めての人が Heroku で Web アプリを公開するまで
Scala 初めての人が Heroku で Web アプリを公開するまでScala 初めての人が Heroku で Web アプリを公開するまで
Scala 初めての人が Heroku で Web アプリを公開するまで
 
Build Your Own SaaS using Docker
Build Your Own SaaS using DockerBuild Your Own SaaS using Docker
Build Your Own SaaS using Docker
 
Purely Functional Data Structures in Scala
Purely Functional Data Structures in ScalaPurely Functional Data Structures in Scala
Purely Functional Data Structures in Scala
 
かなりすごい発表(かなり) at VimConf2014
かなりすごい発表(かなり) at VimConf2014かなりすごい発表(かなり) at VimConf2014
かなりすごい発表(かなり) at VimConf2014
 
From a monolithic Ruby on Rails app to the JVM
From a monolithic  Ruby on Rails app  to the JVMFrom a monolithic  Ruby on Rails app  to the JVM
From a monolithic Ruby on Rails app to the JVM
 
Rubyからscalaに変えるべき15の理由
Rubyからscalaに変えるべき15の理由Rubyからscalaに変えるべき15の理由
Rubyからscalaに変えるべき15の理由
 

Recently uploaded

Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 

Recently uploaded (20)

Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 

Paredit Preso

  • 1. Bay Area Clojure Meetup functional lispers December 3, 2009 Runa Galactic Headquarters Friday, December 4, 2009
  • 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. 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. and we’re hiring clojure-hbase-ruby-hadoop-rails-javascript-chefs Friday, December 4, 2009
  • 5. 0/8 why Friday, December 4, 2009
  • 6. Q: What is paredit? A: paredit is a minor mode for Emacs, created by Taylor R. Campbell. Friday, December 4, 2009
  • 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. Because, these are your father’s parentheses... http://xkcd.com/297/ Friday, December 4, 2009
  • 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. 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. 1/8 balancing Friday, December 4, 2009
  • 12. balancing basics keys ([“ ([“”]) Friday, December 4, 2009
  • 13. 1.1/8 assumptions Friday, December 4, 2009
  • 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. 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. wrapping killing raising splicing slurping / barfing 1.2/8 demo splitting / joining Friday, December 4, 2009
  • 17. 2/8 basic insertion commands Friday, December 4, 2009
  • 18. paredit-open-round keys (a b |c d) ( (a b (|) c d) Friday, December 4, 2009
  • 19. paredit-close-round-and-newline keys (a b |c ) ) (a b c) | Friday, December 4, 2009
  • 20. paredit-close-round keys (a b |c ) M-) (a b c)| Friday, December 4, 2009
  • 21. paredit-open-square keys (a b |c d) [ (a b [|] c) Friday, December 4, 2009
  • 22. paredit-close-square keys (defn cky [bcn| ] 2) ] (defn cky [bcn]| 2) Friday, December 4, 2009
  • 23. paredit-doublequote keys (ça va |bien) “ (ça va “|” bien) Friday, December 4, 2009
  • 24. paredit-doublequote (while in a quote) keys (the “q|uick” fox) “ (the “q”|uick” fox) Friday, December 4, 2009
  • 25. paredit-meta-doublequote keys (the |(cky) bcn) M-” (the “|(cky)” bcn) Friday, December 4, 2009
  • 26. paredit-meta-doublequote (while in quote) keys (the “chk|y” bcn) M-” (the “chky” |bcn) Friday, December 4, 2009
  • 27. paredit-comment-dwim keys (blah |xyz) ; baz M-; (blah xyz) ; |baz Friday, December 4, 2009
  • 28. paredit-comment-dwim keys (amit siva)| M-; (amit siva) ;| Friday, December 4, 2009
  • 29. paredit-comment-dwim (hbase) | keys (clojure) M-; (hbase) ;;; | (clojure) Friday, December 4, 2009
  • 30. paredit-comment-dwim (ruby) |(java) keys M-; (ruby) ;;; | (java) Friday, December 4, 2009
  • 31. paredit-newline keys (let [x 2] |(list x y) C-j (let [x 2] |(list x y)) Friday, December 4, 2009
  • 32. intermission http://xkcd.com/224/ Friday, December 4, 2009
  • 33. 3/8 deleting & killing Friday, December 4, 2009
  • 34. paredit-forward-delete (|”third” worst) keys (“|third” worst) C-d (“|hird” worst) Friday, December 4, 2009
  • 35. paredit-forward-delete (w |(x) y) keys (w (|x) y) C-d (w (|) y) (w | y) Friday, December 4, 2009
  • 36. paredit-backward-delete (“speed” w|alk) keys (“speed” |alk) DEL (“speed”|alk) (“speed|”alk) (“spee|”alk) Friday, December 4, 2009
  • 37. paredit-backward-delete (w (x)| y) keys (w (x|) y) DEL (w (|) y) (w | y) Friday, December 4, 2009
  • 38. paredit-kill keys (zee)| ;comment C-k (zee)| Friday, December 4, 2009
  • 39. paredit-kill (|zee) ;comment keys (|) ;comment C-k (println “|x is:” x) (println “|” x) Friday, December 4, 2009
  • 40. paredit-forward-kill-word |(declare x) ;comment keys (| x) ;comment M-d (|) ;comment () ;| Friday, December 4, 2009
  • 41. paredit-forward-kill-word ;| hack (declare x) keys ;| M-d (declare x) ; (| x) Friday, December 4, 2009
  • 42. paredit-backward-kill-word (declare x) ;comment (zee) | keys (declare x) ;comment M-DEL (|) (declare x) ;| Friday, December 4, 2009
  • 43. paredit-backward-kill-word keys (declare x) ;| M-DEL (declare |) (|) Friday, December 4, 2009
  • 44. 4/8 movement & navigation Friday, December 4, 2009
  • 45. paredit-forward keys (conj |[1 2 3] 4) C-M-f (conj [1 2 3]| 4) Friday, December 4, 2009
  • 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. paredit-backward keys (conj [1 2 3]| 4) C-M-b (conj |[1 2 3] 4) Friday, December 4, 2009
  • 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. intermission http://www.flickr.com/photos/nickporjr/2158780350/ Friday, December 4, 2009
  • 50. 5/8 depth-changing commands Friday, December 4, 2009
  • 51. paredit-wrap-around keys (eat |cky bcn) M-( (eat (|cky) bcn) same for {}, [], and “” Friday, December 4, 2009
  • 52. paredit-splice-sexp keys (eat (|cky bcn) sdwch) M-s (eat |cky bcn sdwch) Friday, December 4, 2009
  • 53. paredit-splice-sexp-killing-backward keys (eat (cky |bcn)) M-<up> (eat |bcn) Friday, December 4, 2009
  • 54. paredit-splice-sexp-killing-forward keys (eat (cky |bcn)) M-<down> (eat cky|) Friday, December 4, 2009
  • 55. paredit-raise-sexp keys (eat (cky |bcn) sdwch) M-r (eat |bcn sdwch) |bcn Friday, December 4, 2009
  • 56. 6/8 barfage & slurpage Friday, December 4, 2009
  • 57. paredit-forward-slurp-sexp keys (eat (|cky) bcn z) C-) C-<right> (eat (|cky bcn) z) Friday, December 4, 2009
  • 58. paredit-forward-barf-sexp keys (eat (|cky bcn) z) C-} C-<left> (eat (|cky) bcn z) Friday, December 4, 2009
  • 59. paredit-backward-slurp-sexp keys C-( (omg eat (|cky) bcn) C-M-<left> (omg (eat |cky) bcn) Friday, December 4, 2009
  • 60. paredit-backward-barf-sexp keys C-{ (omg (eat |cky) bcn) C-M-<right> (omg eat (|cky) bcn) Friday, December 4, 2009
  • 61. 7/8 miscellaneous commands Friday, December 4, 2009
  • 62. paredit-split-sexp keys (cky |bcn) M-S-s (cky) |(bcn) same for {}, [], and “” Friday, December 4, 2009
  • 63. paredit-join-sexps (cky)| (bcn) (cky| bcn) keys chunky- M-S-j | bacon chunky-|bacon same for {}, [], and “” Friday, December 4, 2009
  • 66. 8/8 in the wild (tips and tricks) Friday, December 4, 2009
  • 67. C-w is not a paredit thing show-paren-mode warning 8.1/8 demo fixing unbalanced parens Friday, December 4, 2009
  • 68. add parens when unbalanced (override matched keys w/ C-q) keys (important | C-q ) (important )| same for {}, [], and “” Friday, December 4, 2009
  • 69. remove pesky spaces (important | ) keys (important C-k then |) <del> (important |) Friday, December 4, 2009
  • 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. override paredit delete keys C-u DEL C-u C-d LTR C-u C-k Friday, December 4, 2009
  • 72. remove stray parens probably the right way keys poor paren)| C-u DEL poor paren| Friday, December 4, 2009
  • 73. dammit, emacs keys M-x butterfly LTR Friday, December 4, 2009
  • 74. M-x butterfly http://xkcd.com/378/ Friday, December 4, 2009
  • 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. 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
  • 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. 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. 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