SlideShare a Scribd company logo
1 of 16
Download to read offline
Getting things done
with Emacs
An editor for Jedis :-)
❖ Not going to evangelize, no
comparisons; things I find
useful, nothing more
❖ “Show and Tell”
❖ My own history …
❖ What editors do you all use?
Background
Outline
❖ Dive into features
❖ Present workflows
❖ Day-to-day development, nothing more
❖ I’ll keep the “why Emacs” and “setup tips” for the end
❖ Demo stuff along with the slides
❖ Please do interrupt with questions!
Basic stuff
❖ Essential fact: Emacs is (mostly) non-modal. M-x is your
friend.
❖ helm-M-x (also, Helm is your friend)
❖ Save your keystrokes!
❖ Another example: M-x helm-swoop (just bind it to
search)
Development Tools
❖ Rtags integration
❖ M-x rtags-find-all-references-at-point
❖ M-x rtags-find-symbol
❖ (... and much more)
❖ Compilation buffer
❖ M-x compile
❖ Flycheck
❖ Get error descriptions as you type!
Development Tools (2)
❖ Helm-projectile
❖ M-x helm-projectile-find-file-dwim
❖ Searching
❖ M-x helm-swoop
❖ M-x helm-projectile-ag
❖ Imenu/Semantic
❖ Lightweight/heavyweight
❖ M-x helm-semantic-or-imenu
Development Tools (3)
❖ Splitting and moving windows
❖ Aside: “Frames” and “windows”
❖ M-x windmove-{left,right,up,down} (bind to useful keyboard shortcuts!)
❖ Formatting
❖ M-x clang-format{-region}
❖ (Why wait to run make clang-format-patch-stack!)
❖ Diffing
❖ M-x smerge-{…}
❖ (Show colorized diff in place, hotkeys for keeping “mine”/“other”/“base”)
❖ Undo-ing
❖ M-x undo …. meh … M-x undo-tree-visualize … whoa!
❖ Copy-pasting
❖ M-x helm-show-kill-ring
Misc useful stuff
❖ Multiple cursors
❖ M-x mc/mark-all-like-this
❖ Eshell
❖ Nifty! s-expressions in your shell …
❖ M-x eshell
❖ Org mode
❖ Some people think it’s really cool
❖ Spacemacs
❖ Some people think it’s a good “batteries included” version of Emacs, “Vim-friendly”
❖ OSX Key bindings
❖ They’re everywhere, once you start looking for them
❖ Try it now! (Ctrl-n, Ctrl-p, Ctrl-f, Ctrl-b, Ctrl-a, Ctrl-e, Ctrl-k, Ctrl-y)
(Ma)Git
❖ “Magit” autocorrects to “Magic”
❖ M-x magit-status
❖ The best git porcelain, ever. Ever.
Sample dev flow
❖ (tying it all together)
❖ Checkout branch / Make some changes / commit /
search-replace-make-changes / Rebase (interactive!
reorder!) / Push
Beginning with Emacs
❖ Getting it
❖ Ubuntu: …
❖ Mac: just use brew
❖ Configuration
❖ .emacs
❖ But, I recommend another level of indirection
❖ E.g. I keep a dotemacs.el inside .emacs.d, version-controlled
❖ Easy to add new packages these days (I was done on day 1 here!)
Beginning with Emacs (2)
❖ Remap keys (save your fingers!)
❖ “Ctrl”: Get rid of Caps Lock
❖ Seriously, you don’t need that
❖ “Alt”: I replace M-x with C-x C-m
❖ Add the Elpa/Melpa/Marmalade repos
❖ Tons of packages, especially in the era of Github
❖ M-x list-packages
Beginning Emacs (3)
❖ Some resources
❖ Internal: Slack channel #emacs
❖ External: Stack exchange, LMGTFY
❖ Book: Mastering Emacs
❖ So, if you were waiting to try it out, go for it!
❖ But, yeah, it can take time (months? years?)
Tl;dr:
❖ There are lots of practical optimizations possible in the
day-to-day workflow
❖ It’s good to keep trying to find different/better ways to
do something
❖ You don’t have to use Emacs (obviously) — but, make
sure you find some equivalent of each plugin/function
mentioned here.
(finally) Why Emacs?
❖ Limitless customization
❖ Custom-built for you
❖ The usual pros and cons
❖ Limitless integration
❖ (I’m not that hardcore, but …) mail client, browser, IRC client,
therapist?
❖ Future proof
❖ It’s been around for a while
❖ It will outlive everything else (except, perhaps, Vim)
Questions?

More Related Content

What's hot

