]> git.donarmstrong.com Git - lib.git/commitdiff
adjust indentation
authorDon Armstrong <don@donarmstrong.com>
Sun, 9 Jun 2019 04:03:03 +0000 (21:03 -0700)
committerDon Armstrong <don@donarmstrong.com>
Sun, 9 Jun 2019 04:03:03 +0000 (21:03 -0700)
emacs_el/configuration/don-configuration.org

index 51b159eb8f56c267657332e4908099d5e75b400a..478cff1c298aa4f559105a79147b46e8032b23e5 100644 (file)
@@ -1059,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
@@ -1999,386 +2001,389 @@ 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)))
+        (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)
+        (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)
+(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're in the agenda
+    ;; We are not 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)))))))
+  (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))))
 
-  (defvar bh/organization-task-id "e22cb8bf-07c7-408b-8f60-ff3aadac95e4")
+(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 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)
+(defun my/fix-inline-images ()
+  (when org-inline-image-overlays
+    (org-redisplay-inline-images)))
 
-  ; 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"))))))))))))
+(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