]> git.donarmstrong.com Git - lib.git/blobdiff - emacs_el/configuration/don-configuration.org
delight org mode
[lib.git] / emacs_el / configuration / don-configuration.org
index 0e26c2ab1e115df9174c20f24b94d2c20fcfb02d..e9b962c70cd52f580753485b5174653864aae21f 100644 (file)
@@ -7,33 +7,68 @@
 #+BEGIN_SRC emacs-lisp
 (setq debug-on-event 'siguser2)
 #+END_SRC
-* Add library paths
-
+* Initial startup stuff
+** Disable startup screen
 #+BEGIN_SRC emacs-lisp
-  (add-to-list 'load-path '"~/lib/emacs_el/")
-  (add-to-list 'load-path '"~/lib/emacs_el/tiny-tools/lisp/tiny")
-  (add-to-list 'load-path '"~/lib/emacs_el/tiny-tools/lisp/other")
-  (add-to-list 'load-path '"~/lib/emacs_el/magit-annex")
+  (setq inhibit-startup-screen t)
+#+END_SRC
+** Disable cluter
+#+BEGIN_SRC emacs-lisp
+  ; (if (fboundp 'menu-bar-mode) (menu-bar-mode -1))
+  (if (fboundp 'tool-bar-mode) (tool-bar-mode -1))
+  (if (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
+#+END_SRC
+** Fullscreen
+#+BEGIN_SRC emacs-lisp
+  (setq frame-resize-pixelwise t)
+  (add-to-list 'default-frame-alist '(fullscreen . maximixed))
 #+END_SRC
-
 * Package management
 ** package repositories and package manager
+Borrowed from https://github.com/nilcons/emacs-use-package-fast/ to
+load  [[https://github.com/jwiegley/use-package/][use-package]] even faster
 #+BEGIN_SRC emacs-lisp
-  (require 'package)
+  (setq package-enable-at-startup nil)
+  (setq package--init-file-ensured t)
+  (eval-and-compile
+    (setq use-package-verbose (not (bound-and-true-p byte-compile-current-file))))
+  (mapc #'(lambda (add) (add-to-list 'load-path add))
+    (eval-when-compile
+      (package-initialize)
+      (unless (package-installed-p 'use-package)
+        (package-refresh-contents)
+        (package-install 'use-package))
+      (let ((package-user-dir-real (file-truename package-user-dir)))
+        ;; The reverse is necessary, because outside we mapc
+        ;; add-to-list element-by-element, which reverses.
+        (nreverse (apply #'nconc
+                 ;; Only keep package.el provided loadpaths.
+                 (mapcar #'(lambda (path)
+                     (if (string-prefix-p package-user-dir-real path)
+                         (list path)
+                       nil))
+                     load-path))))))
+
   (setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/")
-                           ("melpa" . "https://melpa.org/packages/")
-                           ("org" . "http://orgmode.org/elpa/") ))
-#+END_SRC
-** [[https://github.com/jwiegley/use-package/][use-package]]
-#+BEGIN_SRC emacs-lisp
-  (package-initialize)
+               ("melpa" . "https://melpa.org/packages/")
+               ("org" . "http://orgmode.org/elpa/") ))
   (require 'use-package)
+  (require 'diminish)
+  (require 'bind-key)
 #+END_SRC
 ** Paradox
 #+BEGIN_SRC emacs-lisp
   (use-package paradox
     :ensure paradox
-  )
+    :commands (paradox-upgrade-packages paradox-list-packages)
+    :config (setq paradox-execute-asynchronously t)
+    )
+#+END_SRC
+* Add library paths
+
+#+BEGIN_SRC emacs-lisp
+  (add-to-list 'load-path '"~/lib/emacs_el/")
+  (add-to-list 'load-path '"~/lib/emacs_el/magit-annex")
 #+END_SRC
 * Disable custom-vars
 #+BEGIN_SRC emacs-lisp
   (add-hook 'minibuffer-exit-hook #'don/minibuffer-exit-hook)
 #+END_SRC
 * Modules
+** Hippie Expand
+#+BEGIN_SRC emacs-lisp
+  (use-package hippie-expand
+    :bind* (("M-<SPC>" . hippie-expand))
+    )
+#+END_SRC
 ** Flyspell πŸ 
 #+BEGIN_SRC emacs-lisp
   (use-package flyspell
     :ensure t
     :diminish flyspell-mode πŸ
     :config
-    (add-hook 'message-mode-hook 'turn-on-flyspell)
     (add-hook 'text-mode-hook 'turn-on-flyspell)
     (add-hook 'c-mode-common-hook 'flyspell-prog-mode)
     (add-hook 'cperl-mode-hook 'flyspell-prog-mode)
     )
 
 #+END_SRC
+** Flymake
+#+begin_src emacs-lisp :tangle yes
+  (use-package flymake
+    :diminish "Ξ¦")
+#+end_src
+
 ** Winnermode
 #+BEGIN_SRC emacs-lisp
   (winner-mode 1)
 ** Eyebrowse
 
 #+BEGIN_SRC emacs-lisp
-  ;; (use-package eyebrowse
-  ;;   :ensure t
-  ;;   :diminish eyebrowse-mode
-  ;;   :init (setq eyebrowse-keymap-prefix (kbd "C-c C-\\"))
-  ;;   :config (progn
-  ;;             (setq eyebrowse-wrap-around t)
-  ;;             (eyebrowse-mode t)
-  ;; 
-  ;;             (defun my/eyebrowse-new-window-config ()
-  ;;               (interactive)
-  ;;               (let ((done nil))
-  ;;                 (dotimes (i 10)
-  ;;                   ;; start at 1 run till 0
-  ;;                   (let ((j (mod (+ i 1) 10)))
-  ;;                     (when (and (not done)
-  ;;                                (not (eyebrowse--window-config-present-p j)))
-  ;;                       (eyebrowse-switch-to-window-config j)
-  ;;                       (call-interactively 'eyebrowse-rename-window-config2 j)
-  ;;                       (setq done t)
-  ;;                       ))
-  ;;                   )))
-  ;; 
-  ;;             ;; I don't use latex-preview-pane
-  ;;             ;; (require 'latex-preview-pane)
-  ;;             ;; (defun my/close-latex-preview-pane-before-eyebrowse-switch ()
-  ;;             ;;   ;; latex-preview-pane uses window-parameters which are
-  ;;             ;;   ;; not preserved by eyebrowse, so we close the preview
-  ;;             ;;   ;; pane before switching, it will be regenerated when we
-  ;;             ;;   ;; edit the TeX file.
-  ;;             ;;   (when (lpp/window-containing-preview)
-  ;;             ;;     (delete-window (lpp/window-containing-preview))))
-  ;; 
-  ;;             ;; (add-to-list 'eyebrowse-pre-window-switch-hook
-  ;;             ;;              #'my/close-latex-preview-pane-before-eyebrowse-switch)
-  ;; 
-  ;;             ;; (my/set-menu-key "["  #'my/eyebrowse-new-window-config)
-  ;;             ;; (my/set-menu-key ";"  #'eyebrowse-prev-window-config)
-  ;;             ;; (my/set-menu-key "'"  #'eyebrowse-next-window-config)
-  ;;             ;; (my/set-menu-key "]"  #'eyebrowse-close-window-config)
-  ;;             ;; (my/set-menu-key "\\" #'eyebrowse-rename-window-config)
-  ;;             )
-  ;;   )
+  (use-package eyebrowse
+    :ensure t
+    :diminish eyebrowse-mode
+    :init (setq eyebrowse-keymap-prefix (kbd "C-c e"))
+    :config (progn
+              (setq eyebrowse-wrap-around t)
+              (eyebrowse-mode t)
+
+              (defun my/eyebrowse-new-window-config ()
+                (interactive)
+                (let ((done nil))
+                  (dotimes (i 10)
+                    ;; start at 1 run till 0
+                    (let ((j (mod (+ i 1) 10)))
+                      (when (and (not done)
+                                 (not (eyebrowse--window-config-present-p j)))
+                        (eyebrowse-switch-to-window-config j)
+                        (call-interactively 'eyebrowse-rename-window-config2 j)
+                        (setq done t)
+                        ))
+                    )))
+
+              ;; I don't use latex-preview-pane
+              ;; (require 'latex-preview-pane)
+              ;; (defun my/close-latex-preview-pane-before-eyebrowse-switch ()
+              ;;   ;; latex-preview-pane uses window-parameters which are
+              ;;   ;; not preserved by eyebrowse, so we close the preview
+              ;;   ;; pane before switching, it will be regenerated when we
+              ;;   ;; edit the TeX file.
+              ;;   (when (lpp/window-containing-preview)
+              ;;     (delete-window (lpp/window-containing-preview))))
+
+              ;; (add-to-list 'eyebrowse-pre-window-switch-hook
+              ;;              #'my/close-latex-preview-pane-before-eyebrowse-switch)
+
+              ;; (my/set-menu-key "["  #'my/eyebrowse-new-window-config)
+              ;; (my/set-menu-key ";"  #'eyebrowse-prev-window-config)
+              ;; (my/set-menu-key "'"  #'eyebrowse-next-window-config)
+              ;; (my/set-menu-key "]"  #'eyebrowse-close-window-config)
+              ;; (my/set-menu-key "\\" #'eyebrowse-rename-window-config)
+              )
+    )
 #+END_SRC
 
 ** Window handling
@@ -308,11 +354,9 @@ value, scrolling continues until there is no more output.
 #+BEGIN_SRC emacs-lisp
   ;; load tinyprocmail
   (use-package tinyprocmail
-    :ensure f
-    :config (with-library 'tinyprocmail
-              ;; (setq tinyprocmail--procmail-version "v3.22")
-              (add-hook 'tinyprocmail--load-hook 'tinyprocmail-install))
-  )
+    :load-path "~/lib/emacs_el/tiny-tools/lisp/tiny"
+    :mode (".procmailrc" . turn-on-tinyprocmail-mode)
+    )
 #+END_SRC
 
 ** Magit
@@ -322,25 +366,17 @@ value, scrolling continues until there is no more output.
     :bind (("C-x g" . magit-status)
            ("C-x C-g" . magit-status))
     :config
-    ;; don't verify where we are pushing
-    (setq magit-push-always-verify nil)
     ;; refine diffs always (hilight words)
     (setq magit-diff-refine-hunk nil)
-    ;; load magit-annex
-    (setq load-path
-          (append '("~/lib/emacs_el/magit-annex")
-                  load-path))
-    ;; load magit-vcsh
-    (setq load-path
-          (append '("~/lib/emacs_el/magit-vcsh")
-                  load-path))
     )
   (use-package magit-annex
     :ensure t
-  )
+    :load-path "~/lib/emacs_el/magit-annex/"
+    )
   (use-package magit-vcsh
     :ensure f ; currently not in melpa, so don't try to install
-  )
+    :load-path "~/lib/emacs_el/magit-vcsh/"
+    )
 #+END_SRC
 
 ** Perl
@@ -371,17 +407,107 @@ value, scrolling continues until there is no more output.
   ))
 #+END_SRC
 
+** Markdown mode
+#+BEGIN_SRC emacs-lisp
+  (use-package markdown-mode
+    :ensure t
+    :mode (("\\.md\\'" . markdown-mode)
+           ("\\.mdwn\\'" . markdown-mode)
+           ("README\\.md\\'" . gfm-mode)
+           )
+    :config
+    (setq markdown-enable-math t)
+    (setq markdown-follow-wiki-link-on-enter nil)
+    (bind-key "M-." #'markdown-jump markdown-mode-map)
+    (add-hook 'markdown-mode-hook #'flyspell-mode)
+    (add-hook 'markdown-mode-hook #'outline-minor-mode)
+    (bind-key "C-<tab>" #'outline-cycle markdown-mode-map)
+  )
+
+#+END_SRC
+** SQL mode
+#+BEGIN_SRC emacs-lisp
+  ; load sql-indent when sql is loaded
+(use-package sql
+  :mode (("\\.sql\\'" . sql-mode))
+  :config
+  (require sql-indent))
+#+END_SRC
+** Ediff
+#+BEGIN_SRC emacs-lisp
+  (use-package ediff
+    :commands ediff ediff3
+    :ensure f
+    :config
+    ;; ediff configuration
+    ;; don't use the multi-window configuration
+    (setq ediff-window-setup-function 'ediff-setup-windows-plain)
+  )
+#+END_SRC
+** VCL --editing varnish configuration files
+#+BEGIN_SRC emacs-lisp
+  (use-package vcl-mode
+    :ensure t
+    :mode "\\.vcl\\'"
+    )
+  
+#+END_SRC
 ** Helm
 #+BEGIN_SRC emacs-lisp
+  (defun malb/helm-omni (&rest arg)
+    ;; just in case someone decides to pass an argument, helm-omni won't fail.
+    (interactive)
+    (unless helm-source-buffers-list
+      (setq helm-source-buffers-list
+            (helm-make-source "Buffers" 'helm-source-buffers)))
+    (helm-other-buffer
+     (append
+
+     (if (projectile-project-p)
+          '(helm-source-projectile-buffers-list
+            helm-source-buffers-list)
+        '(helm-source-buffers-list)) ;; list of all open buffers
+
+      `(((name . "Virtual Workspace")
+         (candidates . ,(--map (cons (eyebrowse-format-slot it) (car it))
+                               (eyebrowse--get 'window-configs)))
+         (action . (lambda (candidate)
+                     (eyebrowse-switch-to-window-config candidate)))))
+
+      (if (projectile-project-p)
+          '(helm-source-projectile-recentf-list
+            helm-source-recentf)
+        '(helm-source-recentf)) ;; all recent files
+
+      ;; always make some common files easily accessible
+      ;;'(((name . "Common Files")
+       ;;  (candidates . malb/common-file-targets)
+        ;; (action . (("Open" . (lambda (x) (find-file (eval x))))))))
+
+      '(helm-source-files-in-current-dir
+        helm-source-locate
+        helm-source-bookmarks
+        helm-source-buffer-not-found ;; ask to create a buffer otherwise
+        ))
+     "*Helm all the things*"))
   (use-package helm
-    :ensure t
+    :ensure helm
+    :diminish helm-mode
+    :bind (("M-x" . helm-M-x)
+           ("C-x C-f" . helm-find-files)
+           ("C-x b" . helm-buffers-list) ; malb/helm-omni)
+           ("C-x C-b" . helm-buffers-list) ; malb/helm-omni)
+           ("C-c <SPC>" . helm-all-mark-rings))
     :config
+    (require 'helm-config)
+    (require 'helm-for-files)
+    (require 'helm-bookmark)
+
     (helm-mode 1)
     (define-key global-map [remap find-file] 'helm-find-files)
     (define-key global-map [remap occur] 'helm-occur)
     (define-key global-map [remap list-buffers] 'helm-buffers-list)
     (define-key global-map [remap dabbrev-expand] 'helm-dabbrev)
-    (global-set-key (kbd "M-x") 'helm-M-x)
     (unless (boundp 'completion-in-region-function)
       (define-key lisp-interaction-mode-map [remap completion-at-point] 'helm-lisp-completion-at-point)
       (define-key emacs-lisp-mode-map       [remap completion-at-point] 'helm-lisp-completion-at-point))
@@ -416,48 +542,50 @@ value, scrolling continues until there is no more output.
   ;;; stolen from https://github.com/malb/emacs.d/blob/master/malb.org
   (defun malb/helm-swoop-pre-fill ()
     (thing-at-point 'symbol))
-  (setq malb/helm-swoop-ignore-major-mode '(dired-mode
-        paradox-menu-mode doc-view-mode pdf-view-mode
-        mu4e-headers-mode org-mode markdown-mode latex-mode
-        ein:notebook-multilang-mode))
+    (defvar malb/helm-swoop-ignore-major-mode "List of major modes to ignore for helm-swoop")
+    (setq malb/helm-swoop-ignore-major-mode '(dired-mode
+          paradox-menu-mode doc-view-mode pdf-view-mode
+          mu4e-headers-mode org-mode markdown-mode latex-mode
+          ein:notebook-multilang-mode))
 
-  (defun malb/swoop-or-search ()
-    (interactive)
-    (if (or (> (buffer-size) 1048576) ;; helm-swoop can be slow on big buffers
-            (memq major-mode malb/helm-swoop-ignore-major-mode))
-        (isearch-forward)
-      (helm-swoop)))
+    (defun malb/swoop-or-search ()
+      (interactive)
+      (if (or (> (buffer-size) 1048576) ;; helm-swoop can be slow on big buffers
+              (memq major-mode malb/helm-swoop-ignore-major-mode))
+          (isearch-forward)
+        (helm-swoop)))
+
+    (use-package helm-swoop
+      :ensure t
+      :commands helm-swoop
+      :bind (("C-c o" . helm-multi-swoop-org)
+             ("C-s" . malb/swoop-or-search)
+             ("C-M-s" . helm-multi-swoop-all))
+      :config (progn
+
+                (setq helm-swoop-pre-input-function  #'malb/helm-swoop-pre-fill
+                      helm-swoop-split-with-multiple-windows nil
+                      helm-swoop-split-direction #'split-window-horizontally
+                      helm-swoop-split-window-function 'helm-default-display-buffer
+                      helm-swoop-speed-or-color t)
+
+                ;; https://emacs.stackexchange.com/questions/28790/helm-swoop-how-to-make-it-behave-more-like-isearch
+                (defun malb/helm-swoop-C-s ()
+                  (interactive)
+                  (if (boundp 'helm-swoop-pattern)
+                      (if (equal helm-swoop-pattern "")
+                          (previous-history-element 1)
+                        (helm-next-line))
+                    (helm-next-line)))
+
+                (bind-key "C-S-s" #'helm-swoop-from-isearch isearch-mode-map)
+                (bind-key "C-S-s" #'helm-multi-swoop-all-from-helm-swoop helm-swoop-map)
+                (bind-key "C-r"   #'helm-previous-line helm-swoop-map)
+                (bind-key "C-s"   #'malb/helm-swoop-C-s helm-swoop-map)
+                (bind-key "C-r"   #'helm-previous-line helm-multi-swoop-map)
+                (bind-key "C-s"   #'malb/helm-swoop-C-s helm-multi-swoop-map))
+      )
 
-  (use-package helm-swoop
-    :ensure t
-    :bind (("C-c o" . helm-multi-swoop-org)
-           ("C-s" . malb/swoop-or-search)
-           ("C-M-s" . helm-multi-swoop-all))
-    :config (progn
-            
-              (setq helm-swoop-pre-input-function  #'malb/helm-swoop-pre-fill
-                    helm-swoop-split-with-multiple-windows nil
-                    helm-swoop-split-direction #'split-window-horizontally
-                    helm-swoop-split-window-function 'helm-default-display-buffer
-                    helm-swoop-speed-or-color t)
-
-              ;; https://emacs.stackexchange.com/questions/28790/helm-swoop-how-to-make-it-behave-more-like-isearch
-              (defun malb/helm-swoop-C-s ()
-                (interactive)
-                (if (boundp 'helm-swoop-pattern)
-                    (if (equal helm-swoop-pattern "")
-                        (previous-history-element 1)
-                      (helm-next-line))
-                  (helm-next-line)))
-
-              (bind-key "C-S-s" #'helm-swoop-from-isearch isearch-mode-map)
-              (bind-key "C-S-s" #'helm-multi-swoop-all-from-helm-swoop helm-swoop-map)
-              (bind-key "C-r"   #'helm-previous-line helm-swoop-map)
-              (bind-key "C-s"   #'malb/helm-swoop-C-s helm-swoop-map)
-              (bind-key "C-r"   #'helm-previous-line helm-multi-swoop-map)
-              (bind-key "C-s"   #'malb/helm-swoop-C-s helm-multi-swoop-map))
-    )
-  
 #+END_SRC
 *** Helm Ag
 #+BEGIN_SRC emacs-lisp
@@ -500,10 +628,148 @@ value, scrolling continues until there is no more output.
                    ((equal arg 16) (helm-org-rifle-occur-agenda-files))
                    (t (helm-org-agenda-files-headings)))))))
 #+END_SRC
+*** Helm Google
+This can be used to link things pretty quickly if necessary
+#+BEGIN_SRC emacs-lisp
+  (use-package helm-google
+    :ensure t
+    :bind ("C-c h g" . helm-google)
+    :config
+    (progn (add-to-list 'helm-google-actions
+                        '("Copy URL" . (lambda (candidate)
+                                         (let ((url
+                                                (replace-regexp-in-string
+                                                 "https://.*q=\\(.*\\)\&sa=.*"
+                                                 "\\1" candidate)))
+                                           (kill-new url))))
+                        t
+                        )
+         
+           (add-to-list 'helm-google-actions
+                        '("Org Store Link" . (lambda (candidate)
+                                               (let ((title (car (split-string candidate "[\n]+")))
+                                                     (url
+                                                      (replace-regexp-in-string
+                                                       "https://.*q=\\(.*\\)\&sa=.*"
+                                                       "\\1" candidate)))
+                                                 (push (list url title) org-stored-links))))
+                        t)
+           ))
+#+END_SRC
+
+** Projectile -- Project management
+#+begin_src emacs-lisp
+  (use-package projectile
+    :ensure t
+    :bind (("<f5>" . projectile-compile-project)
+           ("<f6>" . next-error))
+    :config (progn
+              (use-package magit :ensure t)
+              (require 'helm-projectile)
+              (helm-projectile-on)
+
+              (setq projectile-make-test-cmd "make check"
+                    projectile-switch-project-action 'helm-projectile
+                    projectile-mode-line  '(:eval (format "Β»{%s}" (projectile-project-name))))
 
+              (projectile-global-mode)))
+#+end_src
+
+*** helm integration
+#+begin_src emacs-lisp
+  (use-package helm-projectile
+    :ensure t
+    :config (progn
+              (defvar malb/helm-source-file-not-found
+                (helm-build-dummy-source
+                    "Create file"
+                  :action 'find-file))
+
+              (add-to-list
+               'helm-projectile-sources-list
+               malb/helm-source-file-not-found t)
+
+              (helm-delete-action-from-source
+               "Grep in projects `C-s'"
+               helm-source-projectile-projects)
+
+              (helm-add-action-to-source
+               "Grep in projects `C-s'"
+               'helm-do-ag helm-source-projectile-projects 4)))
+#+end_src
+** Zap to char
+#+BEGIN_SRC emacs-lisp
+  (use-package avy-zap
+    :ensure t
+    :bind ("M-z" . avy-zap-up-to-char-dwim))
+#+END_SRC
 ** Hydra
-#+BEGIN_SRC emacs-lisp :tangle don-configuration.el
-(require 'don-hydra)
+#+BEGIN_SRC emacs-lisp
+  (use-package hydra
+    :bind (("C-c 2" . my/hydra-orgmodes/body)
+          ("C-c @" . my/hydra-orgmodes/body)
+          ("C-c #" . my/hydra-outline/body)
+          ("C-c 3" . my/hydra-outline/body)
+          )
+    :config
+    (defhydra my/hydra-orgmodes (:color blue :hint nil)
+    "
+  _n_: notes _c_: chaim _w_: wildman _o_: ool
+  _u_: uddin _s_: steve _r_: refile  _f_: fh    
+  _p_: read papers      _R_: paper notes
+  _h_: hpcbio
+  _q_: quit
+  _z_: quit
+  "
+    ("n" (find-file "~/projects/org-notes/notes.org"))
+    ("c" (find-file "~/projects/org-notes/chaim.org"))
+    ("w" (find-file "~/projects/org-notes/wildman.org"))
+    ("u" (find-file "~/projects/org-notes/uddin.org"))
+    ("o" (find-file "~/projects/org-notes/ool.org"))
+    ("f" (find-file "~/projects/org-notes/fh.org"))
+    ("s" (find-file "~/projects/org-notes/sndservers.org"))
+    ("r" (find-file "~/projects/org-notes/refile.org"))
+    ("p" (find-file "~/projects/research/papers_to_read.org"))
+    ("R" (find-file "~/projects/research/paper_notes.org"))
+    ("h" (find-file "~/projects/org-notes/hpcbio.org"))
+    ("q" nil "quit")
+    ("z" nil "quit")
+    )
+
+    ;; from https://github.com/abo-abo/hydra/wiki/Emacs
+    (defhydra my/hydra-outline (:color pink :hint nil)
+    "
+  ^Hide^             ^Show^           ^Move
+  ^^^^^^------------------------------------------------------
+  _q_: sublevels     _a_: all         _u_: up
+  _t_: body          _e_: entry       _n_: next visible
+  _o_: other         _i_: children    _p_: previous visible
+  _c_: entry         _k_: branches    _f_: forward same level
+  _l_: leaves        _s_: subtree     _b_: backward same level
+  _d_: subtree
+
+  "
+    ;; Hide
+    ("q" outline-hide-sublevels)    ; Hide everything but the top-level headings
+    ("t" outline-hide-body)         ; Hide everything but headings (all body lines)
+    ("o" outline-hide-other)        ; Hide other branches
+    ("c" outline-hide-entry)        ; Hide this entry's body
+    ("l" outline-hide-leaves)       ; Hide body lines in this entry and sub-entries
+    ("d" outline-hide-subtree)      ; Hide everything in this entry and sub-entries
+    ;; Show
+    ("a" outline-show-all)          ; Show (expand) everything
+    ("e" outline-show-entry)        ; Show this heading's body
+    ("i" outline-show-children)     ; Show this heading's immediate child sub-headings
+    ("k" outline-show-branches)     ; Show all sub-headings under this heading
+    ("s" outline-show-subtree)      ; Show (expand) everything in this heading & below
+    ;; Move
+    ("u" outline-up-heading)                ; Up
+    ("n" outline-next-visible-heading)      ; Next
+    ("p" outline-previous-visible-heading)  ; Previous
+    ("f" outline-forward-same-level)        ; Forward - same level
+    ("b" outline-backward-same-level)       ; Backward - same level
+    ("z" nil "leave"))
+  )
 #+END_SRC
 
 ** Tramp
@@ -525,6 +791,17 @@ value, scrolling continues until there is no more output.
     (setq-default reftex-default-bibliography
                     '("~/projects/research/references.bib")))
 #+END_SRC
+** BibTex
+#+BEGIN_SRC emacs-lisp
+  (use-package bibtex
+    :config (setq bibtex-user-optional-fields
+                  (quote (("annote" "Personal annotation (ignored)")
+                          ("abstract" "")
+                  ("pmid" "")
+                  ("doi" ""))))
+    )
+
+#+END_SRC
 ** LaTeX
 #+BEGIN_SRC emacs-lisp
   (use-package tex
@@ -626,28 +903,20 @@ value, scrolling continues until there is no more output.
               ("fixme" "{"))
             )
       )
+    (setq font-latex-fontify-script nil)
+    (setq font-latex-fontify-sectioning (quote color))
+    (setq font-latex-script-display (quote (nil)))
   )
 
 #+END_SRC
-*** Org-Gcal
-#+BEGIN_SRC emacs-lisp
-  (use-package calfw
-    :ensure f
-    )
-  (use-package calfw-org
-    :ensure f
-    )
-  (use-package org-gcal
-    :ensure f
-    :config '((if (file-readable-p "~/.hide/org_gcal.el")
-                  (load-file "~/.hide/org_gcal.el"))
-              )
-    )
-#+END_SRC
 ** ESS
 #+BEGIN_SRC emacs-lisp
   (use-package ess
     :ensure t
+    :commands R
+    :mode "\\.R\\'"
+    :bind (:map ess-mode-map
+                ("C-c C-R" . dla/ess-region-remote-eval))
     :config
     (defun ess-change-directory (path)
       "Set the current working directory to PATH for both *R* and Emacs."
@@ -670,11 +939,11 @@ value, scrolling continues until there is no more output.
                 ((looking-at "^[a-zA-Z0-9_\.]+ ?<- ?function(.*{") 3)
                 (t 1000)))
         ))
-    (add-hook 'ess-mode-hook
-              '(lambda ()
-                 (local-set-key (kbd "C-c C-R")
-                                'dla/ess-region-remote-eval)))
-
+    (defun dla/ess-region-remote-eval (start end)
+      "Evaluate region in a remote ESS instance"
+      (interactive "r")
+      (shell-command-on-region start end "eval_r" (get-buffer-create "***essregionremoteeval***"))
+      kill-buffer "***essregionremoteeval***")
     ;; Don't restore history or save workspace image
     '(inferior-R-args "--no-restore-history --no-save")
     )
@@ -733,7 +1002,8 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
 ** GhostText/Atomic Chrome
 #+BEGIN_SRC emacs-lisp
   (use-package atomic-chrome
-    :config (atomic-chrome-start-server)
+    :config
+    (ignore-errors (atomic-chrome-start-server))
     (setq atomic-chrome-buffer-open-style 'full)
     )
 #+END_SRC
@@ -744,10 +1014,10 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
 [[https://github.com/magnars/multiple-cursors.el][Multiple Cursors]]
 #+BEGIN_SRC emacs-lisp
   (use-package multiple-cursors
-    :bind (("C-;" . mc/mark-all-dwim)
-           ("C-<" . mc/mark-previous-like-this)
-           ("C->" . mc/mark-next-like-this)
-           ("C-S-c C-S-c" . mc/edit-lines))
+    :bind* (("C-;" . mc/mark-all-dwim)
+            ("C-<" . mc/mark-previous-like-this)
+            ("C->" . mc/mark-next-like-this)
+            ("C-S-c C-S-c" . mc/edit-lines))
     )
 #+END_SRC
 ** Web Mode
@@ -760,21 +1030,129 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
           '(("template-toolkit" . "\\.tmpl\\'")))
     )
 #+END_SRC
+** Spamassassin Mode
+#+BEGIN_SRC emacs-lisp
+  (use-package spamassassin-mode
+    :defer
+    :ensure f
+    )
+#+END_SRC
+** Password Store
+#+BEGIN_SRC emacs-lisp
+  (use-package password-store
+    :ensure f
+    :commands password-store-edit password-store-create
+    )
+#+END_SRC
+** CSS mode
+#+BEGIN_SRC emacs-lisp
+  (use-package css
+    :mode "\\.css'"
+    :config
+    ;; fix up css mode to not be silly
+    ;; from http://www.stokebloke.com/wordpress/2008/03/21/css-mode-indent-buffer-fix/
+    (setq cssm-indent-level 4)
+    (setq cssm-newline-before-closing-bracket t)
+    (setq cssm-indent-function #'cssm-c-style-indenter)
+    (setq cssm-mirror-mode nil))
+#+END_SRC
+** Abbrev Mode
+#+BEGIN_SRC emacs-lisp
+  (use-package abbrev
+    :diminish abbrev
+    :config
+    ;; load abbreviations from 
+    (setq abbrev-file-name       
+          "~/.emacs_abbrev_def")
+
+    ;; read the abbrev file if it exists
+    (if (file-exists-p abbrev-file-name)
+        (quietly-read-abbrev-file))
+
+    ;; for now, use abbrev mode everywhere
+    (setq default-abbrev-mode t))
+#+END_SRC
+
+* Email
+** Mutt
+*** Message-mode
+#+BEGIN_SRC emacs-lisp
+  (use-package message
+    :ensure f
+    :diminish (message "βœ‰")
+    :mode ("muttng-[a-z0-9]+-[0-9]+-" . message-mode)
+    :mode ("mutt-[a-z0-9]+-[0-9]+-" . message-mode)
+    :hook 'my/message-mode-settings
+    :hook 'turn-on-flyspell
+    :bind (:map message-mode-map
+        ("C-c C-a" . my/post-attach-file))
+    :delight (message-mode "βœ‰")
+    :config
+    (defun my/message-mode-settings ()
+      (font-lock-add-keywords nil
+                  '(("^[ \t]*>[ \t]*>[ \t]*>.*$"
+                 (0 'message-multiply-quoted-text-face))
+                ("^[ \t]*>[ \t]*>.*$"
+                 (0 'message-double-quoted-text-face))))
+      )
+
+    (defun my/post-attach-file ()
+      "Prompt for an attachment."
+      (interactive)
+      (let ((file (read-file-name "Attach file: " nil nil t nil)))
+        (my/header-attach-file file "")))
+
+    (defun my/header-attach-file (file description)
+      "Attach a FILE to the current message (works with Mutt).
+    Argument DESCRIPTION MIME description."
+      (interactive "fAttach file: \nsDescription: ")
+      (when (> (length file) 0)
+    (save-excursion
+      (save-match-data
+        (save-restriction
+          (widen)
+          (goto-char (point-min))
+          (search-forward-regexp "^$")
+          (insert (concat "Attach: " (replace-regexp-in-string "\\([[:space:]\\]\\)" "\\\\\\1" (file-truename file)) " "
+                  description "\n"))
+          (message (concat "Attached '" file "'."))
+          (setq post-has-attachment t))))))
+
+    (setq mail-yank-prefix "> ")
+  )
+#+END_SRC
+*** Muttrc mode
+#+BEGIN_SRC emacs-lisp
+  (use-package muttrc-mode
+    :mode "muttngrc"
+    :mode "muttrc"
+  )
+
+#+END_SRC
+* Base emacs
+** Reverting buffers
+#+BEGIN_SRC emacs-lisp
+  (setq global-auto-revert-non-file-buffers t
+        global-auto-revert-ignore-modes '(pdf-view-mode)
+        auto-revert-verbose nil)
+  (global-auto-revert-mode 1)
+#+END_SRC
 * Org Mode
 ** Use-package and load things
 #+BEGIN_SRC emacs-lisp
 
   (use-package org
+    :delight (org-mode "ΓΈ")
     :config 
 
 #+END_SRC
 ** Agenda Configuration
 #+BEGIN_SRC emacs-lisp
-  ;; The following lines are always needed. Choose your own keys.
-  (add-to-list 'auto-mode-alist '("\\.\\(org\\|org_archive\\|txt\\)$" . org-mode))
-  (global-set-key "\C-cl" 'org-store-link)
-  (global-set-key "\C-ca" 'org-agenda)
-  (global-set-key "\C-cb" 'org-iswitchb)
+  :mode ("\\.\\(org\\|org_archive\\|txt\\)\\'" . org-mode)
+  :bind (("C-c l"  . org-store-link)
+         ("C-c a"  . org-agenda)
+         ("C-c b"  . org-iswitchb))
+  :config
   (setq-default org-log-done 'time)
   (setq-default org-agenda-ndays 5)
 
@@ -871,7 +1249,6 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
             "~/projects/org-notes/wildman.org"
             "~/projects/org-notes/uddin.org"
             "~/projects/org-notes/reviews.org"
-            "~/projects/org-notes/hpcbio.org"
             "~/org-mode/from-mobile.org"
             "~/projects/org-notes/fh.org")))
 
@@ -890,17 +1267,11 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
     (with-temp-buffer
       (dolist (org-agenda-file org-agenda-files)
         (insert-file-contents org-agenda-file nil)
-        (end-of-buffer)
+        (goto-char (point-max))
         (newline))
       (write-file "/tmp/timeline.org")
       (org-agenda arg "L")))
   (define-key org-mode-map (kbd "C-c t") 'org-agenda-timeline-all)
-  ;; add automatic reminders for appointments
-  (defadvice  org-agenda-redo (after org-agenda-redo-add-appts)
-    "Pressing `r' on the agenda will also add appointments."
-    (progn 
-      (setq appt-time-msg-list nil)
-      (org-agenda-to-appt)))
 
 #+END_SRC
 ** General config
@@ -967,7 +1338,7 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
   ; org mode configuration from http://doc.norang.ca/org-mode.html
   ;; Custom Key Bindings
   (global-set-key (kbd "<f12>") 'org-agenda)
-  (global-set-key (kbd "<f5>") 'bh/org-todo)
+  (global-set-key (kbd "<f5>") 'bh/org-todo)
   (global-set-key (kbd "<S-f5>") 'bh/widen)
   (global-set-key (kbd "<f7>") 'bh/set-truncate-lines)
   (global-set-key (kbd "<f8>") 'org-cycle-agenda-files)
@@ -1673,62 +2044,96 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
             (unless (bolp) (insert "\n"))))))))))))
 
 #+END_SRC
-** End use-package
+** Org-Gcal
 #+BEGIN_SRC emacs-lisp
-  )
+  (use-package calfw
+    :ensure f
+    )
+  (use-package calfw-org
+    :ensure f
+    )
+  (use-package org-gcal
+    :ensure f
+    :config '((if (file-readable-p "~/.hide/org_gcal.el")
+                  (load-file "~/.hide/org_gcal.el"))
+              )
+    )
 #+END_SRC
-* Keybindings
-** Override other things
+** appt integration
 #+BEGIN_SRC emacs-lisp
-  ; apparently things like to step on C-;, so we'll use a hack from
-  ; http://stackoverflow.com/questions/683425/globally-override-key-binding-in-emacs/5340797#5340797 to fix this
-
-  (defvar my-keys-minor-mode-map (make-keymap) "my-keys-minor-mode keymap.")
-
-  ; use mc everywhere
-  (define-key my-keys-minor-mode-map (kbd "C-;") 'mc/mark-all-dwim)
-  ;; use outline mode keybindings everywhere
-  ;; (define-key my-keys-minor-mode-map (kbd "C-;") 'my/mydra-outline/body)
-
-  (define-minor-mode my-keys-minor-mode
-    "A minor mode so that my key settings override annoying major modes."
-    t " my-keys" 'my-keys-minor-mode-map)
+  (use-package appt
+    :ensure f
+    :config
+    ;; Show notification 10 minutes before event
+    (setq appt-message-warning-time 10)
+    ;; Disable multiple reminders
+    (setq appt-display-interval appt-message-warning-time)
+    (setq appt-display-mode-line nil)
+
+    ;; add automatic reminders for appointments
+    (defun my/org-agenda-to-appt ()
+      (interactive)
+      (setq appt-time-msg-list nil)
+      (org-agenda-to-appt))
+    ;; add reminders when starting emacs
+    (my/org-agenda-to-appt)
+    ;; when rebuilding the agenda
+    (defadvice  org-agenda-redo (after org-agenda-redo-add-appts)
+      "Pressing `r' on the agenda will also add appointments."
+      (my/org-agenda-to-appt)
+      )
+    ;; when saving all org buffers
+    (defadvice org-save-all-org-buffers (after org-save-all-org-buffers-add-appts)
+      "Re-add appts after saving all org buffers"
+      (my/org-agenda-to-appt))
+    ;; Display appointments as a window manager notification
+    (setq appt-disp-window-function 'my/appt-display)
+    (setq appt-delete-window-function (lambda () t))
+
+    (setq my/appt-notification-app (concat (getenv "HOME") "/bin/appt_notification"))
+
+    (defun my/appt-display (min-to-app new-time msg)
+      (if (atom min-to-app)
+      (start-process "my/appt-notification-app" nil my/appt-notification-app min-to-app msg)
+    (dolist (i (number-sequence 0 (1- (length min-to-app))))
+      (start-process "my/appt-notification-app" nil my/appt-notification-app
+                    (nth i min-to-app) (nth i msg))))
+      )
+    )
 
-  (my-keys-minor-mode 1)
-  (defun my-minibuffer-setup-hook ()
-    (my-keys-minor-mode 0))
 
-  (add-hook 'minibuffer-setup-hook 'my-minibuffer-setup-hook)
-  (defadvice load (after give-my-keybindings-priority)
-    "Try to ensure that my keybindings always have priority."
-    (if (not (eq (car (car minor-mode-map-alist)) 'my-keys-minor-mode))
-        (let ((mykeys (assq 'my-keys-minor-mode minor-mode-map-alist)))
-          (assq-delete-all 'my-keys-minor-mode minor-mode-map-alist)
-          (add-to-list 'minor-mode-map-alist mykeys))))
-  (ad-activate 'load)
 #+END_SRC
+** End use-package
+#+BEGIN_SRC emacs-lisp
+  )
+#+END_SRC
+* Keybindings
 ** Goto line
 #+BEGIN_SRC emacs-lisp
   (global-unset-key "\M-g")
   (global-set-key (kbd "M-g l") 'goto-line)
 #+END_SRC
+* Debian
+** debian-changelog
+#+BEGIN_SRC emacs-lisp
+  (use-package debian-changelog
+    :ensure f
+    :mode "debian/changelog"
+    :config
+    (setq debian-changelog-mailing-address "don@debian.org")
+    (setq debian-changelog-full-name "Don Armstrong"))
+#+END_SRC
 * Misc (uncharacterized)
 #+BEGIN_SRC emacs-lisp
-  (setq bibtex-user-optional-fields (quote (("annote" "Personal annotation (ignored)") ("abstract" "") ("pmid" "") ("doi" ""))))
-  (setq calendar-latitude 40.11)
-  (setq calendar-longitude -88.24)
+  (setq calendar-latitude 38.6)
+  (setq calendar-longitude -121.5)
   (setq case-fold-search t)
   (setq confirm-kill-emacs (quote y-or-n-p))
   (setq cperl-lazy-help-time nil)
-  (setq debian-changelog-mailing-address "don@debian.org")
   (display-time)
   (setq display-time-24hr-format t)
   (setq display-time-day-and-date t)
   (display-time-mode 1)
-  (setq font-latex-fontify-script nil)
-  (setq font-latex-fontify-sectioning (quote color))
-  (setq font-latex-script-display (quote (nil)))
-  (global-auto-revert-mode 1)
   (global-font-lock-mode 1)
   (icomplete-mode 1)
   (setq log-edit-keep-buffer t)
@@ -1736,10 +2141,6 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
   (setq markdown-enable-math t)
   (setq markdown-follow-wiki-link-on-enter nil)
   (setq mutt-alias-file-list (quote ("~/.mutt/aliases" "~/.mail_aliases")))
-  (setq post-email-address "don@donarmstrong.com")
-  (setq post-kill-quoted-sig nil)
-  (setq post-mail-message "mutt\\(ng\\|\\)-[a-z0-9]+-[0-9]+-.*")
-  (setq post-uses-fill-mode nil)
   (setq ps-footer-font-size (quote (8 . 10)))
   (setq ps-header-font-size (quote (8 . 10)))
   (setq ps-header-title-font-size (quote (10 . 10)))
@@ -1769,91 +2170,9 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
   (fset 'perl-mode 'cperl-mode)
   ;;(load-file "cperl-mode.el")
 
-  (require 'vcl-mode)
-
-  (require 'tex-site)
-  ;;(require 'psvn)
-  ;;(require 'ecasound)
-  ;;(require 'emacs-wiki)
-  (require 'bibtex)
-  (require 'post)
-  ;;(require 'fixme)
-  ; (require 'google-weather)
-  ; (require 'org-google-weather)
-  ; (setq-default org-google-weather-format "%i %c, [%l,%h] %s %C")
-  
-  (global-set-key "\C-xp" 'server-edit)
-
-  (setq-default auto-mode-alist (cons '("\.wml$" . 
-                    (lambda () (html-mode) (auto-fill-mode)))
-                  auto-mode-alist))
-
-
-  ; use markdown mode for mdwn files
-  (add-to-list 'auto-mode-alist '("\\.mdwn$" . markdown-mode))
-  (add-to-list 'auto-mode-alist '("\\.md$" . markdown-mode))
-
-
   ;; tramp configuration
   (setq tramp-use-ssh-controlmaster-options nil)
 
-  ; mail configuration
-  (add-to-list 'auto-mode-alist '("muttng-[a-z0-9]+-[0-9]+-" . message-mode))
-  (add-to-list 'auto-mode-alist '("muttngrc" . muttrc-mode))
-
-  (add-to-list 'auto-mode-alist '("mutt-[a-z0-9]+-[0-9]+-" . message-mode))
-  (add-to-list 'auto-mode-alist '("muttrc" . muttrc-mode))
-  (defun my-message-mode-settings ()
-    (font-lock-add-keywords nil
-                            '(("^[ \t]*>[ \t]*>[ \t]*>.*$"
-                               (0 'message-multiply-quoted-text-face))
-                              ("^[ \t]*>[ \t]*>.*$"
-                               (0 'message-double-quoted-text-face))))
-    (local-set-key (kbd "C-c C-a") 'my-post-attach-file)
-    )
-  (add-hook 'message-mode-hook 'my-message-mode-settings)
-
-  (defun my-post-attach-file ()
-    "Prompt for an attachment."
-    (interactive)
-    (let ((file (read-file-name "Attach file: " nil nil t nil))
-          (description (string-read "Description: ")))
-      (my-header-attach-file file description)))
-
-  (symbol-function 'my-post-attach-file)
-
-  (defun my-header-attach-file (file description)
-    "Attach a FILE to the current message (works with Mutt).
-  Argument DESCRIPTION MIME description."
-    (interactive "fAttach file: \nsDescription: ")
-    (when (> (length file) 0)
-      (save-excursion
-        (save-match-data
-          (save-restriction
-            (widen)
-            (goto-char (point-min))
-            (search-forward-regexp "^$")
-            (insert (concat "Attach: " (replace-regexp-in-string "\\([[:space:]\\]\\)" "\\\\\\1" (file-truename file)) " "
-                            description "\n"))
-            (message (concat "Attached '" file "'."))
-            (setq post-has-attachment t))))))
-
-
-
-  (setq mail-yank-prefix "> ")
-
-  ;; self-insert-command hack.
-  ;;   Without this, "if<SP>" expands to
-  ;;   if ( -!-) {
-  ;;   }
-  ;;   which really should be,
-  ;;   if (-!-) {
-  ;;   }
-
-
-
-  ;(load-library "php-mode")
-
   (setq-default c-indent-level 4)
   (setq-default c-brace-imaginary-offset 0)
   (setq-default c-brace-offset -4)
@@ -1886,59 +2205,8 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
     )
 
   (column-number-mode t)
-
-  (server-start)
-
-  ; (require 'mode-compile)
-
-  (defadvice server-process-filter (after post-mode-message first activate)
-    "If the buffer is in post mode, overwrite the server-edit
-      message with a post-save-current-buffer-and-exit message."
-    (if (eq major-mode 'post-mode)
-        (message
-         (substitute-command-keys "Type \\[describe-mode] for help composing; \\[post-save-current-buffer-and-exit] when done."))))
-                      ; This is also needed to see the magic message.  Set to a higher
-                      ; number if you have a faster computer or read slower than me.
-  '(font-lock-verbose 1000)
-  ;(setq-default server-temp-file-regexp "mutt\(-\|ng-\)")
-  ; (add-hook 'server-switch-hook 
-  ;     (function (lambda()
-  ;             (cond ((string-match "Post" mode-name)
-  ;                (post-goto-body)))
-  ;             set-buffer-file-coding-system 'utf-8
-  ;             )))
-  ; 
-
-  (add-hook 'post-mode-hook
-        (auto-fill-mode nil)
-        )
-  ; abbrev mode settings
-  ; load abbreviations from 
-  (setq abbrev-file-name       
-        "~/.emacs_abbrev_def")
-
-  ; read the abbrev file if it exists
-  (if (file-exists-p abbrev-file-name)
-      (quietly-read-abbrev-file))
-
-  ; for now, use abbrev mode everywhere
-  (setq default-abbrev-mode t)
-
-
-  (defun insert-function-documentation ()
-    "Insert function documentation"
-    (interactive)
-    (insert-file-contents "/home/don/lib/templates/perl_function_documentation" nil))
-  (global-set-key "\M-f" 'insert-function-documentation)
-
-  (eval-after-load "lilypond-mode" 
-    '(progn
-       (load-library "lyqi-mode")
-       (define-key LilyPond-mode-map "\C-cq" 'lyqi-mode)))
-
-  (autoload 'spamassassin-mode "spamassassin-mode" nil t)
-
-  (desktop-load-default)
+  (desktop-save-mode)
   (desktop-read)
   '(icomplete-mode on)
   (custom-set-faces
@@ -1962,18 +2230,18 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
    ; Outline-minor-mode key map
    (define-prefix-command 'cm-map nil "Outline-")
    ; HIDE
-   (define-key cm-map "q" 'hide-sublevels)    ; Hide everything but the top-level headings
-   (define-key cm-map "t" 'hide-body)         ; Hide everything but headings (all body lines)
-   (define-key cm-map "o" 'hide-other)        ; Hide other branches
-   (define-key cm-map "c" 'hide-entry)        ; Hide this entry's body
-   (define-key cm-map "l" 'hide-leaves)       ; Hide body lines in this entry and sub-entries
-   (define-key cm-map "d" 'hide-subtree)      ; Hide everything in this entry and sub-entries
+   (define-key cm-map "q" 'outline-hide-sublevels)    ; Hide everything but the top-level headings
+   (define-key cm-map "t" 'outline-hide-body)         ; Hide everything but headings (all body lines)
+   (define-key cm-map "o" 'outline-hide-other)        ; Hide other branches
+   (define-key cm-map "c" 'outline-hide-entry)        ; Hide this entry's body
+   (define-key cm-map "l" 'outline-hide-leaves)       ; Hide body lines in this entry and sub-entries
+   (define-key cm-map "d" 'outline-hide-subtree)      ; Hide everything in this entry and sub-entries
    ; SHOW
-   (define-key cm-map "a" 'show-all)          ; Show (expand) everything
-   (define-key cm-map "e" 'show-entry)        ; Show this heading's body
-   (define-key cm-map "i" 'show-children)     ; Show this heading's immediate child sub-headings
-   (define-key cm-map "k" 'show-branches)     ; Show all sub-headings under this heading
-   (define-key cm-map "s" 'show-subtree)      ; Show (expand) everything in this heading & below
+   (define-key cm-map "a" 'outline-show-all)          ; Show (expand) everything
+   (define-key cm-map "e" 'outline-show-entry)        ; Show this heading's body
+   (define-key cm-map "i" 'outline-show-children)     ; Show this heading's immediate child sub-headings
+   (define-key cm-map "k" 'outline-show-branches)     ; Show all sub-headings under this heading
+   (define-key cm-map "s" 'outline-show-subtree)      ; Show (expand) everything in this heading & below
    ; MOVE
    (define-key cm-map "u" 'outline-up-heading)                ; Up
    (define-key cm-map "n" 'outline-next-visible-heading)      ; Next
@@ -1981,51 +2249,6 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
    (define-key cm-map "f" 'outline-forward-same-level)        ; Forward - same level
    (define-key cm-map "b" 'outline-backward-same-level)       ; Backward - same level
    (global-set-key "\M-o" cm-map)
-
-
-  ; debian stuff
-  (setq-default debian-changelog-mailing-address "don@debian.org")
-  (setq-default debian-changelog-full-name "Don Armstrong")
-
-  ; ediff configuration
-  ; don't use the multi-window configuration
-  (setq ediff-window-setup-function 'ediff-setup-windows-plain)
-
-  ; fix up css mode to not be silly
-  ; from http://www.stokebloke.com/wordpress/2008/03/21/css-mode-indent-buffer-fix/
-  (setq cssm-indent-level 4)
-  (setq cssm-newline-before-closing-bracket t)
-  (setq cssm-indent-function #'cssm-c-style-indenter)
-  (setq cssm-mirror-mode nil)
-
-  (require 'multi-web-mode)
-  (setq mweb-default-major-mode 'html-mode)
-  (setq mweb-tags '((php-mode "<\\?php\\|<\\? \\|<\\?=" "\\?>")
-                    (js-mode "<script +\\(type=\"text/javascript\"\\|language=\"javascript\"\\)[^>]*>" "</script>")
-                    (css-mode "<style +type=\"text/css\"[^>]*>" "</style>")))
-  (setq mweb-filename-extensions '("php" "htm" "html" "ctp" "phtml" "php4" "php5"))
-  (multi-web-global-mode 1)
-
-  ;;; alias the new `flymake-report-status-slim' to
-  ;;; `flymake-report-status'
-  (defalias 'flymake-report-status 'flymake-report-status-slim)
-  (defun flymake-report-status-slim (e-w &optional status)
-    "Show \"slim\" flymake status in mode line."
-    (when e-w
-      (setq flymake-mode-line-e-w e-w))
-    (when status
-      (setq flymake-mode-line-status status))
-    (let* ((mode-line " Ξ¦"))
-      (when (> (length flymake-mode-line-e-w) 0)
-        (setq mode-line (concat mode-line ":" flymake-mode-line-e-w)))
-      (setq mode-line (concat mode-line flymake-mode-line-status))
-      (setq flymake-mode-line mode-line)
-      (force-mode-line-update)))
-
-  ; load sql-indent when sql is loaded
-  (eval-after-load "sql"
-    '(load-library "sql-indent"))
-
   ; fix up tmux xterm keys
   ; stolen from http://unix.stackexchange.com/questions/24414/shift-arrow-not-working-in-emacs-within-tmux
   (defun fix-up-tmux-keys ()
@@ -2121,11 +2344,6 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
       )
   ; (add-hook 'tty-setup-hook 'fix-up-tmux-keys)
 
-  ; procmailmode configuration
-  (load "procmail_mode")
-
-  (load "mode-line-cleaner")
-
   (defadvice ask-user-about-supersession-threat (around ask-user-about-supersession-threat-if-necessary)
     "Call ask-user-about-supersession-threat only if the buffer is actually obsolete."
     (if (or (buffer-modified-p)
@@ -2136,34 +2354,15 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
       (clear-visited-file-modtime)
       (not-modified)))
   (ad-activate 'ask-user-about-supersession-threat)
+#+END_SRC
 
-  ; apparently things like to step on C-;, so we'll use a hack from
-  ; http://stackoverflow.com/questions/683425/globally-override-key-binding-in-emacs/5340797#5340797 to fix this
-
-  (defvar my-keys-minor-mode-map (make-keymap) "my-keys-minor-mode keymap.")
-
-  ; use iedit everywhere
-  (define-key my-keys-minor-mode-map (kbd "C-;") 'mc/mark-all-dwim)
-
-  (define-minor-mode my-keys-minor-mode
-    "A minor mode so that my key settings override annoying major modes."
-    t " my-keys" 'my-keys-minor-mode-map)
-
-  (my-keys-minor-mode 1)
-  (defun my-minibuffer-setup-hook ()
-    (my-keys-minor-mode 0))
+* Server
+#+BEGIN_SRC emacs-lisp
+  (unless (server-running-p)
+  (server-start))
+#+END_SRC
 
-  (add-hook 'minibuffer-setup-hook 'my-minibuffer-setup-hook)
-  (defadvice load (after give-my-keybindings-priority)
-    "Try to ensure that my keybindings always have priority."
-    (if (not (eq (car (car minor-mode-map-alist)) 'my-keys-minor-mode))
-        (let ((mykeys (assq 'my-keys-minor-mode minor-mode-map-alist)))
-          (assq-delete-all 'my-keys-minor-mode minor-mode-map-alist)
-          (add-to-list 'minor-mode-map-alist mykeys))))
-  (ad-activate 'load)
-  (global-set-key "\M- " 'hippie-expand)
 
-#+END_SRC
 
 * END
 #+BEGIN_SRC emacs-lisp