Introduction to rails
Introduction to railsIntroduction to rails
Introduction to railsGo Asgard
 
Drupal + selenium
Drupal + seleniumDrupal + selenium
Drupal + seleniumhernanibf
 
A day in the office of a js developer
A day in the office   of a js developerA day in the office   of a js developer
A day in the office of a js developerKrešimir Antolić
 
Front End Development Automation with Grunt
Front End Development Automation with GruntFront End Development Automation with Grunt
Front End Development Automation with GruntLadies Who Code
 
Extreme Javascript Minification
Extreme Javascript MinificationExtreme Javascript Minification
Extreme Javascript MinificationDavid Goemans
 
How to become a practical Vim user
How to become a practical Vim userHow to become a practical Vim user
How to become a practical Vim userKana Natsuno
 
Guide to the Open Source Desktop
Guide to the Open Source DesktopGuide to the Open Source Desktop
Guide to the Open Source DesktopPOSSCON
 
HTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan KrausHTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan KrausWomen in Technology Poland
 

What's hot (12)

Introduction to rails
Introduction to railsIntroduction to rails
Introduction to rails
 
AngularJs Crash Course
AngularJs Crash CourseAngularJs Crash Course
AngularJs Crash Course
 
Drupal + selenium
Drupal + seleniumDrupal + selenium
Drupal + selenium
 
A day in the office of a js developer
A day in the office   of a js developerA day in the office   of a js developer
A day in the office of a js developer
 
Front End Development Automation with Grunt
Front End Development Automation with GruntFront End Development Automation with Grunt
Front End Development Automation with Grunt
 
Extreme Javascript Minification
Extreme Javascript MinificationExtreme Javascript Minification
Extreme Javascript Minification
 
How to become a practical Vim user
How to become a practical Vim userHow to become a practical Vim user
How to become a practical Vim user
 
Docker
DockerDocker
Docker
 
Guide to the Open Source Desktop
Guide to the Open Source DesktopGuide to the Open Source Desktop
Guide to the Open Source Desktop
 
HTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan KrausHTML, CSS & Javascript Architecture (extended version) - Jan Kraus
HTML, CSS & Javascript Architecture (extended version) - Jan Kraus
 
Vim survival guide
Vim survival guideVim survival guide
Vim survival guide
 
Why Add Ons
Why Add OnsWhy Add Ons
Why Add Ons
 

Similar to Getting Things Done with Emacs

NYPHP March 2009 Presentation
NYPHP March 2009 PresentationNYPHP March 2009 Presentation
NYPHP March 2009 Presentationbrian_dailey
 
[Mas 500] Software Development Strategies
[Mas 500] Software Development Strategies[Mas 500] Software Development Strategies
[Mas 500] Software Development Strategiesrahulbot
 
Makefile for python projects
Makefile for python projectsMakefile for python projects
Makefile for python projectsMpho Mphego
 
Craftsmanship in Computational Work
Craftsmanship in Computational WorkCraftsmanship in Computational Work
Craftsmanship in Computational WorkYung-Yu Chen
 
Js deobfuscation with JStillery - bsides-roma 2018
Js deobfuscation with JStillery - bsides-roma 2018Js deobfuscation with JStillery - bsides-roma 2018
Js deobfuscation with JStillery - bsides-roma 2018Minded Security
 
Puppet@Citygrid - Julien Rottenberg - PuppetCamp LA '12
Puppet@Citygrid - Julien Rottenberg - PuppetCamp LA '12Puppet@Citygrid - Julien Rottenberg - PuppetCamp LA '12
Puppet@Citygrid - Julien Rottenberg - PuppetCamp LA '12Puppet
 
Emacs, a performant IDE for Perl
Emacs, a performant IDE for PerlEmacs, a performant IDE for Perl
Emacs, a performant IDE for PerlLaurent Dami
 
Ci For The Web 2.0 Guy Or Gal
Ci For The Web 2.0 Guy Or GalCi For The Web 2.0 Guy Or Gal
Ci For The Web 2.0 Guy Or GalChad Woolley
 
Bioinformatica 29-09-2011-p1-introduction
Bioinformatica 29-09-2011-p1-introductionBioinformatica 29-09-2011-p1-introduction
Bioinformatica 29-09-2011-p1-introductionProf. Wim Van Criekinge
 
Fullstack Academy - Awesome Web Dev Tips & Tricks
Fullstack Academy - Awesome Web Dev Tips & TricksFullstack Academy - Awesome Web Dev Tips & Tricks
Fullstack Academy - Awesome Web Dev Tips & TricksFrances Coronel
 
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides:  Let's build macOS CLI Utilities using SwiftMobileConf 2021 Slides:  Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides: Let's build macOS CLI Utilities using SwiftDiego Freniche Brito
 
