* Getting Cozy with Emacs
  Like a lightsaber, an Emacs setup is most effective when
  hand-assembled and honed over much practice. This talk will show you
  what it takes to put together a killer set of dotfiles, starting
  with a tour of indispensible features and libraries and going on to
  cover writing your own functions to extend Emacs with Elisp. Bring a
  laptop (with Emacs installed, of course) and knowledge of basic
  navigation and commands from the tutorial.
** Personal Introduction
** Introduction
   Emacs is ... a way of life. Once you get used to Emacs, it's hard
   for its constant hum not leak over into the rest of your machine. The
   effort you put into learning and extending Emacs will pay serious returns.
   - Hack-Improve-Share-Loop
** Poll the Audience, how many...
   - have Emacs installed?
   - have gone through the tutorial?
     - the PeepCode?
   - have their own dotfiles already?
   - have written elisp?
** Your Config: ~/.emacs.d
   - rather than clicking around on buttons and widgets, you write code
   - ~/.emacs.d/init.el is loaded at startup
   - It's real code! belongs in version control with the rest of your dotfiles
   - This dir contains elisp, temp files, packages, auto saved data, and config
   - create init.el
     - require package
       - included in 24
       - use C-M-x as we go, explain evaluation
     - add marmalade
       - explain marmalade vs elpa.gnu.org vs elpa
       - the cpan/rubygems.org/clojars of elisp
     - package-initialize
     - M-x package-list-packages
       - install paredit
       - manually enable paredit
     - defvar my-packages, dolist package-install
** Essential
   - ido
     - flex
     - virtual
     - ubiquitous
     - smex
     - temporarily disabling it (C-f to create new files)
     - C-k in buffer list
   - magit
     - stage interactively
     - log viewing
     - interactive rebase
   - and vc too, I guess
     - C-x v ... l, =, g, u
     - vc-resolve-conflicts
   - paredit
     - validity
     - splice, raise, slurp, etc
     - nonlisps
** Handy
   - idle-highlight
   - hl-line/global-hl-line-mode
   - find-file-in-project
   - imenu
   - eshell or shell
     - shell: for folks who've invested a lot in zsh, etc
     - eshell: holy crap you guys
       - augmented grep, find
       - implement completion in lisp
       - pipe to directly buffers
       - cd using tramp (!)
** Modes
   - Major
   - Minor
   - Hooks
     - prog-mode-hook
** Starter Kit
   - so far we've just been enabling things via M-x
     - you want that stuff to happen automatically, via hooks, etc.
     - that's what the starter kit does
   - loading system/user specific stuff
   - language-specific additions (optional)
   - bindings (optional)
   - used to be a full set of dotfiles, now just some packages
     - version 1 drove package.el adoption
     - version 2 is more hands-off
** Antifeatures
   - tabs (as UI or otherwise)
   - menus (or anything using the mouse)
   - cedet? (if you do C or C-derivatives, maybe useful)
   - customize
** Emacs Lisp
   Not the prettiest language around, but if you had to pick one to be
   stranded with on a desert island, not a bad choice.
*** Strengths
    - Interactivity. Unparalleled by anything except maybe Smalltalk
    - UI toolkit: unobtrusive, fiercely textual
    - Documentation
    - Composability
    - Macros
    - Closures (NEW!)
    - Ubiquity, stability
*** Weaknesses
    - Dynamic scope is default
    - Regexes are insane
    - Everything is a list, even things that shouldn't be (vectors, hashes suck)
    - No modules, long function names with prefixes
    - Lisp-2 (separate but equal; Jim Crow FP)
    - Crappy interop/libraries (HTTP, DBs, non-textual format support, etc)
*** Basics
    - evaluation: M-:, C-x C-e, ielm
    - defun
      - commands via interactive
    - help is crucial 
      - C-h f, C-h k
      - apropos, apropos-command, apropos-value
      - info
    - modes (find somewhere else for this)
      - major
      - minor
      - hooks
        - prog-mode-hook
    - variables
      - setq
      - defvar/defcustom
      - buffer-local
    - data types
      - lists uber alles
        - car, cdr, cons
      - pretty standard set
        - strings, numbers, lists
        - don't bother with vectors and hash-maps
      - symbols
        - not much like ruby symbols!
      - buffers
    - liberal use of examples
    - architecture
    - elisp vs c core
** Culture
   - Largely oral tradition
   - Curmudgeonly?
   - On freenode
   - package.el and marmalade
   - EmacsWiki
   - Conkeror
** Standalone Applications
   - ERC, rcirc
   - org (!!!)
   - dired, wdired
   - eshell
   - info
   - SLIME
   - Garak, Jabber.el
   - Gnus, Wanderlust
   - w3m
   - emms
   - epresent
   - auctex
   - if it involves text, there's probably an Emacs mode for it
** Versions
   Maybe do this as slides do breeze through; it's kinda boring
*** GNU Emacs 23
    - Released early 2009
    - Cocoa support
    - daemon mode
    - multi-tty
    - directory-local variables
    - easypg
    - nxml
    - ruby-mode
*** GNU Emacs 24
    - In feature freeze as of July, release in early 2012?
    - Added package.el
    - Added lexical scope (opt-in)
    - Added bidi
    - Added custom themes
    - Threads are on a branch
*** Aquamacs
    - Mac-specific Fork
    - Whatever man
    - Subtle incompatibilities
    - Full of antifeatures
*** XEmacs
    - Old Fork
    - At one time ahead of GNU Emacs in features
    - Development has slowed
    - Full of incompatibilities
** Random
   - working from the terminal
   - emacsclient
   - tmux and 256 colors
   - caps lock as control
   - color themes
     - 24 vs color-theme.el
   - Q&A

Generated by Phil Hagelberg using scpaste at Wed Sep 28 09:53:12 2011. PDT. (original)