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

Ruby1.9のfiberのかっこいい使い方
Ruby1.9のfiberのかっこいい使い方Ruby1.9のfiberのかっこいい使い方
Ruby1.9のfiberのかっこいい使い方
Kindai University
 
Code as data as code.
Code as data as code.Code as data as code.
Code as data as code.
Mike Fogus
 
ARC環境で メモリリークを起こす 7つの方法
ARC環境で メモリリークを起こす 7つの方法ARC環境で メモリリークを起こす 7つの方法
ARC環境で メモリリークを起こす 7つの方法
ushiostarfish _
 
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Naotoshi Seo
 
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
Phil Calçado
 

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

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Recently uploaded (20)

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
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
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...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 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
 

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