Save time and your sanity: Increase your efficiency with Microsoft Word
Save time and your sanity: Increase your efficiency with Microsoft Word Save time and your sanity: Increase your efficiency with Microsoft Word
Save time and your sanity: Increase your efficiency with Microsoft Word Rhonda Bracey
 
keyboard accessibility
keyboard accessibilitykeyboard accessibility
keyboard accessibilityakira9515
 
Red Teaming macOS Environments with Hermes the Swift Messenger
Red Teaming macOS Environments with Hermes the Swift MessengerRed Teaming macOS Environments with Hermes the Swift Messenger
Red Teaming macOS Environments with Hermes the Swift MessengerJustin Bui
 
Open shift
Open shiftOpen shift
Open shiftmarcolof
 

Similar to Getting Things Done with Emacs (20)

Small Screen Development
Small Screen DevelopmentSmall Screen Development
Small Screen Development
 
NYPHP March 2009 Presentation
NYPHP March 2009 PresentationNYPHP March 2009 Presentation
NYPHP March 2009 Presentation
 
[Mas 500] Software Development Strategies
[Mas 500] Software Development Strategies[Mas 500] Software Development Strategies
[Mas 500] Software Development Strategies
 
Makefile for python projects
Makefile for python projectsMakefile for python projects
Makefile for python projects
 
Craftsmanship in Computational Work
Craftsmanship in Computational WorkCraftsmanship in Computational Work
Craftsmanship in Computational Work
 
Js deobfuscation with JStillery - bsides-roma 2018
Js deobfuscation with JStillery - bsides-roma 2018Js deobfuscation with JStillery - bsides-roma 2018
Js deobfuscation with JStillery - bsides-roma 2018
 
Puppet@Citygrid - Julien Rottenberg - PuppetCamp LA '12
Puppet@Citygrid - Julien Rottenberg - PuppetCamp LA '12Puppet@Citygrid - Julien Rottenberg - PuppetCamp LA '12
Puppet@Citygrid - Julien Rottenberg - PuppetCamp LA '12
 
Emacs tutorial
Emacs tutorialEmacs tutorial
Emacs tutorial
 
Emacs, a performant IDE for Perl
Emacs, a performant IDE for PerlEmacs, a performant IDE for Perl
Emacs, a performant IDE for Perl
 
Ci For The Web 2.0 Guy Or Gal
Ci For The Web 2.0 Guy Or GalCi For The Web 2.0 Guy Or Gal
Ci For The Web 2.0 Guy Or Gal
 
Bioinformatica 29-09-2011-p1-introduction
Bioinformatica 29-09-2011-p1-introductionBioinformatica 29-09-2011-p1-introduction
Bioinformatica 29-09-2011-p1-introduction
 
Fullstack Academy - Awesome Web Dev Tips & Tricks
Fullstack Academy - Awesome Web Dev Tips & TricksFullstack Academy - Awesome Web Dev Tips & Tricks
Fullstack Academy - Awesome Web Dev Tips & Tricks
 
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides:  Let's build macOS CLI Utilities using SwiftMobileConf 2021 Slides:  Let's build macOS CLI Utilities using Swift
MobileConf 2021 Slides: Let's build macOS CLI Utilities using Swift
 
tools
toolstools
tools
 
tools
toolstools
tools
 
Save time and your sanity: Increase your efficiency with Microsoft Word
Save time and your sanity: Increase your efficiency with Microsoft Word Save time and your sanity: Increase your efficiency with Microsoft Word
Save time and your sanity: Increase your efficiency with Microsoft Word
 
Os Wilhelm
Os WilhelmOs Wilhelm
Os Wilhelm
 
keyboard accessibility
keyboard accessibilitykeyboard accessibility
keyboard accessibility
 
Red Teaming macOS Environments with Hermes the Swift Messenger
Red Teaming macOS Environments with Hermes the Swift MessengerRed Teaming macOS Environments with Hermes the Swift Messenger
Red Teaming macOS Environments with Hermes the Swift Messenger
 
Open shift
Open shiftOpen shift
Open shift
 

Recently uploaded

Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Intelisync
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyFrank van der Linden
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptkotipi9215
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...harshavardhanraghave
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 

Recently uploaded (20)

Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The Ugly
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
chapter--4-software-project-planning.ppt
chapter--4-software-project-planning.pptchapter--4-software-project-planning.ppt
chapter--4-software-project-planning.ppt
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
Exploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the ProcessExploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the Process
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 

