]> git.donarmstrong.com Git - lib.git/blobdiff - emacs_el/configuration/don-configuration.org
add beancount
[lib.git] / emacs_el / configuration / don-configuration.org
index e432840f43802492526da32f0f2a629649b0b77f..baae5d8763b00c0eee415d3b049959e8697d40ea 100644 (file)
 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
-  (setq package-enable-at-startup nil)
-  (setq package--init-file-ensured t)
   (eval-and-compile
+    ;; add /etc/ssl/ca-global/ca-certificates.crt so that we can
+    ;; download packages when we're on Debian hosts which chop down the
+    ;; list of available certificates
+    (require 'gnutls)
+    (add-to-list 'gnutls-trustfiles "/etc/ssl/ca-global/ca-certificates.crt")
+    (setq package-enable-at-startup nil)
+    (setq package--init-file-ensured t)
+    (setq package-user-dir "~/var/emacs/elpa")
+    (setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/")
+                             ("melpa" . "https://melpa.org/packages/")
+                             ("org" . "http://orgmode.org/elpa/")))
     (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
@@ -49,12 +58,21 @@ load  [[https://github.com/jwiegley/use-package/][use-package]] even faster
                        nil))
                      load-path))))))
 
-  (setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/")
-               ("melpa" . "https://melpa.org/packages/")
-               ("org" . "http://orgmode.org/elpa/") ))
-  (require 'use-package)
-  (require 'diminish)
+  ;;; fix up info paths for packages
+  (with-eval-after-load "info"
+    (info-initialize)
+    (dolist (dir (directory-files package-user-dir))
+      (let ((fdir (concat (file-name-as-directory package-user-dir) dir)))
+        (unless (or (member dir '("." ".." "archives" "gnupg"))
+                    (not (file-directory-p fdir))
+                    (not (file-exists-p (concat (file-name-as-directory fdir) "dir"))))
+          (add-to-list 'Info-directory-list fdir)))))
+
+
+  (eval-when-compile
+    (require 'use-package))
   (require 'bind-key)
+  (require 'diminish)
 #+END_SRC
 ** Paradox
 #+BEGIN_SRC emacs-lisp
@@ -89,13 +107,14 @@ load  [[https://github.com/jwiegley/use-package/][use-package]] even faster
 * Variables
 ** Safe Local Variables
 #+BEGIN_SRC emacs-lisp
-  (setq safe-local-variable-values 
-        (quote ((auto-save-default)
-                (make-backup-files)
-                (cperl-indent-level . 4)
-                (indent-level . 4)
-                (indent-tabs-mode . f)
-                )))
+(setq safe-local-variable-values
+      (quote ((auto-save-default)
+              (make-backup-files)
+              (cperl-indent-level . 4)
+              (indent-level . 4)
+              (indent-tabs-mode . f)
+              (vcl-indent-level . 4)
+              )))
 #+END_SRC
 * Memory
 #+BEGIN_SRC emacs-lisp
@@ -113,9 +132,17 @@ load  [[https://github.com/jwiegley/use-package/][use-package]] even faster
   (add-hook 'minibuffer-exit-hook #'don/minibuffer-exit-hook)
 #+END_SRC
 * Modules
+** Spacemacs theme
+#+BEGIN_SRC emacs-lisp
+(use-package spacemacs-common
+  :ensure spacemacs-theme
+  :config
+  (load-theme 'spacemacs-dark t)
+  )
+#+END_SRC
 ** Hippie Expand
 #+BEGIN_SRC emacs-lisp
-  (use-package hippie-expand
+  (use-package hippie-exp
     :bind* (("M-<SPC>" . hippie-expand))
     )
 #+END_SRC
@@ -291,6 +318,7 @@ value, scrolling continues until there is no more output.
 *** Avy
 #+BEGIN_SRC emacs-lisp
   (use-package avy
+    :if (>= emacs-major-version 25)
     :ensure t
     :bind (("C-c C-<SPC>" . avy-goto-word-or-subword-1)
            ("C-c j j" . avy-goto-word-or-subword-1)
@@ -338,17 +366,235 @@ value, scrolling continues until there is no more output.
                                        "~/lib/emacs_el/yasnippet-snippets/snippets/"))
               (add-to-list 'hippie-expand-try-functions-list
                                'yas-hippie-try-expand)
+              (yas-reload-all)
               )
     )
 #+END_SRC
 *** Auto-YASnippet
 #+BEGIN_SRC emacs-lisp
   (use-package auto-yasnippet
+    :ensure t
     :bind (("H-w" . aya-create)
            ("H-y" . aya-expand)
            )
     )
 #+END_SRC
+** Company
+#+BEGIN_SRC emacs-lisp
+(use-package company
+  :ensure t
+  :bind (("M-/" . company-complete))
+  :config
+  (setq company-echo-delay 0     ; remove blinking
+        company-show-numbers t   ; show numbers for easy selection
+        company-selection-wrap-around t
+        company-require-match nil
+        company-dabbrev-ignore-case t
+        company-dabbrev-ignore-invisible t
+        company-dabbrev-other-buffers t
+        company-dabbrev-downcase nil
+        company-dabbrev-code-everywhere t
+        company-tooltip-align-annotations t
+        company-minimum-prefix-length 1
+        company-global-modes '(not)
+        company-lighter-base "(C)")
+  (global-company-mode 1)
+  :bind (:map company-active-map
+              ("C-n" . company-select-next)
+              ("C-p" . company-select-previous)
+              ("M-?" . company-show-doc-buffer)
+              ("M-." . company-show-location)
+              )
+  )
+#+END_SRC
+*** C/C++
+#+BEGIN_SRC emacs-lisp
+  (use-package company-c-headers
+    :ensure t
+    :config (progn
+              (defun malb/ede-object-system-include-path ()
+                "Return the system include path for the current buffer."
+                (when ede-object
+                  (ede-system-include-path ede-object)))
+
+              (setq company-c-headers-path-system
+                    #'malb/ede-object-system-include-path)
+
+              (add-to-list 'company-backends #'company-c-headers)))
+#+END_SRC
+*** Python
+#+BEGIN_SRC emacs-lisp
+(use-package company-anaconda
+  :ensure t
+  :config (add-to-list 'company-backends #'company-anaconda))
+#+END_SRC
+*** Perl
+#+BEGIN_SRC emacs-lisp
+  (use-package company-plsense
+    :ensure t
+    )
+#+END_SRC
+*** LaTeX
+#+BEGIN_SRC emacs-lisp
+  (use-package company-math
+    :ensure t)
+#+END_SRC
+#+BEGIN_SRC emacs-lisp
+  (use-package company-auctex
+    :ensure t
+    :config (progn
+              (defun company-auctex-labels (command &optional arg &rest ignored)
+                "company-auctex-labels backend"
+                (interactive (list 'interactive))
+                (case command
+                  (interactive (company-begin-backend 'company-auctex-labels))
+                  (prefix (company-auctex-prefix "\\\\.*ref{\\([^}]*\\)\\="))
+                  (candidates (company-auctex-label-candidates arg))))
+
+              (add-to-list 'company-backends
+                           '(company-auctex-macros
+                             company-auctex-environments
+                             company-math-symbols-unicode
+                             company-math-symbols-latex))
+
+              (add-to-list 'company-backends #'company-auctex-labels)
+              (add-to-list 'company-backends #'company-auctex-bibs)
+              )
+    )
+#+END_SRC
+#+BEGIN_SRC emacs-lisp
+  (use-package company-bibtex
+    :ensure t
+    )
+#+END_SRC
+*** Shell
+
+ #+BEGIN_SRC emacs-lisp
+   (use-package company-shell
+     :ensure t
+     :config (progn
+               (setq company-shell-modes '(sh-mode shell-mode))
+               (add-to-list 'company-backends 'company-shell)))
+ #+END_SRC
+
+*** YaSnippet
+
+ Add YasSippet support for all company backends. ([[https://github.com/syl20bnr/spacemacs/pull/179][source]])
+
+ *Note:* Do this at the end of =company-mode= config.
+
+ #+BEGIN_SRC emacs-lisp
+   (defvar malb/company-mode/enable-yas t
+     "Enable yasnippet for all backends.")
+
+   (defun malb/company-mode/backend-with-yas (backend)
+     (if (or (not malb/company-mode/enable-yas)
+             (and (listp backend)
+                  (member 'company-yasnippet backend)))
+         backend
+       (append (if (consp backend) backend (list backend))
+               '(:with company-yasnippet))))
+
+   (setq company-backends
+         (mapcar #'malb/company-mode/backend-with-yas company-backends))
+ #+END_SRC
+
+*** All the words
+
+ Enable/disable company completion from ispell dictionaries ([[https://github.com/redguardtoo/emacs.d/blob/master/lisp/init-company.el][source]])
+
+ #+BEGIN_SRC emacs-lisp
+   (defun malb/toggle-company-ispell ()
+     (interactive)
+     (cond
+      ((member '(company-ispell :with company-yasnippet) company-backends)
+       (setq company-backends (delete '(company-ispell :with company-yasnippet) company-backends))
+       (add-to-list 'company-backends '(company-dabbrev :with company-yasnippet) t)
+       (message "company-ispell disabled"))
+      (t
+       (setq company-backends (delete '(company-dabbrev :with company-yasnippet) company-backends))
+       (add-to-list 'company-backends '(company-ispell :with company-yasnippet) t)
+       (message "company-ispell enabled!"))))
+
+   (defun malb/company-ispell-setup ()
+     ;; @see https://github.com/company-mode/company-mode/issues/50
+     (when (boundp 'company-backends)
+       (make-local-variable 'company-backends)
+       (setq company-backends (delete '(company-dabbrev :with company-yasnippet) company-backends))
+       (add-to-list 'company-backends '(company-ispell :with company-yasnippet) t)
+       ;; https://github.com/redguardtoo/emacs.d/issues/473
+       (if (and (boundp 'ispell-alternate-dictionary)
+                ispell-alternate-dictionary)
+           (setq company-ispell-dictionary ispell-alternate-dictionary))))
+ #+END_SRC
+
+*** Tab DWIM
+
+ 1. =yas-expand= is run first and does what it has to, then it calls =malb/indent-fold-or-complete=.
+
+ 2. This function then hopefully does what I want:
+
+    a. if a region is active, just indent
+    b. if we’re looking at a space after a non-whitespace character, we try some company-expansion
+    c. If =hs-minor-mode= or =outline-minor-mode= is active, try those next
+    d. otherwise call whatever would have been called otherwise.
+
+ ([[http://emacs.stackexchange.com/q/21182/8930][source]], [[http://emacs.stackexchange.com/q/7908/8930][source]])
+
+#+BEGIN_SRC emacs-lisp
+  (defun malb/indent-fold-or-complete (&optional arg)
+    (interactive "P")
+    (cond
+     ;; if a region is active, indent
+     ((use-region-p)
+      (indent-region (region-beginning)
+                     (region-end)))
+     ;; if the next char is space or eol, but prev char not whitespace
+     ((and (not (active-minibuffer-window))
+           (or (looking-at " ")
+               (looking-at "$"))
+           (looking-back "[^[:space:]]")
+           (not (looking-back "^")))
+
+      (cond (company-mode (company-complete-common))
+            (auto-complete-mode (auto-complete))))
+
+     ;; no whitespace anywhere
+     ((and (not (active-minibuffer-window))
+           (looking-at "[^[:space:]]")
+           (looking-back "[^[:space:]]")
+           (not (looking-back "^")))
+      (cond
+       ((bound-and-true-p hs-minor-mode)
+        (save-excursion (end-of-line) (hs-toggle-hiding)))
+       ((bound-and-true-p outline-minor-mode)
+        (save-excursion (outline-cycle)))))
+
+     ;; by default just call whatever was bound
+     (t
+      (let ((fn (or (lookup-key (current-local-map) (kbd "TAB"))
+                    'indent-for-tab-command)))
+        (if (not (called-interactively-p 'any))
+            (fn arg)
+          (setq this-command fn)
+          (call-interactively fn))))))
+
+  (defun malb/toggle-fold ()
+    (interactive)
+    (cond ((eq major-mode 'org-mode)
+           (org-force-cycle-archived))
+          ((bound-and-true-p hs-minor-mode)
+           (save-excursion
+             (end-of-line)
+             (hs-toggle-hiding)))
+
+          ((bound-and-true-p outline-minor-mode)
+           (save-excursion
+             (outline-cycle)))))
+
+  (bind-key "<tab>" #'malb/indent-fold-or-complete)
+  (bind-key "C-<tab>" #'malb/toggle-fold)
+#+END_SRC
 ** Tinyprocmail
 
 #+BEGIN_SRC emacs-lisp
@@ -407,6 +653,58 @@ 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
+** Do the Right Thing Indenting
+Attempts to automatically identify the right indentation for a file
+#+BEGIN_SRC emacs-lisp
+(use-package dtrt-indent
+  :ensure t
+)  
+#+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)
@@ -729,14 +1027,16 @@ This can be used to link things pretty quickly if necessary
 
 ** Tramp
 #+BEGIN_SRC emacs-lisp
-  (add-to-list 'tramp-methods '("vcsh"
-                                (tramp-login-program "vcsh")
-                                (tramp-login-args
-                                 (("enter")
-                                  ("%h")))
-                                (tramp-remote-shell "/bin/sh")
-                                (tramp-remote-shell-args
-                                 ("-c"))))
+  (use-package tramp
+    :config
+    (add-to-list 'tramp-methods '("vcsh"
+                                  (tramp-login-program "vcsh")
+                                  (tramp-login-args
+                                   (("enter")
+                                    ("%h")))
+                                  (tramp-remote-shell "/bin/sh")
+                                  (tramp-remote-shell-args
+                                   ("-c")))))
 #+END_SRC
 ** Reftex
 #+BEGIN_SRC emacs-lisp
@@ -759,109 +1059,111 @@ This can be used to link things pretty quickly if necessary
 #+END_SRC
 ** LaTeX
 #+BEGIN_SRC emacs-lisp
-  (use-package tex
-    :defer t
-    :ensure auctex
+(use-package tex
+  :defer t
+  :ensure auctex
+  :config
+  ; (add-to-list 'TeX-style-path '"/home/don/lib/emacs_el/auctex/style")
+  ;; REFTEX (much enhanced management of cross-ref, labels, etc)
+  ;; http://www.strw.leidenuniv.nl/~dominik/Tools/reftex/
+  ; (autoload 'reftex-mode     "reftex" "RefTeX Minor Mode" t)
+  ; (autoload 'turn-on-reftex  "reftex" "RefTeX Minor Mode" nil)
+  ; (autoload 'reftex-citation "reftex-cite" "Make citation" nil)
+  ; (autoload 'reftex-index-phrase-mode "reftex-index" "Phrase mode" t)
+  (add-hook 'LaTeX-mode-hook 'turn-on-reftex)   ; with AUCTeX LaTeX mode
+  (add-hook 'latex-mode-hook 'turn-on-reftex)   ; with Emacs latex mode
+  (add-hook 'LaTeX-mode-hook 'outline-minor-mode)   ; with AUCTeX LaTeX mode
+  (add-hook 'latex-mode-hook 'outline-minor-mode)   ; with Emacs latex mode
+
+  (setq-default reftex-plug-into-AUCTeX t)
+  ;; support fake section headers
+  (setq TeX-outline-extra
+        '(("%chapter" 1)
+          ("%section" 2)
+          ("%subsection" 3)
+          ("%subsubsection" 4)
+          ("%paragraph" 5)))
+  ;; add font locking to the headers
+  (font-lock-add-keywords
+   'latex-mode
+   '(("^%\\(chapter\\|\\(sub\\|subsub\\)?section\\|paragraph\\)"
+      0 'font-lock-keyword-face t)
+     ("^%chapter{\\(.*\\)}"       1 'font-latex-sectioning-1-face t)
+     ("^%section{\\(.*\\)}"       1 'font-latex-sectioning-2-face t)
+     ("^%subsection{\\(.*\\)}"    1 'font-latex-sectioning-3-face t)
+     ("^%subsubsection{\\(.*\\)}" 1 'font-latex-sectioning-4-face t)
+     ("^%paragraph{\\(.*\\)}"     1 'font-latex-sectioning-5-face t)))
+
+  ;; use smart quotes by default instead of `` and ''
+  ;; taken from http://kieranhealy.org/esk/kjhealy.html
+  (setq TeX-open-quote "“")
+  (setq TeX-close-quote "”")
+
+  ;; (TeX-add-style-hook
+  ;;  "latex"
+  ;;  (lambda ()
+  ;;    (TeX-add-symbols
+  ;;     '("DLA" 1))))
+  ;; (custom-set-variables
+  ;;  '(font-latex-user-keyword-classes 
+  ;;    '(("fixme" 
+  ;;       ("DLA" "RZ")
+  ;;       font-lock-function-name-face 2 (command 1 t))))
+  ;; ) 
+  (setq-default TeX-parse-self t)
+  (setq-default TeX-auto-save t)
+  (setq-default TeX-master nil)
+  (add-to-list 'LaTeX-font-list
+               '(?\C-a "\\alert{","}"))
+  (eval-after-load
+      "latex"
+    '(TeX-add-style-hook
+      "cleveref"
+      (lambda ()
+        (if (boundp 'reftex-ref-style-alist)
+            (add-to-list
+             'reftex-ref-style-alist
+             '("Cleveref" "cleveref"
+               (("\\cref" ?c) ("\\Cref" ?C) ("\\cpageref" ?d) ("\\Cpageref" ?D)))))
+        (reftex-ref-style-activate "Cleveref")
+        (TeX-add-symbols
+         '("cref" TeX-arg-ref)
+         '("Cref" TeX-arg-ref)
+         '("cpageref" TeX-arg-ref)
+         '("Cpageref" TeX-arg-ref)))))
+  (eval-after-load
+      "latex"
+    '(add-to-list 'LaTeX-fill-excluded-macros
+                  '("Sexpr")))
+
+  (use-package font-latex
     :config
-    ; (add-to-list 'TeX-style-path '"/home/don/lib/emacs_el/auctex/style")
-    ;; REFTEX (much enhanced management of cross-ref, labels, etc)
-    ;; http://www.strw.leidenuniv.nl/~dominik/Tools/reftex/
-    ; (autoload 'reftex-mode     "reftex" "RefTeX Minor Mode" t)
-    ; (autoload 'turn-on-reftex  "reftex" "RefTeX Minor Mode" nil)
-    ; (autoload 'reftex-citation "reftex-cite" "Make citation" nil)
-    ; (autoload 'reftex-index-phrase-mode "reftex-index" "Phrase mode" t)
-    (add-hook 'LaTeX-mode-hook 'turn-on-reftex)   ; with AUCTeX LaTeX mode
-    (add-hook 'latex-mode-hook 'turn-on-reftex)   ; with Emacs latex mode
-    (add-hook 'LaTeX-mode-hook 'outline-minor-mode)   ; with AUCTeX LaTeX mode
-    (add-hook 'latex-mode-hook 'outline-minor-mode)   ; with Emacs latex mode
-
-    (setq-default reftex-plug-into-AUCTeX t)
-    ;; support fake section headers
-    (setq TeX-outline-extra
-          '(("%chapter" 1)
-            ("%section" 2)
-            ("%subsection" 3)
-            ("%subsubsection" 4)
-            ("%paragraph" 5)))
-    ;; add font locking to the headers
-    (font-lock-add-keywords
-     'latex-mode
-     '(("^%\\(chapter\\|\\(sub\\|subsub\\)?section\\|paragraph\\)"
-        0 'font-lock-keyword-face t)
-       ("^%chapter{\\(.*\\)}"       1 'font-latex-sectioning-1-face t)
-       ("^%section{\\(.*\\)}"       1 'font-latex-sectioning-2-face t)
-       ("^%subsection{\\(.*\\)}"    1 'font-latex-sectioning-3-face t)
-       ("^%subsubsection{\\(.*\\)}" 1 'font-latex-sectioning-4-face t)
-       ("^%paragraph{\\(.*\\)}"     1 'font-latex-sectioning-5-face t)))
-
-    ;; use smart quotes by default instead of `` and ''
-    ;; taken from http://kieranhealy.org/esk/kjhealy.html
-    (setq TeX-open-quote "“")
-    (setq TeX-close-quote "”")
-
-    ;; (TeX-add-style-hook
-    ;;  "latex"
-    ;;  (lambda ()
-    ;;    (TeX-add-symbols
-    ;;     '("DLA" 1))))
-    ;; (custom-set-variables
-    ;;  '(font-latex-user-keyword-classes 
-    ;;    '(("fixme" 
-    ;;       ("DLA" "RZ")
-    ;;       font-lock-function-name-face 2 (command 1 t))))
-    ;; ) 
-    (setq-default TeX-parse-self t)
-    (setq-default TeX-auto-save t)
-    (setq-default TeX-master nil)
-    (eval-after-load
-        "latex"
-      '(TeX-add-style-hook
-        "cleveref"
-        (lambda ()
-          (if (boundp 'reftex-ref-style-alist)
-              (add-to-list
-               'reftex-ref-style-alist
-               '("Cleveref" "cleveref"
-                 (("\\cref" ?c) ("\\Cref" ?C) ("\\cpageref" ?d) ("\\Cpageref" ?D)))))
-          (reftex-ref-style-activate "Cleveref")
-          (TeX-add-symbols
-           '("cref" TeX-arg-ref)
-           '("Cref" TeX-arg-ref)
-           '("cpageref" TeX-arg-ref)
-           '("Cpageref" TeX-arg-ref)))))
-    (eval-after-load
-        "latex"
-      '(add-to-list 'LaTeX-fill-excluded-macros
-                    '("Sexpr")))
-
-    (use-package font-latex
-      :config
-      (setq font-latex-match-reference-keywords
-            '(
-              ("fref" "{")
-              ("Fref" "{")
-              ("citep" "{")
-              ("citet" "{")
-              ("acs" "{")
-              ("acsp" "{")
-              ("ac" "{")
-              ("acp" "{")
-              ("acl" "{")
-              ("aclp" "{")
-              ("acsu" "{")
-              ("aclu" "{")
-              ("acused" "{")
-              ("DLA" "{")
-              ("RZ" "{")
-              ("OM" "{")
-              ("DL" "{")
-              ("fixme" "{"))
-            )
-      )
-    (setq font-latex-fontify-script nil)
-    (setq font-latex-fontify-sectioning (quote color))
-    (setq font-latex-script-display (quote (nil)))
-  )
+    (setq font-latex-match-reference-keywords
+          '(
+            ("fref" "{")
+            ("Fref" "{")
+            ("citep" "{")
+            ("citet" "{")
+            ("acs" "{")
+            ("acsp" "{")
+            ("ac" "{")
+            ("acp" "{")
+            ("acl" "{")
+            ("aclp" "{")
+            ("acsu" "{")
+            ("aclu" "{")
+            ("acused" "{")
+            ("DLA" "{")
+            ("RZ" "{")
+            ("OM" "{")
+            ("DL" "{")
+            ("fixme" "{"))
+          )
+    )
+  (setq font-latex-fontify-script nil)
+  (setq font-latex-fontify-sectioning (quote color))
+  (setq font-latex-script-display (quote (nil)))
+)
 
 #+END_SRC
 ** ESS
@@ -869,13 +1171,18 @@ This can be used to link things pretty quickly if necessary
   (use-package ess
     :ensure t
     :commands R
-    :mode "\\.R\\'"
+    :mode ("\\.R\\'" . ess-r-mode)
     :bind (:map ess-mode-map
                 ("C-c C-R" . dla/ess-region-remote-eval))
+    :init
+    (autoload 'ess-r-mode "ess-site" nil t)
+    (autoload 'R "ess-site" nil t)
     :config
+    ; actually load the rest of ess
+    (require 'ess-site)
     (defun ess-change-directory (path)
       "Set the current working directory to PATH for both *R* and Emacs."
-      (interactive "DDirectory to change to: ")
+      (interactive "Directory to change to: ")
     
       (when (file-exists-p path)
         (ess-command (concat "setwd(\"" path "\")\n"))
@@ -917,21 +1224,41 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
 
 ** Polymode
 #+BEGIN_SRC emacs-lisp
-  (use-package polymode
-    :config
-    (use-package poly-R)
-    (use-package poly-noweb)
-    (use-package poly-markdown)
-    :mode ("\\.Snw" . poly-noweb+r-mode)
-    :mode ("\\.Rnw" . poly-noweb+r-mode)
-    :mode ("\\.Rmd" . poly-markdown+r-mode)
-    )
+(use-package poly-noweb
+  :ensure t
+  :after polymode
+
+  )
+(use-package poly-markdown
+  :ensure t
+  :after polymode
+  )
+(use-package poly-R
+  :ensure t
+  :after (:all polymode poly-markdown poly-noweb)
+  ; :mode ("\\.Snw" . poly-noweb+r-mode)
+  ; :mode ("\\.Rnw" . poly-noweb+r-mode)
+  ; :mode ("\\.Rmd" . poly-markdown+r-mode)
+  )
+(use-package polymode
+  :ensure t
+  )
+
 #+END_SRC
 
 ** Outlining
 *** Outline magic
 #+BEGIN_SRC emacs-lisp
   (use-package outline-magic)
+#+END_SRC
+*** Outline mode
+#+BEGIN_SRC emacs-lisp
+;; change the outline mode prefix from C-c @ to C-c C-2
+(setq outline-minor-mode-prefix "C-c C-2")
+;;(add-hook 'outline-minor-mode-hook
+;;          (lambda () (local-set-key (kbd "C-c C-2")
+;;                                    outline-mode-prefix-map)))
+
 #+END_SRC
 ** Writeroom Mode
 #+BEGIN_SRC emacs-lisp
@@ -978,6 +1305,8 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
 ** Web Mode
 #+BEGIN_SRC emacs-lisp
   (use-package web-mode
+    :load-path "/home/don/projects/web-mode/"
+    :mode ("\\.\\(tx|tmpl\\)\\'" . web-mode)
     :config
     (add-to-list 'auto-mode-alist '("\\.tmpl\\'" . web-mode))
     (setq web-mode-enable-engine-detection t)
@@ -988,7 +1317,7 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
 ** Spamassassin Mode
 #+BEGIN_SRC emacs-lisp
   (use-package spamassassin-mode
-    :defer
+    :commands spamassassin-mode
     :ensure f
     )
 #+END_SRC
@@ -996,56 +1325,117 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
 #+BEGIN_SRC emacs-lisp
   (use-package password-store
     :ensure f
-    :commands password-store-edit password-store-create
+    :commands password-store-edit password-store-generate
     )
 #+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-mode
+    :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
+
+** Go language
+#+BEGIN_SRC emacs-lisp
+(use-package go-mode
+             :diminish "go"
+             :mode "\\.go"
+             )
+#+END_SRC
+
+** Expand region
+#+BEGIN_SRC emacs-lisp
+(use-package expand-region
+  :bind (("C-=" . 'er/expand-region))
+  )
+#+END_SRC
+
+** Dockerfile
+#+BEGIN_SRC emacs-lisp
+(use-package dockerfile-mode
+  :mode "Dockerfile"
+  )
+#+END_SRC
+
+** Beancount
+#+BEGIN_SRC emacs-lisp
+(use-package beancount
+  :load-path "~/lib/emacs_el/beancount-mode/"
+  :ensure f
+  :mode "\\.beancount\\'"
+  
+  )
+#+END_SRC
 * Email
 ** Mutt
 *** Message-mode
 #+BEGIN_SRC emacs-lisp
-  (use-package message
-    :ensure f
-    :diminish "✉"
-    :mode "muttng-[a-z0-9]+-[0-9]+-"
-    :mode "mutt-[a-z0-9]+-[0-9]+-"
-    :hook 'my/message-mode-settings
-    :hook 'turn-on-flyspell
-    :bind (:map message-mode-map
-               ("C-c C-a" . my/post-attach-file))
-    :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))))
-      )
+(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))
-           (description (string-read "Description: ")))
-       (my/header-attach-file file description)))
-
-    (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 "> ")
-  )
+  (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 "> ")
+  (setq mail-header-separator "") ; fix broken header detection
+)
 #+END_SRC
 *** Muttrc mode
 #+BEGIN_SRC emacs-lisp
@@ -1058,29 +1448,49 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
 * 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)
+  (use-package autorevert
+    :diminish auto-revert-mode
+    :config
+    (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
-    :config 
-
+    :delight (org-mode "ø")
+    :mode ("\\.\\(org\\|org_archive\\|txt\\)\\'" . org-mode)
+    :bind (("C-c l"  . org-store-link)
+           ("C-c a"  . org-agenda)
+           ("C-c b"  . org-iswitchb))
 #+END_SRC
 ** Agenda Configuration
 #+BEGIN_SRC emacs-lisp
-  :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)
 
+  (setq org-agenda-sticky t)
+  (defun dla/show-org-agenda ()
+    (interactive)
+    (let (agendabuffer
+          '(delq nil 
+                (mapcar (lambda (x)
+                          (and (string-match-p
+                                "\*Org Agenda.*\*"
+                                (buffer-name x))
+                               x)
+                          )
+                        (buffer-list))))
+      (if agendabuffer
+          (switch-to-buffer
+           (buffer-name agendabuffer))
+        (org-agenda-list)))
+      (delete-other-windows))
+
   ;; agenda configuration
   ;; Do not dim blocked tasks
   (setq org-agenda-dim-blocked-tasks nil)
@@ -1174,6 +1584,8 @@ 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/laurel.org"
+            "~/projects/org-notes/from-calendar.org"
             "~/org-mode/from-mobile.org"
             "~/projects/org-notes/fh.org")))
 
@@ -1210,7 +1622,7 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
 ** Capture Templates
 #+BEGIN_SRC emacs-lisp
   (setq org-capture-templates  ;; mail-specific note template, identified by "m"
-        '(("m" "Mail" entry (file "~/projects/org-notes/refile.org")
+        `(("m" "Mail" entry (file "~/projects/org-notes/refile.org")
            "* %?\n\n  Source: %u, [[%:link][%:description]]\n  %:initial")
           ("t" "todo" entry (file "~/projects/org-notes/refile.org")
            "* TODO %?\n  :PROPERTIES:\n  :END:\n  :LOGBOOK:\n  :END:\n%U\n%a\n" :clock-in t :clock-resume t)
@@ -1232,8 +1644,10 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
            "* TODO Get/Read %? \n%U" :clock-in t :clock-resume t)
           ("p" "Phone call" entry (file "~/projects/org-notes/refile.org")
            "* PHONE %? :PHONE:\n%U" :clock-in t :clock-resume t)
-          ("J" "job" entry (file "~/projects/org-notes/refile.org")
-           "* TODO Apply for %a%? :job:\nSCHEDULED: %(format-time-string \"<%Y-%m-%d 17:00-17:30>\")\n%U\n%a\n" :clock-in t :clock-resume t)
+           ("J" "job" entry (file+olp "~/projects/org-notes/notes.org"
+                                       "Jobs"
+                                       ,(format-time-string "Positions %Y"))
+           "* TODO Apply for %? :job:\nSCHEDULED: <%<%Y-%m-%d>>\n%U\n%x\n" :clock-in t :clock-resume t)
           ("h" "Habit" entry (file "~/projects/org-notes/refile.org")
            "* NEXT %?\n%U\n%a\nSCHEDULED: %(format-time-string \"<%Y-%m-%d .+1d/3d>\")\n:PROPERTIES:\n:STYLE: habit\n:REPEAT_TO_STATE: NEXT\n:END:\n%a\n")
           )
@@ -1260,50 +1674,43 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
 #+END_SRC
 ** Org mode key bindings
 #+BEGIN_SRC emacs-lisp
-  ; org mode configuration from http://doc.norang.ca/org-mode.html
+  ;; 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 "<S-f5>") 'bh/widen)
-  (global-set-key (kbd "<f7>") 'bh/set-truncate-lines)
-  (global-set-key (kbd "<f8>") 'org-cycle-agenda-files)
-  (global-set-key (kbd "<f9> <f9>") 'bh/show-org-agenda)
-  (global-set-key (kbd "<f9> b") 'bbdb)
-  (global-set-key (kbd "<f9> c") 'calendar)
-  (global-set-key (kbd "<f9> f") 'boxquote-insert-file)
-  (global-set-key (kbd "<f9> h") 'bh/hide-other)
-  (global-set-key (kbd "<f9> n") 'bh/toggle-next-task-display)
-  (global-set-key (kbd "<f9> w") 'widen)
-
-  ; change the outline mode prefix from C-c @ to C-c C-2
-  (setq outline-minor-mode-prefix "C-c C-2")
-  ;(add-hook 'outline-minor-mode-hook
-  ;          (lambda () (local-set-key (kbd "C-c C-2")
-  ;                                    outline-mode-prefix-map)))
-
-  (global-set-key (kbd "<f9> I") 'bh/punch-in)
-  (global-set-key (kbd "<f9> O") 'bh/punch-out)
-
-  (global-set-key (kbd "<f9> o") 'bh/make-org-scratch)
-
-  (global-set-key (kbd "<f9> r") 'boxquote-region)
-  (global-set-key (kbd "<f9> s") 'bh/switch-to-scratch)
-
-  (global-set-key (kbd "<f9> t") 'bh/insert-inactive-timestamp)
-  (global-set-key (kbd "<f9> T") 'bh/toggle-insert-inactive-timestamp)
-
-  (global-set-key (kbd "<f9> v") 'visible-mode)
-  (global-set-key (kbd "<f9> l") 'org-toggle-link-display)
-  (global-set-key (kbd "<f9> SPC") 'bh/clock-in-last-task)
-  (global-set-key (kbd "C-<f9>") 'previous-buffer)
-  (global-set-key (kbd "M-<f9>") 'org-toggle-inline-images)
-  (global-set-key (kbd "C-x n r") 'narrow-to-region)
-  (global-set-key (kbd "C-<f10>") 'next-buffer)
-  (global-set-key (kbd "<f11>") 'org-clock-goto)
-  (global-set-key (kbd "C-<f11>") 'org-clock-in)
-  (global-set-key (kbd "C-s-<f12>") 'bh/save-then-publish)
-  (global-set-key (kbd "C-c c") 'org-capture)
-
+  :bind* (("<f9> a" . org-agenda)
+          ("<f9> I" . bh/punch-in)
+          ("<f9> O" . bh/punch-out)
+          ("<f9> SPC" . bh/clock-in-last-task)
+          ("<f12>" . dla/show-org-agenda)
+          ;; ("<f5>" . bh/org-todo)
+          ("<S-f5>" . bh/widen)
+          ("<f7>" . bh/set-truncate-lines)
+          ("<f8>" . org-cycle-agenda-files)
+          ("<f9> <f9>" . dla/show-org-agenda)
+          ("<f9> b" . bbdb)
+          ("<f9> c" . calendar)
+          ("<f9> f" . boxquote-insert-file)
+          ("<f9> h" . bh/hide-other)
+          ("<f9> n" . bh/toggle-next-task-display)
+          ("<f9> w" . widen)
+
+          ("<f9> r" . boxquote-region)
+          ("<f9> s" . bh/switch-to-scratch)
+
+          ("<f9> t" . bh/insert-inactive-timestamp)
+          ("<f9> T" . bh/toggle-insert-inactive-timestamp)
+
+          ("<f9> v" . visible-mode)
+          ("<f9> l" . org-toggle-link-display)
+          ("<f9> SPC" . bh/clock-in-last-task)
+          ("C-<f9>" . previous-buffer)
+          ("M-<f9>" . org-toggle-inline-images)
+          ("C-x n r" . narrow-to-region)
+          ("C-<f10>" . next-buffer)
+          ("<f11>" . org-clock-goto)
+          ("C-<f11>" . org-clock-in)
+          ("C-s-<f12>" . bh/save-then-publish)
+          ("C-c c" . org-capture))
+  :config
 #+END_SRC
 ** Utility Functions
 #+BEGIN_SRC emacs-lisp
@@ -1325,11 +1732,6 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
       (set-window-start (selected-window)
                         (window-start (selected-window)))))
 
-  (defun bh/make-org-scratch ()
-    (interactive)
-    (find-file "/tmp/publish/scratch.org")
-    (gnus-make-directory "/tmp/publish"))
-
   (defun bh/switch-to-scratch ()
     (interactive)
     (switch-to-buffer "*scratch*"))
@@ -1344,11 +1746,26 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
   do not already have one."
     (interactive)
     (org-map-entries 'org-id-get-create))
+  (defun dla/org-update-ids-to-headlines-in-file ()
+    "Add or replace ID properties to all headlines in the current file 
+  (or narrowed region)."
+    (interactive)
+    (org-map-entries '(lambda () (org-id-get-create t))))
   ; if we wanted to do this to every buffer, do the following:
   ; (add-hook 'org-mode-hook
   ;           (lambda ()
   ;             (add-hook 'before-save-hook 'my/org-add-ids-to-headlines-in-file nil 'local)))
 #+END_SRC
+** Org ID locations
+#+BEGIN_SRC emacs-lisp
+(use-package find-lisp
+  :ensure t)
+(setq org-agenda-text-search-extra-files
+      (append '(agenda-archives)
+              (find-lisp-find-files "~/projects/org-notes" "\.org$")
+              (find-lisp-find-files "~/projects/org-notes" "\.org_archive$")
+              ))
+#+END_SRC
 ** Keywords (TODO)
 #+BEGIN_SRC emacs-lisp
   (setq org-todo-keywords
@@ -1449,7 +1866,9 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
     (setq my-org-protocol-flag t))
 
   (defadvice org-insert-todo-heading (after dla/create-id activate)
-    (org-id-get-create)
+    (unless (org-in-item-p)
+      (org-id-get-create)
+      )
     )
 
   ;; org modules
@@ -1557,29 +1976,33 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
 #+END_SRC
 ** General Org Babel Configuration
 #+BEGIN_SRC emacs-lisp
-  ;; org babel support
-  (org-babel-do-load-languages
-   'org-babel-load-languages
-   '((emacs-lisp . t )
-     (R . t)
-     (latex . t)
-     (ditaa . t)
-     (dot . t)
-     ))
-  ;; use graphviz-dot for dot things
-  (add-to-list 'org-src-lang-modes '("dot" . graphviz-dot))
-  ;; org-babel-by-backend
-  (defmacro org-babel-by-backend (&rest body)
-     `(case (if (boundp 'backend) 
-                (org-export-backend-name backend)
-              nil) ,@body))
-
-  (defun my/fix-inline-images ()
-    (when org-inline-image-overlays
-      (org-redisplay-inline-images)))
-
-  (add-hook 'org-babel-after-execute-hook
-             'my/fix-inline-images)
+;; org babel support
+(org-babel-do-load-languages
+ 'org-babel-load-languages
+ '((emacs-lisp . t )
+   (R . t)
+   (latex . t)
+   (ditaa . t)
+   (dot . t)
+   ))
+;; set the right path to ditaa.jar
+(setq org-ditaa-jar-path "/usr/share/ditaa/ditaa.jar")
+;; use graphviz-dot for dot things
+(add-to-list 'org-src-lang-modes '("dot" . graphviz-dot))
+;; do not indent begin_src blocks
+(setq org-edit-src-content-indentation 0)
+;; org-babel-by-backend
+(defmacro org-babel-by-backend (&rest body)
+   `(case (if (boundp 'backend) 
+              (org-export-backend-name backend)
+            nil) ,@body))
+
+(defun my/fix-inline-images ()
+  (when org-inline-image-overlays
+    (org-redisplay-inline-images)))
+
+(add-hook 'org-babel-after-execute-hook
+           'my/fix-inline-images)
 
 #+END_SRC
 ** LaTeX configuration
@@ -1587,402 +2010,406 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
    :ID:       7135ba17-6a50-4eed-84ca-b90afa5b12f8
    :END:
 #+BEGIN_SRC emacs-lisp
-  (require 'ox-latex)
-  (add-to-list 'org-latex-classes
-           '("memarticle"
-         "\\documentclass[11pt,oneside,article]{memoir}\n"
-         ("\\section{%s}" . "\\section*{%s}")
-         ("\\subsection{%s}" . "\\subsection*{%s}")
-         ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
-         ("\\paragraph{%s}" . "\\paragraph*{%s}")
-         ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
-
-  (setq org-beamer-outline-frame-options "")
-  (add-to-list 'org-latex-classes
-           '("beamer"
-         "\\documentclass[ignorenonframetext]{beamer}
-  [NO-DEFAULT-PACKAGES]
-  [PACKAGES]
-  [EXTRA]"
-         ("\\section{%s}" . "\\section*{%s}")
-         ("\\subsection{%s}" . "\\subsection*{%s}")
-         ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
-         ("\\paragraph{%s}" . "\\paragraph*{%s}")
-         ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
-
-  (add-to-list 'org-latex-classes
-           '("membook"
-         "\\documentclass[11pt,oneside]{memoir}\n"
-         ("\\chapter{%s}" . "\\chapter*{%s}")
-         ("\\section{%s}" . "\\section*{%s}")
-         ("\\subsection{%s}" . "\\subsection*{%s}")
-         ("\\subsubsection{%s}" . "\\subsubsection*{%s}")))
-
-  (add-to-list 'org-latex-classes
-           '("letter"
-         "\\documentclass[11pt]{letter}
-  [NO-DEFAULT-PACKAGES]
-  [PACKAGES]
-  [EXTRA]"
-     ("\\section{%s}" . "\\section*{%s}")
-         ("\\subsection{%s}" . "\\subsection*{%s}")
-         ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
-         ("\\paragraph{%s}" . "\\paragraph*{%s}")
-         ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
-
-  (add-to-list 'org-latex-classes
-           '("dlacv"
-         "\\documentclass{dlacv}
-  [NO-DEFAULT-PACKAGES]
-  [NO-PACKAGES]
-  [NO-EXTRA]"
-         ("\\section{%s}" . "\\section*{%s}")
-         ("\\subsection{%s}" . "\\subsection*{%s}")
-         ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
-         ("\\paragraph{%s}" . "\\paragraph*{%s}")
-         ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
-
-
-  (add-to-list 'org-latex-classes
-           '("dlaresume"
-         "\\documentclass{dlaresume}
-  [NO-DEFAULT-PACKAGES]
-  [NO-PACKAGES]
-  [NO-EXTRA]"
-         ("\\section{%s}" . "\\section*{%s}")
-         ("\\subsection{%s}" . "\\subsection*{%s}")
-         ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
-         ("\\paragraph{%s}" . "\\paragraph*{%s}")
-         ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
-
-
-  ;; Originally taken from Bruno Tavernier: http://thread.gmane.org/gmane.emacs.orgmode/31150/focus=31432
-  ;; but adapted to use latexmk 4.22 or higher.  
-  (setq org-latex-pdf-process '("latexmk -f -pdflatex=xelatex -bibtex -use-make -pdf %f"))
-
-  ;; Default packages included in /every/ tex file, latex, pdflatex or xelatex
-  (setq org-latex-default-packages-alist
-    '(("" "amsmath" t)
-      ("" "unicode-math" t)
-      ))
-  (setq org-latex-packages-alist
-    '(("" "graphicx" t)
-      ("" "fontspec" t)
-      ("" "xunicode" t)
-      ("" "hyperref" t)
-      ("" "url" t)
-      ("" "rotating" t)
-      ("" "longtable" nil)
-      ("" "float" )))
-
-  ;; make equations larger
-  (setq org-format-latex-options (plist-put org-format-latex-options :scale 2.0))
-
-  (defun org-create-formula--latex-header ()
-    "Return LaTeX header appropriate for previewing a LaTeX snippet."
-    (let ((info (org-combine-plists (org-export--get-global-options
-             (org-export-get-backend 'latex))
-            (org-export--get-inbuffer-options
-             (org-export-get-backend 'latex)))))
-      (org-latex-guess-babel-language
-       (org-latex-guess-inputenc
-    (org-splice-latex-header
-     org-format-latex-header
-     org-latex-default-packages-alist
-     nil t
-     (plist-get info :latex-header)))
-       info)))
-
-
-  ; support ignoring headers in org mode export to latex
-  ; from http://article.gmane.org/gmane.emacs.orgmode/67692
-  (defadvice org-latex-headline (around my-latex-skip-headlines
-                    (headline contents info) activate)
-    (if (member "ignoreheading" (org-element-property :tags headline))
-    (setq ad-return-value contents)
-      ad-do-it))
-
-  ;; keep latex logfiles
-
-  (setq org-latex-remove-logfiles nil)
-
-  ;; Resume clocking task when emacs is restarted
-  (org-clock-persistence-insinuate)
-  ;;
-  ;; Show lot of clocking history so it's easy to pick items off the C-F11 list
-  (setq org-clock-history-length 23)
-  ;; Resume clocking task on clock-in if the clock is open
-  (setq org-clock-in-resume t)
-  ;; Change tasks to NEXT when clocking in; this avoids clocking in when
-  ;; there are things like PHONE calls
-  (setq org-clock-in-switch-to-state 'bh/clock-in-to-next)
-  ;; Separate drawers for clocking and logs
-  (setq org-drawers (quote ("PROPERTIES" "LOGBOOK")))
-  ;; Save clock data and state changes and notes in the LOGBOOK drawer
-  (setq org-clock-into-drawer t)
-  (setq org-log-into-drawer t)
-  ;; Sometimes I change tasks I'm clocking quickly - this removes clocked tasks with 0:00 duration
-  (setq org-clock-out-remove-zero-time-clocks t)
-  ;; Clock out when moving task to a done state
-  (setq org-clock-out-when-done t)
-  ;; Save the running clock and all clock history when exiting Emacs, load it on startup
-  (setq org-clock-persist t)
-  ;; Do not prompt to resume an active clock
-  (setq org-clock-persist-query-resume nil)
-  ;; Enable auto clock resolution for finding open clocks
-  (setq org-clock-auto-clock-resolution (quote when-no-clock-is-running))
-  ;; Include current clocking task in clock reports
-  (setq org-clock-report-include-clocking-task t)
-
-  ;; the cache seems to be broken
-  (setq org-element-use-cache nil)
-
-  (defvar bh/keep-clock-running nil)
-
-  (defun bh/is-task-p ()
-    "Any task with a todo keyword and no subtask"
-    (save-restriction
-      (widen)
-      (let ((has-subtask)
-            (subtree-end (save-excursion (org-end-of-subtree t)))
-            (is-a-task (member (nth 2 (org-heading-components)) org-todo-keywords-1)))
-        (save-excursion
-          (forward-line 1)
-          (while (and (not has-subtask)
-                      (< (point) subtree-end)
-                      (re-search-forward "^\*+ " subtree-end t))
-            (when (member (org-get-todo-state) org-todo-keywords-1)
-              (setq has-subtask t))))
-        (and is-a-task (not has-subtask)))))
-  (defun bh/is-project-p ()
-    "Any task with a todo keyword subtask"
-    (save-restriction
-      (widen)
-      (let ((has-subtask)
-            (subtree-end (save-excursion (org-end-of-subtree t)))
-            (is-a-task (member (nth 2 (org-heading-components)) org-todo-keywords-1)))
-        (save-excursion
-          (forward-line 1)
-          (while (and (not has-subtask)
-                      (< (point) subtree-end)
-                      (re-search-forward "^\*+ " subtree-end t))
-            (when (member (org-get-todo-state) org-todo-keywords-1)
-              (setq has-subtask t))))
-        (and is-a-task has-subtask))))
-
-  (defun bh/is-subproject-p ()
-    "Any task which is a subtask of another project"
-    (let ((is-subproject)
+(use-package ox-extra
+  :config
+  (ox-extras-activate '(ignore-headlines)))
+(require 'ox-latex)
+(add-to-list 'org-latex-classes
+         '("memarticle"
+       "\\documentclass[11pt,oneside,article]{memoir}\n"
+       ("\\section{%s}" . "\\section*{%s}")
+       ("\\subsection{%s}" . "\\subsection*{%s}")
+       ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
+       ("\\paragraph{%s}" . "\\paragraph*{%s}")
+       ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
+
+(setq org-beamer-outline-frame-options "")
+(add-to-list 'org-latex-classes
+         '("beamer"
+       "\\documentclass[ignorenonframetext]{beamer}
+[NO-DEFAULT-PACKAGES]
+[PACKAGES]
+[EXTRA]"
+       ("\\section{%s}" . "\\section*{%s}")
+       ("\\subsection{%s}" . "\\subsection*{%s}")
+       ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
+       ("\\paragraph{%s}" . "\\paragraph*{%s}")
+       ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
+
+(add-to-list 'org-latex-classes
+         '("membook"
+       "\\documentclass[11pt,oneside]{memoir}\n"
+       ("\\chapter{%s}" . "\\chapter*{%s}")
+       ("\\section{%s}" . "\\section*{%s}")
+       ("\\subsection{%s}" . "\\subsection*{%s}")
+       ("\\subsubsection{%s}" . "\\subsubsection*{%s}")))
+
+(add-to-list 'org-latex-classes
+         '("letter"
+       "\\documentclass[11pt]{letter}
+[NO-DEFAULT-PACKAGES]
+[PACKAGES]
+[EXTRA]"
+   ("\\section{%s}" . "\\section*{%s}")
+       ("\\subsection{%s}" . "\\subsection*{%s}")
+       ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
+       ("\\paragraph{%s}" . "\\paragraph*{%s}")
+       ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
+
+(add-to-list 'org-latex-classes
+         '("dlacv"
+       "\\documentclass{dlacv}
+[NO-DEFAULT-PACKAGES]
+[NO-PACKAGES]
+[NO-EXTRA]"
+       ("\\section{%s}" . "\\section*{%s}")
+       ("\\subsection{%s}" . "\\subsection*{%s}")
+       ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
+       ("\\paragraph{%s}" . "\\paragraph*{%s}")
+       ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
+
+
+(add-to-list 'org-latex-classes
+         '("dlaresume"
+       "\\documentclass{dlaresume}
+[NO-DEFAULT-PACKAGES]
+[NO-PACKAGES]
+[NO-EXTRA]"
+       ("\\section{%s}" . "\\section*{%s}")
+       ("\\subsection{%s}" . "\\subsection*{%s}")
+       ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
+       ("\\paragraph{%s}" . "\\paragraph*{%s}")
+       ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))
+
+
+;; Originally taken from Bruno Tavernier: http://thread.gmane.org/gmane.emacs.orgmode/31150/focus=31432
+;; but adapted to use latexmk 4.22 or higher.  
+(setq org-latex-pdf-process '("latexmk -f -pdflatex=xelatex -bibtex -use-make -pdf %f"))
+
+;; Default packages included in /every/ tex file, latex, pdflatex or xelatex
+(setq org-latex-default-packages-alist
+  '(("" "amsmath" t)
+    ("" "unicode-math" t)
+    ))
+(setq org-latex-packages-alist
+  '(("" "graphicx" t)
+    ("" "fontspec" t)
+    ("" "xunicode" t)
+    ("" "hyperref" t)
+    ("" "url" t)
+    ("" "rotating" t)
+    ("" "longtable" nil)
+    ("" "float" )))
+
+;; make equations larger
+(setq org-format-latex-options (plist-put org-format-latex-options :scale 2.0))
+
+(defun org-create-formula--latex-header ()
+  "Return LaTeX header appropriate for previewing a LaTeX snippet."
+  (let ((info (org-combine-plists (org-export--get-global-options
+           (org-export-get-backend 'latex))
+          (org-export--get-inbuffer-options
+           (org-export-get-backend 'latex)))))
+    (org-latex-guess-babel-language
+     (org-latex-guess-inputenc
+  (org-splice-latex-header
+   org-format-latex-header
+   org-latex-default-packages-alist
+   nil t
+   (plist-get info :latex-header)))
+     info)))
+
+
+; support ignoring headers in org mode export to latex
+; from http://article.gmane.org/gmane.emacs.orgmode/67692
+(defadvice org-latex-headline (around my-latex-skip-headlines
+                  (headline contents info) activate)
+  (if (member "ignoreheading" (org-element-property :tags headline))
+  (setq ad-return-value contents)
+    ad-do-it))
+
+;; keep latex logfiles
+
+(setq org-latex-remove-logfiles nil)
+
+;; Resume clocking task when emacs is restarted
+(org-clock-persistence-insinuate)
+;;
+;; Show lot of clocking history so it's easy to pick items off the C-F11 list
+(setq org-clock-history-length 23)
+;; Resume clocking task on clock-in if the clock is open
+(setq org-clock-in-resume t)
+;; Change tasks to NEXT when clocking in; this avoids clocking in when
+;; there are things like PHONE calls
+(setq org-clock-in-switch-to-state 'bh/clock-in-to-next)
+;; Separate drawers for clocking and logs
+(setq org-drawers (quote ("PROPERTIES" "LOGBOOK")))
+;; Save clock data and state changes and notes in the LOGBOOK drawer
+(setq org-clock-into-drawer t)
+(setq org-log-into-drawer t)
+;; Sometimes I change tasks I'm clocking quickly - this removes clocked tasks with 0:00 duration
+(setq org-clock-out-remove-zero-time-clocks t)
+;; Clock out when moving task to a done state
+(setq org-clock-out-when-done t)
+;; Save the running clock and all clock history when exiting Emacs, load it on startup
+(setq org-clock-persist t)
+;; Do not prompt to resume an active clock
+(setq org-clock-persist-query-resume nil)
+;; Enable auto clock resolution for finding open clocks
+(setq org-clock-auto-clock-resolution (quote when-no-clock-is-running))
+;; Include current clocking task in clock reports
+(setq org-clock-report-include-clocking-task t)
+
+;; the cache seems to be broken
+(setq org-element-use-cache nil)
+
+(defvar bh/keep-clock-running nil)
+
+(defun bh/is-task-p ()
+  "Any task with a todo keyword and no subtask"
+  (save-restriction
+    (widen)
+    (let ((has-subtask)
+          (subtree-end (save-excursion (org-end-of-subtree t)))
           (is-a-task (member (nth 2 (org-heading-components)) org-todo-keywords-1)))
       (save-excursion
-        (while (and (not is-subproject) (org-up-heading-safe))
-          (when (member (nth 2 (org-heading-components)) org-todo-keywords-1)
-            (setq is-subproject t))))
-      (and is-a-task is-subproject)))
-
-
-  (defun bh/clock-in-to-next (kw)
-    "Switch a task from TODO to NEXT when clocking in.
-  Skips capture tasks, projects, and subprojects.
-  Switch projects and subprojects from NEXT back to TODO"
-    (when (not (and (boundp 'org-capture-mode) org-capture-mode))
-      (cond
-       ((and (member (org-get-todo-state) (list "TODO"))
-         (bh/is-task-p))
-    "NEXT")
-       ((and (member (org-get-todo-state) (list "NEXT"))
-         (bh/is-project-p))
-    "TODO"))))
-
-  (defun bh/punch-in (arg)
-    "Start continuous clocking and set the default task to the
-  selected task.  If no task is selected set the Organization task
-  as the default task."
-    (interactive "p")
-    (setq bh/keep-clock-running t)
-    (if (equal major-mode 'org-agenda-mode)
-    ;;
-    ;; We're in the agenda
-    ;;
-    (let* ((marker (org-get-at-bol 'org-hd-marker))
-           (tags (org-with-point-at marker (org-get-tags-at))))
-      (if (and (eq arg 4) tags)
-          (org-agenda-clock-in '(16))
-        (bh/clock-in-organization-task-as-default)))
-      ;;
-      ;; We are not in the agenda
-      ;;
-      (save-restriction
+        (forward-line 1)
+        (while (and (not has-subtask)
+                    (< (point) subtree-end)
+                    (re-search-forward "^\*+ " subtree-end t))
+          (when (member (org-get-todo-state) org-todo-keywords-1)
+            (setq has-subtask t))))
+      (and is-a-task (not has-subtask)))))
+(defun bh/is-project-p ()
+  "Any task with a todo keyword subtask"
+  (save-restriction
     (widen)
-    ; Find the tags on the current task
-    (if (and (equal major-mode 'org-mode) (not (org-before-first-heading-p)) (eq arg 4))
-        (org-clock-in '(16))
-      (bh/clock-in-organization-task-as-default)))))
-
-  (defun bh/punch-out ()
-    (interactive)
-    (setq bh/keep-clock-running nil)
-    (when (org-clock-is-active)
-      (org-clock-out))
-    (org-agenda-remove-restriction-lock))
-
-  (defun bh/clock-in-default-task ()
-    (save-excursion
-      (org-with-point-at org-clock-default-task
-    (org-clock-in))))
-
-  (defun bh/clock-in-parent-task ()
-    "Move point to the parent (project) task if any and clock in"
-    (let ((parent-task))
+    (let ((has-subtask)
+          (subtree-end (save-excursion (org-end-of-subtree t)))
+          (is-a-task (member (nth 2 (org-heading-components)) org-todo-keywords-1)))
       (save-excursion
-    (save-restriction
-      (widen)
-      (while (and (not parent-task) (org-up-heading-safe))
+        (forward-line 1)
+        (while (and (not has-subtask)
+                    (< (point) subtree-end)
+                    (re-search-forward "^\*+ " subtree-end t))
+          (when (member (org-get-todo-state) org-todo-keywords-1)
+            (setq has-subtask t))))
+      (and is-a-task has-subtask))))
+
+(defun bh/is-subproject-p ()
+  "Any task which is a subtask of another project"
+  (let ((is-subproject)
+        (is-a-task (member (nth 2 (org-heading-components)) org-todo-keywords-1)))
+    (save-excursion
+      (while (and (not is-subproject) (org-up-heading-safe))
         (when (member (nth 2 (org-heading-components)) org-todo-keywords-1)
-          (setq parent-task (point))))
-      (if parent-task
-          (org-with-point-at parent-task
-        (org-clock-in))
-        (when bh/keep-clock-running
-          (bh/clock-in-default-task)))))))
-
-  (defvar bh/organization-task-id "e22cb8bf-07c7-408b-8f60-ff3aadac95e4")
-
-  (defun bh/clock-in-organization-task-as-default ()
-    (interactive)
-    (org-with-point-at (org-id-find bh/organization-task-id 'marker)
-      (org-clock-in '(16))))
-
-  (defun bh/clock-out-maybe ()
-    (when (and bh/keep-clock-running
-           (not org-clock-clocking-in)
-           (marker-buffer org-clock-default-task)
-           (not org-clock-resolving-clocks-due-to-idleness))
-      (bh/clock-in-parent-task)))
-
-  ; (add-hook 'org-clock-out-hook 'bh/clock-out-maybe 'append)
-
-  (require 'org-id)
-  (defun bh/clock-in-task-by-id (id)
-    "Clock in a task by id"
-    (org-with-point-at (org-id-find id 'marker)
-      (org-clock-in nil)))
-
-  (defun bh/clock-in-last-task (arg)
-    "Clock in the interrupted task if there is one
-  Skip the default task and get the next one.
-  A prefix arg forces clock in of the default task."
-    (interactive "p")
-    (let ((clock-in-to-task
-       (cond
-        ((eq arg 4) org-clock-default-task)
-        ((and (org-clock-is-active)
-          (equal org-clock-default-task (cadr org-clock-history)))
-         (caddr org-clock-history))
-        ((org-clock-is-active) (cadr org-clock-history))
-        ((equal org-clock-default-task (car org-clock-history)) (cadr org-clock-history))
-        (t (car org-clock-history)))))
-      (widen)
-      (org-with-point-at clock-in-to-task
-    (org-clock-in nil))))
-
-
-  (defun org-export-to-ods ()
-    (interactive)
-    (let ((csv-file "data.csv"))
-      (org-table-export csv-file "orgtbl-to-csv")
-      (org-odt-convert csv-file "ods" 'open)))
-
-  ; allow for zero-width-space to be a break in regexp too
-  ; (setcar org-emphasis-regexp-components "​ [:space:] \t('\"{")
-  ; (setcar (nthcdr 1 org-emphasis-regexp-components) "​ [:space:]- \t.,:!?;'\")}\\")
-  ; (org-set-emph-re 'org-emphasis-regexp-components org-emphasis-regexp-components)
-
-  ;; support inserting screen shots
-  (defun my/org-insert-screenshot ()
-    "Take a screenshot into a time stamped unique-named file in the
-  same directory as the org-buffer and insert a link to this file."
-    (interactive)
-    (defvar my/org-insert-screenshot/filename)
-    (setq my/org-insert-screenshot/filename
-      (read-file-name
-       "Screenshot to insert: "
-       nil
-       (concat (buffer-file-name) "_" (format-time-string "%Y%m%d_%H%M%S") ".png")
-       )
-      )
-    (call-process "import" nil nil nil my/org-insert-screenshot/filename)
-    (insert (concat "[[" my/org-insert-screenshot/filename "]]"))
-    (org-display-inline-images))
-
-  (defun my/fix-inline-images ()
-    (when org-inline-image-overlays
-      (org-redisplay-inline-images)))
-
-  (add-hook 'org-babel-after-execute-hook 'my/fix-inline-images)
-
-  ;; use xelatex to preview with imagemagick
-  (add-to-list 'org-preview-latex-process-alist
-           '(xelateximagemagick
-        :programs ("xelatex" "convert")
-        :description "pdf > png"
-        :message "you need to install xelatex and imagemagick"
-        :use-xcolor t
-        :image-input-type "pdf"
-        :image-output-type "png"
-        :image-size-adjust (1.0 . 1.0)
-        :latex-compiler ("xelatex -interaction nonstopmode -output-directory %o %f")
-        :image-converter ("convert -density %D -trim -antialias %f -quality 100 %O"))
-           )
-  ;; use xelatex by default
-  (setq org-preview-latex-default-process 'xelateximagemagick)
-
-  ; from http://orgmode.org/Changes.html
-  (defun my/org-repair-property-drawers ()
-    "Fix properties drawers in current buffer.
-   Ignore non Org buffers."
-    (interactive)
-    (when (eq major-mode 'org-mode)
-      (org-with-wide-buffer
-       (goto-char (point-min))
-       (let ((case-fold-search t)
-         (inline-re (and (featurep 'org-inlinetask)
-                 (concat (org-inlinetask-outline-regexp)
-                     "END[ \t]*$"))))
-     (org-map-entries
-      (lambda ()
-        (unless (and inline-re (org-looking-at-p inline-re))
-          (save-excursion
-        (let ((end (save-excursion (outline-next-heading) (point))))
-          (forward-line)
-          (when (org-looking-at-p org-planning-line-re) (forward-line))
-          (when (and (< (point) end)
-                 (not (org-looking-at-p org-property-drawer-re))
-                 (save-excursion
-                   (and (re-search-forward org-property-drawer-re end t)
-                    (eq (org-element-type
-                     (save-match-data (org-element-at-point)))
-                    'drawer))))
-            (insert (delete-and-extract-region
-                 (match-beginning 0)
-                 (min (1+ (match-end 0)) end)))
-            (unless (bolp) (insert "\n"))))))))))))
+          (setq is-subproject t))))
+    (and is-a-task is-subproject)))
+
+
+(defun bh/clock-in-to-next (kw)
+  "Switch a task from TODO to NEXT when clocking in.
+Skips capture tasks, projects, and subprojects.
+Switch projects and subprojects from NEXT back to TODO"
+  (when (not (and (boundp 'org-capture-mode) org-capture-mode))
+    (cond
+     ((and (member (org-get-todo-state) (list "TODO"))
+       (bh/is-task-p))
+  "NEXT")
+     ((and (member (org-get-todo-state) (list "NEXT"))
+       (bh/is-project-p))
+  "TODO"))))
+
+(defun bh/punch-in (arg)
+  "Start continuous clocking and set the default task to the
+selected task.  If no task is selected set the Organization task
+as the default task."
+  (interactive "p")
+  (setq bh/keep-clock-running t)
+  (if (equal major-mode 'org-agenda-mode)
+  ;;
+  ;; We're in the agenda
+  ;;
+  (let* ((marker (org-get-at-bol 'org-hd-marker))
+         (tags (org-with-point-at marker (org-get-tags-at))))
+    (if (and (eq arg 4) tags)
+        (org-agenda-clock-in '(16))
+      (bh/clock-in-organization-task-as-default)))
+    ;;
+    ;; We are not in the agenda
+    ;;
+    (save-restriction
+  (widen)
+  ; Find the tags on the current task
+  (if (and (equal major-mode 'org-mode) (not (org-before-first-heading-p)) (eq arg 4))
+      (org-clock-in '(16))
+    (bh/clock-in-organization-task-as-default)))))
+
+(defun bh/punch-out ()
+  (interactive)
+  (setq bh/keep-clock-running nil)
+  (when (org-clock-is-active)
+    (org-clock-out))
+  (org-agenda-remove-restriction-lock))
+
+(defun bh/clock-in-default-task ()
+  (save-excursion
+    (org-with-point-at org-clock-default-task
+  (org-clock-in))))
+
+(defun bh/clock-in-parent-task ()
+  "Move point to the parent (project) task if any and clock in"
+  (let ((parent-task))
+    (save-excursion
+  (save-restriction
+    (widen)
+    (while (and (not parent-task) (org-up-heading-safe))
+      (when (member (nth 2 (org-heading-components)) org-todo-keywords-1)
+        (setq parent-task (point))))
+    (if parent-task
+        (org-with-point-at parent-task
+      (org-clock-in))
+      (when bh/keep-clock-running
+        (bh/clock-in-default-task)))))))
+
+(defvar bh/organization-task-id "e22cb8bf-07c7-408b-8f60-ff3aadac95e4")
+
+(defun bh/clock-in-organization-task-as-default ()
+  (interactive)
+  (org-with-point-at (org-id-find bh/organization-task-id 'marker)
+    (org-clock-in '(16))))
+
+(defun bh/clock-out-maybe ()
+  (when (and bh/keep-clock-running
+         (not org-clock-clocking-in)
+         (marker-buffer org-clock-default-task)
+         (not org-clock-resolving-clocks-due-to-idleness))
+    (bh/clock-in-parent-task)))
+
+; (add-hook 'org-clock-out-hook 'bh/clock-out-maybe 'append)
+
+(require 'org-id)
+(defun bh/clock-in-task-by-id (id)
+  "Clock in a task by id"
+  (org-with-point-at (org-id-find id 'marker)
+    (org-clock-in nil)))
+
+(defun bh/clock-in-last-task (arg)
+  "Clock in the interrupted task if there is one
+Skip the default task and get the next one.
+A prefix arg forces clock in of the default task."
+  (interactive "p")
+  (let ((clock-in-to-task
+     (cond
+      ((eq arg 4) org-clock-default-task)
+      ((and (org-clock-is-active)
+        (equal org-clock-default-task (cadr org-clock-history)))
+       (caddr org-clock-history))
+      ((org-clock-is-active) (cadr org-clock-history))
+      ((equal org-clock-default-task (car org-clock-history)) (cadr org-clock-history))
+      (t (car org-clock-history)))))
+    (widen)
+    (org-with-point-at clock-in-to-task
+  (org-clock-in nil))))
+
+
+(defun org-export-to-ods ()
+  (interactive)
+  (let ((csv-file "data.csv"))
+    (org-table-export csv-file "orgtbl-to-csv")
+    (org-odt-convert csv-file "ods" 'open)))
+
+; allow for zero-width-space to be a break in regexp too
+; (setcar org-emphasis-regexp-components "​ [:space:] \t('\"{")
+; (setcar (nthcdr 1 org-emphasis-regexp-components) "​ [:space:]- \t.,:!?;'\")}\\")
+; (org-set-emph-re 'org-emphasis-regexp-components org-emphasis-regexp-components)
+
+;; support inserting screen shots
+(defun my/org-insert-screenshot ()
+  "Take a screenshot into a time stamped unique-named file in the
+same directory as the org-buffer and insert a link to this file."
+  (interactive)
+  (defvar my/org-insert-screenshot/filename)
+  (setq my/org-insert-screenshot/filename
+    (read-file-name
+     "Screenshot to insert: "
+     nil
+     (concat (buffer-file-name) "_" (format-time-string "%Y%m%d_%H%M%S") ".png")
+     )
+    )
+  (call-process "import" nil nil nil my/org-insert-screenshot/filename)
+  (insert (concat "[[" my/org-insert-screenshot/filename "]]"))
+  (org-display-inline-images))
+
+(defun my/fix-inline-images ()
+  (when org-inline-image-overlays
+    (org-redisplay-inline-images)))
+
+(add-hook 'org-babel-after-execute-hook 'my/fix-inline-images)
+
+;; use xelatex to preview with imagemagick
+(add-to-list 'org-preview-latex-process-alist
+         '(xelateximagemagick
+      :programs ("xelatex" "convert")
+      :description "pdf > png"
+      :message "you need to install xelatex and imagemagick"
+      :use-xcolor t
+      :image-input-type "pdf"
+      :image-output-type "png"
+      :image-size-adjust (1.0 . 1.0)
+      :latex-compiler ("xelatex -interaction nonstopmode -output-directory %o %f")
+      :image-converter ("convert -density %D -trim -antialias %f -quality 100 %O"))
+         )
+;; use xelatex by default
+(setq org-preview-latex-default-process 'xelateximagemagick)
+
+; from http://orgmode.org/Changes.html
+(defun my/org-repair-property-drawers ()
+  "Fix properties drawers in current buffer.
+ Ignore non Org buffers."
+  (interactive)
+  (when (eq major-mode 'org-mode)
+    (org-with-wide-buffer
+     (goto-char (point-min))
+     (let ((case-fold-search t)
+       (inline-re (and (featurep 'org-inlinetask)
+               (concat (org-inlinetask-outline-regexp)
+                   "END[ \t]*$"))))
+   (org-map-entries
+    (lambda ()
+      (unless (and inline-re (org-looking-at-p inline-re))
+        (save-excursion
+      (let ((end (save-excursion (outline-next-heading) (point))))
+        (forward-line)
+        (when (org-looking-at-p org-planning-line-re) (forward-line))
+        (when (and (< (point) end)
+               (not (org-looking-at-p org-property-drawer-re))
+               (save-excursion
+                 (and (re-search-forward org-property-drawer-re end t)
+                  (eq (org-element-type
+                   (save-match-data (org-element-at-point)))
+                  'drawer))))
+          (insert (delete-and-extract-region
+               (match-beginning 0)
+               (min (1+ (match-end 0)) end)))
+          (unless (bolp) (insert "\n"))))))))))))
 
 #+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"))
-              )
-    )
+(use-package calfw
+  :ensure f
+  )
+(use-package calfw-org
+  :ensure f
+  )
+(use-package org-gcal
+  :if (file-readable-p "~/.hide/org_gcal.el")
+  :ensure f
+  :config '((if (file-readable-p "~/.hide/org_gcal.el")
+                (load-file "~/.hide/org_gcal.el"))
+            )
+  )
 #+END_SRC
 ** appt integration
 #+BEGIN_SRC emacs-lisp
@@ -2041,8 +2468,7 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
 * Debian
 ** debian-changelog
 #+BEGIN_SRC emacs-lisp
-  (use-package debian-changelog
-    :ensure f
+  (use-package debian-changelog-mode
     :mode "debian/changelog"
     :config
     (setq debian-changelog-mailing-address "don@debian.org")
@@ -2055,17 +2481,20 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
   (setq case-fold-search t)
   (setq confirm-kill-emacs (quote y-or-n-p))
   (setq cperl-lazy-help-time nil)
-  (display-time)
-  (setq display-time-24hr-format t)
-  (setq display-time-day-and-date t)
-  (display-time-mode 1)
+#+END_SRC
+** Turn on fontlock and icomplete
+#+BEGIN_SRC emacs-lisp
   (global-font-lock-mode 1)
   (icomplete-mode 1)
   (setq log-edit-keep-buffer t)
+#+END_SRC
+** Set mail User agent
+#+BEGIN_SRC emacs-lisp
   (setq mail-user-agent (quote sendmail-user-agent))
-  (setq markdown-enable-math t)
-  (setq markdown-follow-wiki-link-on-enter nil)
   (setq mutt-alias-file-list (quote ("~/.mutt/aliases" "~/.mail_aliases")))
+#+END_SRC
+** PS Printing
+#+BEGIN_SRC emacs-lisp
   (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)))
@@ -2073,19 +2502,20 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
   (setq ps-print-footer t)
   (setq ps-print-footer-frame nil)
   (setq ps-print-only-one-header t)
+#+END_SRC
+** Only single spacing on sentences
+#+BEGIN_SRC emacs-lisp
   (setq sentence-end "[.?!][]\"')]*\\($\\|   \\| \\)[    
   ]*")
   (setq sentence-end-double-space nil)
   ; enable matching parenthesis
+#+END_SRC
+** Display paren mode
+#+BEGIN_SRC emacs-lisp
   (show-paren-mode 1)
-  (tool-bar-mode -1)
-  (setq user-mail-address "don@donarmstrong.com")
-  (setq vc-delete-logbuf-window nil)
-  (setq vc-follow-symlinks t)
+  (setq show-paren-delay 0.2)
 
-  ;; use git before SVN; use CVS earlier, because I have CVS
-  ;; repositories inside of git directories
-  (setq vc-handled-backends (quote (CVS Git RCS SVN SCCS Bzr Hg Mtn Arch)))
+  (setq user-mail-address "don@donarmstrong.com")
 
   ;; switch back to the old primary selection method
   (setq x-select-enable-clipboard nil)
@@ -2095,20 +2525,6 @@ 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)
-
-  (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)
 
@@ -2145,20 +2561,34 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
 
   (column-number-mode t)
  
-  ; 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)
-
-  (desktop-load-default)
-  (desktop-read)
+#+END_SRC
+** Desktop-save-mode
+If the envvar EMACS_SERVER_NAME is set, consider this a separate
+emacs, and use a different desktop file to restore history
+#+BEGIN_SRC emacs-lisp
+  (use-package desktop
+    :demand
+    :config
+    (setq desktop-base-file-name
+          (convert-standard-filename
+           (concat ".emacs"
+                   (or (getenv "EMACS_SERVER_NAME")
+                       "")
+                   ".desktop")
+           ))
+    (setq desktop-base-lock-name
+          (convert-standard-filename
+           (concat desktop-base-file-name
+                   ".lock")))
+    (setq desktop-auto-save-timeout 60)
+    (setq desktop-restore-eager 5)
+    (setq desktop-lazy-verbose nil)
+    (desktop-save-mode 1)
+    ; (desktop-read)
+  )
+#+END_SRC
+** Misc (Uncharacterized)
+#+BEGIN_SRC emacs-lisp
   '(icomplete-mode on)
   (custom-set-faces
    ;; custom-set-faces was added by Custom.
@@ -2200,30 +2630,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)
-
-  ; 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)
-
-  ; 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 ()
@@ -2331,10 +2737,16 @@ From http://julien.danjou.info/projects/emacs-packages#rainbow-mode, this colori
   (ad-activate 'ask-user-about-supersession-threat)
 #+END_SRC
 
-* Server
+* Start Server
 #+BEGIN_SRC emacs-lisp
-  (unless (server-running-p)
-  (server-start))
+  (use-package server
+    :config
+    (setq server-name
+          (or (getenv "EMACS_SERVER_NAME")
+              "server"))
+    (unless (server-running-p)
+      (global-set-key "\C-xp" 'server-edit)
+      (server-start)))
 #+END_SRC