Getting Things Done with Emacs

  • 1. Getting things done with Emacs An editor for Jedis :-)
  • 2. ❖ Not going to evangelize, no comparisons; things I find useful, nothing more ❖ “Show and Tell” ❖ My own history … ❖ What editors do you all use? Background
  • 3. Outline ❖ Dive into features ❖ Present workflows ❖ Day-to-day development, nothing more ❖ I’ll keep the “why Emacs” and “setup tips” for the end ❖ Demo stuff along with the slides ❖ Please do interrupt with questions!
  • 4. Basic stuff ❖ Essential fact: Emacs is (mostly) non-modal. M-x is your friend. ❖ helm-M-x (also, Helm is your friend) ❖ Save your keystrokes! ❖ Another example: M-x helm-swoop (just bind it to search)
  • 5. Development Tools ❖ Rtags integration ❖ M-x rtags-find-all-references-at-point ❖ M-x rtags-find-symbol ❖ (... and much more) ❖ Compilation buffer ❖ M-x compile ❖ Flycheck ❖ Get error descriptions as you type!
  • 6. Development Tools (2) ❖ Helm-projectile ❖ M-x helm-projectile-find-file-dwim ❖ Searching ❖ M-x helm-swoop ❖ M-x helm-projectile-ag ❖ Imenu/Semantic ❖ Lightweight/heavyweight ❖ M-x helm-semantic-or-imenu
  • 7. Development Tools (3) ❖ Splitting and moving windows ❖ Aside: “Frames” and “windows” ❖ M-x windmove-{left,right,up,down} (bind to useful keyboard shortcuts!) ❖ Formatting ❖ M-x clang-format{-region} ❖ (Why wait to run make clang-format-patch-stack!) ❖ Diffing ❖ M-x smerge-{…} ❖ (Show colorized diff in place, hotkeys for keeping “mine”/“other”/“base”) ❖ Undo-ing ❖ M-x undo …. meh … M-x undo-tree-visualize … whoa! ❖ Copy-pasting ❖ M-x helm-show-kill-ring
  • 8. Misc useful stuff ❖ Multiple cursors ❖ M-x mc/mark-all-like-this ❖ Eshell ❖ Nifty! s-expressions in your shell … ❖ M-x eshell ❖ Org mode ❖ Some people think it’s really cool ❖ Spacemacs ❖ Some people think it’s a good “batteries included” version of Emacs, “Vim-friendly” ❖ OSX Key bindings ❖ They’re everywhere, once you start looking for them ❖ Try it now! (Ctrl-n, Ctrl-p, Ctrl-f, Ctrl-b, Ctrl-a, Ctrl-e, Ctrl-k, Ctrl-y)
  • 9. (Ma)Git ❖ “Magit” autocorrects to “Magic” ❖ M-x magit-status ❖ The best git porcelain, ever. Ever.
  • 10. Sample dev flow ❖ (tying it all together) ❖ Checkout branch / Make some changes / commit / search-replace-make-changes / Rebase (interactive! reorder!) / Push
  • 11. Beginning with Emacs ❖ Getting it ❖ Ubuntu: … ❖ Mac: just use brew ❖ Configuration ❖ .emacs ❖ But, I recommend another level of indirection ❖ E.g. I keep a dotemacs.el inside .emacs.d, version-controlled ❖ Easy to add new packages these days (I was done on day 1 here!)
  • 12. Beginning with Emacs (2) ❖ Remap keys (save your fingers!) ❖ “Ctrl”: Get rid of Caps Lock ❖ Seriously, you don’t need that ❖ “Alt”: I replace M-x with C-x C-m ❖ Add the Elpa/Melpa/Marmalade repos ❖ Tons of packages, especially in the era of Github ❖ M-x list-packages
  • 13. Beginning Emacs (3) ❖ Some resources ❖ Internal: Slack channel #emacs ❖ External: Stack exchange, LMGTFY ❖ Book: Mastering Emacs ❖ So, if you were waiting to try it out, go for it! ❖ But, yeah, it can take time (months? years?)
  • 14. Tl;dr: ❖ There are lots of practical optimizations possible in the day-to-day workflow ❖ It’s good to keep trying to find different/better ways to do something ❖ You don’t have to use Emacs (obviously) — but, make sure you find some equivalent of each plugin/function mentioned here.
  • 15. (finally) Why Emacs? ❖ Limitless customization ❖ Custom-built for you ❖ The usual pros and cons ❖ Limitless integration ❖ (I’m not that hardcore, but …) mail client, browser, IRC client, therapist? ❖ Future proof ❖ It’s been around for a while ❖ It will outlive everything else (except, perhaps, Vim)