updates
authorJoerg Jaspert <joerg@debian.org>
Sat, 26 Aug 2017 13:39:18 +0000 (15:39 +0200)
committerJoerg Jaspert <joerg@debian.org>
Sat, 26 Aug 2017 13:39:18 +0000 (15:39 +0200)
.config/systemd/user/emacs.service
.emacs.d/config/customized.el
.emacs.d/config/emacs.org
.emacs.d/elisp/local/ganneff-gnus.el
.emacs.d/init.el
.emacs.d/initjj.org

index b65b820..491a17d 100644 (file)
@@ -1,7 +1,7 @@
 [Unit]
 Description=Emacs: the extensible, self-documenting text editor
 PartOf=xlogin.target
-ConditionHost=|delenn
+ConditionHost=|delenn.ganneff.de
 ConditionHost=|linwsa03
 Requires=graphical-session.target
 
index 0e1bdb7..b5c5538 100644 (file)
        (quote lacarte-execute-menu-command))))))
  '(magit-commit-arguments (quote ("--verbose")))
  '(midnight-mode t nil (midnight))
+ '(mml-secure-key-preferences
+   (quote
+    ((OpenPGP
+      (sign)
+      (encrypt
+       ("joerg@ganneff.de" "FBFABDB541B5DC955BD9BA6EDB16CF5BB12525C4")))
+     (CMS
+      (sign)
+      (encrypt)))))
  '(mouse-wheel-follow-mouse t)
  '(mouse-yank-at-point t)
  '(mu4e-headers-fields
     (("inbox" . "tag:inbox")
      ("unread" . "tag:unread")
      ("personal unread" . "tag:inbox AND (to:joerg@ganneff.de OR to:joerg@debian.org OR to:joerg@debconf.org)"))))
+ '(package-selected-packages
+   (quote
+    (bbdb-hooks notmuch validate use-package paradox keyfreq)))
  '(randomsig-files (quote randomsig-search-sigfiles))
  '(randomsig-static-string "bye, Joerg
 ")
+ '(safe-local-variable-values (quote ((eval hide-body))))
  '(session-use-package t nil (session))
  '(sieve-manage-default-port 4190)
  '(tab-width 8)
  '(text-mode-hook (quote (turn-on-auto-fill text-mode-hook-identify)))
- '(tool-bar-mode nil nil (tool-bar))
  '(vc-handled-backends (quote (SVN Git))))
 
 (custom-set-faces
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
- '(diff-added ((((background dark)) (:foreground "#FFFF9B9BFFFF")) (t (:foreground "DarkGreen"))))
- '(diff-changed ((((background dark)) (:foreground "Yellow")) (t (:foreground "MediumBlue"))))
- '(diff-context ((((background dark)) (:foreground "White")) (t (:foreground "Black"))))
- '(diff-file-header ((((background dark)) (:foreground "Cyan" :background "Black")) (t (:foreground "Red" :background "White"))))
- '(diff-header ((((background dark)) (:foreground "Cyan")) (t (:foreground "Red"))))
- '(diff-hunk-header ((((background dark)) (:foreground "Black" :background "#05057F7F8D8D")) (t (:foreground "White" :background "Salmon"))))
- '(diff-index ((((background dark)) (:foreground "Magenta")) (t (:foreground "Green"))))
- '(diff-nonexistent ((((background dark)) (:foreground "#FFFFFFFF7474")) (t (:foreground "DarkBlue"))))
- '(diff-removed ((((background dark)) (:foreground "#7474FFFF7474")) (t (:foreground "DarkMagenta")))))
+ )
index c9df181..f9a0f1a 100644 (file)
@@ -4,15 +4,90 @@
 #+STARTUP:     align fold nodlcheck hidestars oddeven lognotestate
 #+SETUPFILE:   ~/.emacs.d/elisp/org-templates/level-0.org
 #+LATEX_CMD:   xelatex
+#+PROPERTY: header-args    :tangle yes
+# @compile: (message "FOO")
+# @compile: (byte-compile-file "config.el")
+
+* Base settings, Stuff without an extra package
+** Configure package loading
+That is, most of my emacs packages are taken from Melpa/Elpa/Marmalade, so configure
+emacs that it can fetch them if needed.
+And while compiling the .emacs.el we need use-package, but we don't want it during
+normal runtime.
+ #+BEGIN_SRC emacs-lisp
+ ;; Disable package initialize after us.  We either initialize it
+ ;; anyway in case of interpreted .emacs, or we don't want slow
+ ;; initizlization in case of byte-compiled .emacs.elc.
+ (setq package-enable-at-startup nil)
+
+ ;; Ask package.el to not add (package-initialize) to .emacs.
+ (setq package--init-file-ensured t)
 
-* Basic config
-** General functions
-:PROPERTIES:
-:ID: b6e6cf73-9802-4a7b-bd65-fdb6f9745319
-:END:
-The following functions are used throughout my config, and so I load
-them first.
-*** safe-load
+  (require 'package)
+  (setq package-user-dir (expand-file-name "elpa" jj-elisp-dir))
+  (dolist (source '(("melpa" . "http://melpa.org/packages/")
+                    ("melpa-stable" . "http://stable.melpa.org/packages/")
+                    ("marmalade" . "http://marmalade-repo.org/packages/")
+                    ("elpy"         . "http://jorgenschaefer.github.io/packages/")
+                    ("elpa" . "http://elpa.gnu.org/packages/")
+                   ))
+    (add-to-list 'package-archives source t))
+  (package-initialize)
+
+
+ ;; set use-package-verbose to t for interpreted .emacs,
+ ;; and to nil for byte-compiled .emacs.elc
+ (eval-and-compile
+   (setq use-package-verbose (not (bound-and-true-p byte-compile-current-file))))
+
+ ;; Add the macro generated list of package.el loadpaths to load-path.
+ (mapc #'(lambda (add) (add-to-list 'load-path add))
+   (eval-when-compile
+     (package-initialize)
+     ;; Install use-package if not installed yet.
+     (unless (package-installed-p 'use-package)
+          (package-refresh-contents)
+          (package-install 'use-package))
+     (let ((package-user-dir-real (file-truename package-user-dir)))
+       ;; The reverse is necessary, because outside we mapc
+       ;; add-to-list element-by-element, which reverses.
+       (nreverse (apply #'nconc
+            ;; Only keep package.el provided loadpaths
+            (mapcar #'(lambda (path)
+                    (if (string-prefix-p package-user-dir-real path)
+                    (list path)
+                      nil))
+               load-path))))))
+
+ (eval-when-compile
+   (require 'use-package))
+ (require 'bind-key)
+ (require 'diminish)
+ #+END_SRC
+
+** Tangle on save
+Tangle my config on save, so next startup shouldn't need to do it.
+
+#+BEGIN_SRC emacs-lisp
+;; This is GPLv2. If you still don't know the details, read
+;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html
+;; Taken from https://bitbucket.org/holgerschurig/emacsconf/src/588093924ef8c1d44e7c11b9612f5aad7f6558ce/config.org?at=master
+(defun my-tangle-config-org-hook-func ()
+  (when (string-prefix-p "emacs.org" (buffer-name))
+       (let ((orgfile (expand-file-name "emacs.org" (file-name-directory (or load-file-name (buffer-file-name)))))
+                 (elfile (expand-file-name "emacs.el" (file-name-directory (or load-file-name (buffer-file-name))))))
+         (my-tangle-config-org orgfile elfile))))
+(add-hook 'after-save-hook #'my-tangle-config-org-hook-func)
+#+END_SRC
+
+** Schema validation for the config
+[2016-10-30 Sun 17:15]
+#+BEGIN_SRC emacs-lisp
+(use-package validate
+  :ensure t)
+#+END_SRC
+
+** safe-load
 safe-load does not break emacs initialization, should a file be
 unreadable while emacs boots up.
 #+BEGIN_SRC emacs-lisp
@@ -37,15 +112,27 @@ unreadable while emacs boots up.
   (if (string-equal safe-load-error-list "") ()
                (message (concat "****** error loading: " safe-load-error-list))))
 #+END_SRC
-*** Local autoloads
+** Local autoloads
 I have some stuff put away in my local dir. I don't want to load it all
 at startup time, so it is using the autoload feature. For that to work
 load the loaddefs, so autoload knows where to grab stuff
 #+BEGIN_SRC emacs-lisp
-(safe-load (concat jj-elisp-dir "/tiny/loaddefs.el"))
+;(safe-load (concat jj-elisp-dir "/tiny/loaddefs.el"))
 (safe-load (concat jj-elisp-local-dir "/loaddefs.el"))
 #+END_SRC
-*** add-auto-mode
+** hook-into-modes
+[2014-05-20 Tue 22:36]
+#+BEGIN_SRC emacs-lisp
+;; (defmacro hook-into-modes (func modes)
+;;   `(dolist (mode-hook ,modes)
+;;      (add-hook mode-hook ,func)))
+
+(defmacro hook-into-modes (function mode-hooks)
+  "Add FUNCTION to hooks in MODE-HOOKS."
+  `(dolist (hook ,mode-hooks)
+     (add-hook hook ,function)))
+#+END_SRC
+** add-auto-mode
 Handier way to add modes to auto-mode-alist
 #+BEGIN_SRC emacs-lisp
 (defun add-auto-mode (mode &rest patterns)
@@ -53,59 +140,8 @@ Handier way to add modes to auto-mode-alist
   (dolist (pattern patterns)
     (add-to-list 'auto-mode-alist (cons pattern mode))))
 #+END_SRC
-*** hook-into-modes
-[2014-05-20 Tue 22:36]
-#+BEGIN_SRC emacs-lisp
-(defmacro hook-into-modes (func modes)
-  `(dolist (mode-hook ,modes)
-     (add-hook mode-hook ,func)))
-#+END_SRC
-
-*** elpa
-The Emacs Lisp Package Archive contains things I want.
-#+BEGIN_SRC emacs-lisp
-(when (> emacs-major-version 23)
-  (require 'package)
-  (setq package-user-dir (expand-file-name "elpa" jj-elisp-dir))
-  (dolist (source '(("melpa" . "http://melpa.org/packages/")
-                    ("melpa-stable" . "http://stable.melpa.org/packages/")
-                    ("marmalade" . "http://marmalade-repo.org/packages/")
-                    ("elpy"         . "http://jorgenschaefer.github.io/packages/")
-                    ("elpa" . "http://elpa.gnu.org/packages/")
-))
-    (add-to-list 'package-archives source t))
-  (package-initialize)
 
-#+END_SRC
-And Paradox is a nicer interface for it
-#+BEGIN_SRC emacs-lisp
-(use-package paradox
-  :ensure t
-  :commands (paradox-list-packages paradox-install paradox-upgrade-packages)
-  :config
-  (progn
-    ;(paradox-enable)
-    (setq paradox-github-token t)
-    ))
-#+END_SRC
-*** config helpers use-package/bind-key
-Helpers for the config
-https://github.com/jwiegley/use-package
-#+BEGIN_SRC emacs-lisp
-(unless (package-installed-p 'use-package)
-  (package-refresh-contents)
-  (package-install 'use-package)))
-(require 'use-package)
-(require 'bind-key)
-#+END_SRC
-*** Schema validation for the config
-[2016-10-30 Sun 17:15]
-#+BEGIN_SRC emacs-lisp
-(use-package validate
-  :ensure t)
-#+END_SRC
-** Path settings
-*** Load path
+** Load path
 We need to define the load-path. As I have lots of things I add
 locally, its getting a few entries. I disliked the repeated
 /add-to-list/ lines, so I now just take all subdirectories of
@@ -123,10 +159,10 @@ jj-elisp-dir and add them.
    ))
 #+END_SRC
 
-*** Info path
+** Info path
 Help emacs to find the info files
 #+BEGIN_SRC emacs-lisp :tangle yes
-(validate-setq Info-directory-list (cons jj-info-dir
+(setq Info-directory-list (cons jj-info-dir
                                          '("/usr/local/share/info/"
                                            "/usr/local/info/"
                                            "/usr/local/gnu/info/"
@@ -138,10 +174,10 @@ Help emacs to find the info files
                                            "/usr/share/info/emacs-23"
                                            "/usr/share/info/"
                                            "/usr/share/info/")))
-(validate-setq Info-default-directory-list
+(setq Info-default-directory-list
                (cons jj-info-dir Info-default-directory-list))
 #+END_SRC
-*** Exec path from PATH Environment
+** Exec path from PATH Environment
 [2017-03-11 Sat 20:08]
 #+BEGIN_SRC emacs-lisp
 (defun set-exec-path-from-shell-PATH ()
@@ -150,176 +186,172 @@ Help emacs to find the info files
                           ""
                           (shell-command-to-string "$SHELL --login -i -c 'echo $PATH'"))))
     (setenv "PATH" path-from-shell)
-    (setq eshell-path-env path-from-shell) ; for eshell users
     (setq exec-path (split-string path-from-shell path-separator))))
 
 (when window-system (set-exec-path-from-shell-PATH))
 #+END_SRC
-** Interface related
-*** General stuff
-:PROPERTIES:
-:ID: 0a1560d9-7e55-47ab-be52-b3a8b8eea4aa
-:END:
-I dislike the startup message
-#+BEGIN_SRC emacs-lisp
-(validate-setq inhibit-splash-screen t)
-(validate-setq inhibit-startup-message t)
-#+END_SRC
-
-Usually I want the lines to break at 72 characters.
-#+BEGIN_SRC emacs-lisp
-(validate-setq fill-column 72)
-#+END_SRC
-
-And it is nice to have a final newline in files.
-(Now off, ethan-wspace is doing it better).
-#+BEGIN_SRC emacs-lisp
-(validate-setq require-final-newline nil)
-(validate-setq mode-require-final-newline nil)
-#+END_SRC
-
-After I typed 300 characters or took a break for more than a minute it
-would be nice of emacs to save whatever I am on in one of its auto-save
-backups. See [[info:emacs#Auto%20Save%20Control][info:emacs#Auto Save Control]] for more details.
-#+BEGIN_SRC emacs-lisp
-(validate-setq auto-save-interval 300)
-(validate-setq auto-save-timeout   60)
-#+END_SRC
-
-Set my full name and my default mail address - for whatever wants to use
-it later. Also, I am using gnus.
-#+BEGIN_SRC emacs-lisp
-(validate-setq user-full-name "Joerg Jaspert")
-(validate-setq user-mail-address "joerg@ganneff.de")
-(validate-setq mail-user-agent (quote gnus-user-agent))
-#+END_SRC
-
-My default mail server. Well, simply a localhost, I have a forwarder that
-puts mail off the right way, no need for emacs to have any further
-knowledge here.
-#+BEGIN_SRC emacs-lisp
-(use-package smtpmail
-  :ensure t
-  :config
-  (progn
-    (validate-setq smtpmail-default-smtp-server "localhost")
-    (validate-setq smtpmail-smtp-server "localhost")))
-#+END_SRC
-
-Enable automatic handling of compressed files.
-#+BEGIN_SRC emacs-lisp
-(auto-compression-mode 1)
-#+END_SRC
-
-Emacs forbids a certain set of commands, as they can be very confusing
-for new users. Enable them.
-#+BEGIN_SRC emacs-lisp
-(put 'narrow-to-region 'disabled nil)
-(put 'narrow-to-page   'disabled nil)
-(put 'narrow-to-defun  'disabled nil)
-(put 'upcase-region    'disabled nil)
-(put 'downcase-region  'disabled nil)
-#+END_SRC
-
-Recenter in a different order - first go to top, then middle, then
-bottom
-#+BEGIN_SRC emacs-lisp
-(validate-setq recenter-positions '(top middle bottom))
-#+END_SRC
-*** Look / Theme
-I've tried various different fonts and while I like the Terminus font
-most for my shells, in Emacs Inconsolata clearly wins.
-#+BEGIN_SRC emacs-lisp
-(set-frame-font "Inconsolata-14")
-#+END_SRC
-
-I always use dark backgrounds, so tell Emacs about it. No need to
-guess around.
-#+BEGIN_SRC emacs-lisp
-(setq-default frame-background-mode jj-color-style)
-#+END_SRC
-
-And I always liked dark backgrounds with colors setup for them. So I
-switched through multiple themes doing it in emacs too, but never
-entirely liked it. Until I found solarized, which is now not only my
-emacs theme, but also for most of my other software too, especially my
-shell. Consistent look is great.
-#+BEGIN_SRC emacs-lisp :tangle no
-(if (or (> emacs-major-version 23) (boundp 'custom-theme-load-path))
-    (progn
-      (defun jj-init-theme ()
-        (interactive)
-        (if (eq jj-color-style 'dark )(load-theme 'solarized-dark t)
-          (load-theme 'solarized-light t))
-        (set-face-attribute 'org-date nil :underline nil)
-        (message "Initializing theme solarized-dark")
-        )
-      (add-to-list 'custom-theme-load-path jj-theme-dir)
-      (add-hook 'after-init-hook 'jj-init-theme)
-      )
-  (add-to-list 'load-path (expand-file-name "emacs-color-theme-solarized" jj-elisp-dir))
-  (require 'color-theme-solarized)
-  (color-theme-solarized-dark)
-)
-#+END_SRC
-#+BEGIN_SRC emacs-lisp
-(use-package color-theme-solarized
-  :ensure solarized-theme
-  :init
-  (progn
-    (defun jj-init-theme ()
-      (interactive)
 
-      (if (eq jj-color-style 'dark )(load-theme 'solarized-dark t)
-        (load-theme 'solarized-light t))
-      (set-face-attribute 'org-date nil :underline nil)
-      (message "Initializing theme solarized-dark")
-      )
+** General stuff
+   :PROPERTIES:
+   :ID:       0a1560d9-7e55-47ab-be52-b3a8b8eea4aa
+   :END:
+
+*** Hide Startup message
+ I dislike the startup message
+ #+BEGIN_SRC emacs-lisp
+ (validate-setq inhibit-splash-screen t)
+ (validate-setq inhibit-startup-message t)
+ #+END_SRC
+
+*** Linebreak at 72
+ Usually I want the lines to break at 72 characters.
+ #+BEGIN_SRC emacs-lisp
+ (validate-setq fill-column 72)
+ #+END_SRC
+
+*** Require final newline
+ And it is nice to have a final newline in files.
+ #+BEGIN_SRC emacs-lisp
+ (validate-setq require-final-newline nil)
+ (validate-setq mode-require-final-newline nil)
+ #+END_SRC
+
+*** Autosave
+ After I typed 300 characters or took a break for more than a minute it
+ would be nice of emacs to save whatever I am on in one of its auto-save
+ backups. See [[info:emacs#Auto%20Save%20Control][info:emacs#Auto Save Control]] for more details.
+ #+BEGIN_SRC emacs-lisp
+ (validate-setq auto-save-interval 300)
+ (validate-setq auto-save-timeout   60)
+ #+END_SRC
+
+*** Name and mail settings
+ Set my full name and my default mail address - for whatever wants to use
+ it later. Also, I am using gnus.
+ #+BEGIN_SRC emacs-lisp
+ (validate-setq user-full-name "Joerg Jaspert")
+ (validate-setq user-mail-address "joerg@ganneff.de")
+ (validate-setq mail-user-agent (quote gnus-user-agent))
+ #+END_SRC
+
+*** Smtpmail
+ My default mail server. Well, simply a localhost, I have a forwarder that
+ puts mail off the right way, no need for emacs to have any further
+ knowledge here.
+ #+BEGIN_SRC emacs-lisp
+ (use-package smtpmail
+   :ensure t
+   :config
+   (progn
+     (validate-setq smtpmail-default-smtp-server "localhost")
+     (validate-setq smtpmail-smtp-server "localhost")))
+ #+END_SRC
+
+*** Compressed files
+ Enable automatic handling of compressed files.
+ #+BEGIN_SRC emacs-lisp
+ (auto-compression-mode 1)
+ #+END_SRC
+
+*** Advanced commands
+ Emacs forbids a certain set of commands, as they can be very confusing
+ for new users. Enable them.
+ #+BEGIN_SRC emacs-lisp
+ (put 'narrow-to-region 'disabled nil)
+ (put 'narrow-to-page   'disabled nil)
+ (put 'narrow-to-defun  'disabled nil)
+ (put 'upcase-region    'disabled nil)
+ (put 'downcase-region  'disabled nil)
+ #+END_SRC
+
+*** Adjust recenter
+ Recenter in a different order - first go to top, then middle, then
+ bottom
+ #+BEGIN_SRC emacs-lisp
+ (validate-setq recenter-positions '(top middle bottom))
+ #+END_SRC
+
+** Look / Theme
+*** Font
+ I've tried various different fonts and while I like the Terminus font
+ most for my shells, in Emacs Inconsolata clearly wins.
+ #+BEGIN_SRC emacs-lisp
+ (set-frame-font "Inconsolata-14")
+ #+END_SRC
+
+*** Background dark
+ I always use dark backgrounds, so tell Emacs about it. No need to
+ guess around.
+ #+BEGIN_SRC emacs-lisp
+ (setq-default frame-background-mode jj-color-style)
+ #+END_SRC
+
+*** Color theme
+ And I always liked dark backgrounds with colors setup for them. So I
+ switched through multiple themes doing it in emacs too, but never
+ entirely liked it. Until I found solarized, which is now not only my
+ emacs theme, but also for most of my other software too, especially my
+ shell. Consistent look is great.
+ #+BEGIN_SRC emacs-lisp
+ (use-package color-theme-solarized
+   :ensure solarized-theme
+   :init
+   (progn
+     (defun jj-init-theme ()
+       (interactive)
+
+       (if (eq jj-color-style 'dark )(load-theme 'solarized-dark t)
+         (load-theme 'solarized-light t))
+       (set-face-attribute 'org-date nil :underline nil)
+       (message "Initializing theme solarized-dark")
+       )
 
-      ;; ;; make the fringe stand out from the background
-      (setq solarized-distinct-fringe-background t)
+       ;; ;; make the fringe stand out from the background
+       (setq solarized-distinct-fringe-background t)
 
-      ;; ;; Don't change the font for some headings and titles
-      ;; (validate-setq solarized-use-variable-pitch nil)
+       ;; ;; Don't change the font for some headings and titles
+       ;; (validate-setq solarized-use-variable-pitch nil)
 
-      ;; ;; make the modeline high contrast
-      ;; (validate-setq solarized-high-contrast-mode-line t)
+       ;; ;; make the modeline high contrast
+       ;; (validate-setq solarized-high-contrast-mode-line nil)
 
-      ;; ;; Use less bolding
-      ;; (validate-setq solarized-use-less-bold t)
+       ;; ;; Use less bolding
+       ;; (validate-setq solarized-use-less-bold t)
 
-      ;; ;; Use more italics
-      ;; (validate-setq solarized-use-more-italic t)
+       ;; ;; Use more italics
+       ;; (validate-setq solarized-use-more-italic t)
 
-      ;; ;; Use less colors for indicators such as git:gutter, flycheck and similar
-      ;; (validate-setq solarized-emphasize-indicators nil)
+       ;; ;; Use less colors for indicators such as git:gutter, flycheck and similar
+       ;; (validate-setq solarized-emphasize-indicators nil)
 
-      ;; ;; Don't change size of org-mode headlines (but keep other size-changes)
-      ;; (validate-setq solarized-scale-org-headlines nil)
+       ;; ;; Don't change size of org-mode headlines (but keep other size-changes)
+       ;; (validate-setq solarized-scale-org-headlines nil)
 
-      ;; ;; Avoid all font-size changes
-      ;; (validate-setq solarized-height-minus-1 1)
-      ;; (validate-setq solarized-height-plus-1 1)
-      ;; (validate-setq solarized-height-plus-2 1)
-      ;; (validate-setq solarized-height-plus-3 1)
-      ;; (validate-setq solarized-height-plus-4 1)
-      (setq x-underline-at-descent-line t)
+       ;; ;; Avoid all font-size changes
+       ;; (validate-setq solarized-height-minus-1 1)
+       ;; (validate-setq solarized-height-plus-1 1)
+       ;; (validate-setq solarized-height-plus-2 1)
+       ;; (validate-setq solarized-height-plus-3 1)
+       ;; (validate-setq solarized-height-plus-4 1)
+       (setq x-underline-at-descent-line t)
 
-    (add-to-list 'custom-theme-load-path jj-theme-dir)
-    (add-hook 'after-init-hook 'jj-init-theme)
-    (jj-init-theme)))
-#+END_SRC
+     (add-to-list 'custom-theme-load-path jj-theme-dir)
+     (add-hook 'after-init-hook 'jj-init-theme)
+     (jj-init-theme)))
+ #+END_SRC
 
-Make the fringe (gutter) smaller, the argument is a width in pixels (the default is 8)
-#+BEGIN_SRC emacs-lisp
-(if (fboundp 'fringe-mode)
-    (fringe-mode 8))
-#+END_SRC
+*** Fringe
+ Make the fringe (gutter) smaller, the argument is a width in pixels (the default is 8)
+ #+BEGIN_SRC emacs-lisp
+ (if (fboundp 'fringe-mode)
+     (fringe-mode 8))
+ #+END_SRC
 
-A bit more spacing between buffer lines
-#+BEGIN_SRC emacs-lisp
-(setq-default line-spacing 0.1)
-#+END_SRC
+*** Line spacing
+ A bit more spacing between buffer lines
+ #+BEGIN_SRC emacs-lisp
+ (setq-default line-spacing 0.1)
+ #+END_SRC
 *** Cursor changes
 [2013-04-21 So 20:54]
 I do not want my cursor to blink.
@@ -372,7 +404,7 @@ See [[https://bling.github.io/blog/2016/01/18/why-are-you-changing-gc-cons-thres
   (validate-setq gc-cons-threshold most-positive-fixnum))
 
 (defun my-minibuffer-exit-hook ()
-  (validate-setq gc-cons-threshold (* 100 1024 1024)))
+  (validate-setq gc-cons-threshold 16777216))
 
 (add-hook 'minibuffer-setup-hook #'my-minibuffer-setup-hook)
 (add-hook 'minibuffer-exit-hook #'my-minibuffer-exit-hook)
@@ -402,7 +434,7 @@ modeline in red as soon as you are over the defined limit.
   (progn
     (set-face-foreground 'modelinepos-column-warning "grey20")
     (set-face-background 'modelinepos-column-warning "red")
-    (validate-setq modelinepos-column-limit 72))
+    (setq modelinepos-column-limit 72))
   )
 #+END_SRC
 
@@ -448,50 +480,30 @@ character(s).
   ")
 
 ;  (add-hook 'after-change-major-mode-hook 'clean-mode-line)
-
 #+END_SRC
 Unfortunately icicles breaks this with the way it adds/removes itself,
 so take it our for now...
 
-*** Default mode
-Back when I started with text-mode. But nowadays I want default mode to
-be org-mode - it is just so much better to use. And does sensible things
-with many README files out there, and various other "crap" you get to
-read in emacs.
-#+BEGIN_SRC emacs-lisp :tangle yes
-(setq-default major-mode 'org-mode)
-#+END_SRC
-#+BEGIN_SRC emacs-lisp :tangle no
-(validate-setq initial-major-mode 'org-mode)
-#+END_SRC
+**** Default mode
+ Back when I started with text-mode. But nowadays I want default mode to
+ be org-mode - it is just so much better to use. And does sensible things
+ with many README files out there, and various other "crap" you get to
+ read in emacs.
+ #+BEGIN_SRC emacs-lisp :tangle yes
+ (setq-default major-mode 'org-mode)
+ #+END_SRC
 
-*** Shell
-[2013-04-23 Tue 16:43]
-Shell. zsh in my case.
-#+BEGIN_SRC emacs-lisp
-  (use-package shell
-    :commands (shell)
-    :defer t
-    :config
-    (progn
-       (validate-setq shell-file-name "zsh")
-       (validate-setq shell-command-switch "-c")
-       (validate-setq explicit-shell-file-name shell-file-name)
-       (setenv "SHELL" shell-file-name)
-       (setq explicit-sh-args '("-login" "-i"))
-       (add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
-       (validate-setq comint-scroll-to-bottom-on-input t)  ; always insert at the bottom
-       (validate-setq comint-scroll-to-bottom-on-output t) ; always add output at the bottom
-       (validate-setq comint-scroll-show-maximum-output t) ; scroll to show max possible output
-       (validate-setq comint-completion-autolist t)        ; show completion list when ambiguous
-       (validate-setq comint-input-ignoredups t)           ; no duplicates in command history
-       (validate-setq comint-completion-addsuffix t)       ; insert space/slash after file completion
-       (validate-setq comint-buffer-maximum-size 20000)    ; max lenght of the buffer in lines
-       (validate-setq comint-prompt-read-only nil)         ; if this is t, it breaks shell-command
-       ))
-#+END_SRC
-*** Keyboard related changes
-**** Cycle Spacing
+*** Don't query to kill processes at exit
+ [2016-10-03 Mo 14:05]
+ The variable at t (its default) lets emacs query before killing
+ processes when exiting.
+ #+BEGIN_SRC emacs-lisp :tangle yes
+   ;;(validate-setq confirm-kill-processes nil)
+   (validate-setq kill-buffer-query-functions
+                  (delq 'process-kill-buffer-query-function kill-buffer-query-functions))
+ #+END_SRC
+** Keyboard related changes
+*** Cycle Spacing
 This lets M-SPC cycle through spacing, that is
 1. replace all spaces with a single space
 2. remove all spaces
@@ -499,7 +511,7 @@ This lets M-SPC cycle through spacing, that is
 #+BEGIN_SRC emacs-lisp :tangle yes
 (bind-key "M-SPC" 'cycle-spacing)
 #+END_SRC
-**** Toggle/Cycle letter case
+*** Toggle/Cycle letter case
 [2015-05-22 Fri 22:42]
 
 This is from [[http://ergoemacs.org/emacs/modernization_upcase-word.html][Emacs: Toggle/Cycle Letter Case]]
@@ -534,7 +546,7 @@ whether there is text selection.
 #+BEGIN_SRC emacs-lisp :tangle yes
 (bind-key "M-c" 'toggle-letter-case)
 #+END_SRC
-**** Faster pop-to-mark command
+*** Faster pop-to-mark command
 [2015-12-22 Di 14:56]
 From [[http://endlessparentheses.com/faster-pop-to-mark-command.html?source=rss][Endless Parentheses]], a nice way to pop back in the marks.
 #+BEGIN_SRC emacs-lisp :tangle yes
@@ -546,7 +558,7 @@ From [[http://endlessparentheses.com/faster-pop-to-mark-command.html?source=rss]
       (when (= p (point)) ad-do-it))))
 (validate-setq set-mark-command-repeat-pop t)
 #+END_SRC
-**** Don't kill-buffer, kill-this-buffer instead
+*** Don't kill-buffer, kill-this-buffer instead
 From [[http://pragmaticemacs.com/emacs/dont-kill-buffer-kill-this-buffer-instead/][Pragmatic Emacs]]: By default C-x k runs the command kill-buffer
 which prompts you for which buffer you want to kill, defaulting to the
 current active buffer. I don’t know about you, but I rarely want to
@@ -556,51 +568,406 @@ prompting (unless there are unsaved changes).
 #+BEGIN_SRC emacs-lisp :tangle yes
 (global-set-key (kbd "C-x k") 'kill-this-buffer)
 #+END_SRC
-**** Bind sort-lines
+*** Bind sort-lines
 [2016-10-25 Di 13:38]
 Its really helpful, but doesn't seem to have a default keybinding, so
 make up our own.
 #+BEGIN_SRC emacs-lisp
 (bind-key "C-c C-s" 'sort-lines)
 #+END_SRC
-*** Don't query to kill processes at exit
-[2016-10-03 Mo 14:05]
-The variable at t (its default) lets emacs query before killing
-processes when exiting.
-#+BEGIN_SRC emacs-lisp :tangle yes
-  ;;(validate-setq confirm-kill-processes nil)
-  (validate-setq kill-buffer-query-functions
-                 (delq 'process-kill-buffer-query-function kill-buffer-query-functions))
-#+END_SRC
+
+
+
 ** Miscellaneous stuff
-Searches and matches should ignore case.
+*** Isearch related
+Incremental search is great, but annoyingly you need to type whatever
+you want. If you want to search for just the next (or previous)
+occurence of what is at your cursor position use the following.
+*C-x* will insert the current word while *M-up* and *M-down* will just
+jump to the next/previous occurence of it.
 #+BEGIN_SRC emacs-lisp
-(setq-default case-fold-search t)
+(bind-key "C-x" 'sacha/isearch-yank-current-word isearch-mode-map)
+(bind-key* "<M-up>" 'sacha/search-word-backward)
+(bind-key* "<M-down>" 'sacha/search-word-forward)
 #+END_SRC
 
-Which buffers to get rid off at midnight.
+*** Frame configuration
+I want to see the buffername and its size, not the host I am on in my
+frame title.
 #+BEGIN_SRC emacs-lisp
-  (use-package midnight
-    :ensure t
-    :config
-    (progn
-      (validate-setq clean-buffer-list-kill-buffer-names (quote ("*Help*" "*Apropos*"
-                                                                 "*Man " "*Buffer List*"
-                                                                 "*Compile-Log*"
-                                                                 "*info*" "*vc*"
-                                                                 "*vc-diff*" "*diff*"
-                                                                 "*Customize"
-                                                                 "*tramp/" "*debug "
-                                                                 "*magit" "*Calendar")))
-      (midnight-delay-set 'midnight-delay 16200)
-      ))
+(validate-setq frame-title-format "%b (%i)")
 #+END_SRC
 
-Don't display a cursor in non-selected windows.
+*** yes-or-no-p
+Emas usually wants you to type /yes/ or /no/ fully. What a mess, I am
+lazy.
 #+BEGIN_SRC emacs-lisp
-(setq-default cursor-in-non-selected-windows nil)
+(defalias 'yes-or-no-p 'y-or-n-p)
+#+END_SRC
+
+*** Language/i18n stuff
+In this day and age, UTF-8 is the way to go.
+#+BEGIN_SRC emacs-lisp
+(set-language-environment 'utf-8)
+(set-default-coding-systems 'utf-8)
+(set-terminal-coding-system 'utf-8)
+(set-keyboard-coding-system 'utf-8)
+(set-clipboard-coding-system 'utf-8)
+(prefer-coding-system 'utf-8)
+(set-charset-priority 'unicode)
+(validate-setq default-process-coding-system '(utf-8-unix . utf-8-unix))
+(when (display-graphic-p)
+  (validate-setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING)))
+#+END_SRC
+
+*** Kill other buffers
+While many editors allow you to close "all the other files, not the one
+you are in", emacs doesn't have this... Except, now it will.
+(Update 30.05.2014: Not used ever, deactivated)
+#+BEGIN_SRC emacs-lisp :tangle no
+(bind-key "C-c k" 'prelude-kill-other-buffers)
+#+END_SRC
+*** Scrolling
+Default scrolling behaviour in emacs is a bit annoying, who wants to
+jump half-windows?
+#+BEGIN_SRC emacs-lisp
+(validate-setq scroll-margin 3)
+(validate-setq scroll-conservatively 100000)
+(validate-setq scroll-up-aggressively 0.0)
+(validate-setq scroll-down-aggressively 0.0)
+(validate-setq scroll-preserve-screen-position 'always)
+#+END_SRC
+
+*** Copy/Paste with X
+[2013-04-09 Di 23:31]
+The default how emacs handles cutting/pasting with the primary selection
+changed in emacs24. I am used to the old way, so get it back.
+#+BEGIN_SRC emacs-lisp
+(validate-setq select-enable-primary t)
+(validate-setq select-enable-clipboard nil)
+(validate-setq interprogram-paste-function 'x-cut-buffer-or-selection-value)
+(validate-setq mouse-drag-copy-region t)
+#+END_SRC
+*** Global keyboard changes not directly related to a mode
+**** disable suspend frame
+ Disable /suspend_frame/ function, I dislike it.
+ #+BEGIN_SRC emacs-lisp
+ (unbind-key "C-z")
+ (unbind-key "C-x C-z")
+ #+END_SRC
+**** kill line but move to beginning of it first
+ http://endlessparentheses.com/kill-entire-line-with-prefix-argument.html?source=rss
+ #+BEGIN_SRC emacs-lisp :tangle no
+ (defmacro bol-with-prefix (function)
+   "Define a new function which calls FUNCTION.
+ Except it moves to beginning of line before calling FUNCTION when
+ called with a prefix argument. The FUNCTION still receives the
+ prefix argument."
+   (let ((name (intern (format "endless/%s-BOL" function))))
+     `(progn
+       (defun ,name (p)
+          ,(format
+            "Call `%s', but move to BOL when called with a prefix argument."
+            function)
+          (interactive "P")
+          (when p
+            (forward-line 0))
+          (call-interactively ',function))
+       ',name)))
+
+ (global-set-key [remap paredit-kill] (bol-with-prefix paredit-kill))
+ (global-set-key [remap org-kill-line] (bol-with-prefix org-kill-line))
+ (global-set-key [remap kill-line] (bol-with-prefix kill-line))
+ #+END_SRC
+**** kill entire line
+ Default of *C-k* is to kill from the point to the end of line. If
+ 'kill-whole-line' (see [[id:0a1560d9-7e55-47ab-be52-b3a8b8eea4aa][the kill-whole-line part in "General stuff"]]) is
+ set, including newline. But to kill the entire line, one still needs a
+ *C-a* in front of it. So I change it, by defining a function to do just this for
+ me. Lazyness++.
+ #+BEGIN_SRC emacs-lisp :tangle no
+ (defun kill-entire-line ()
+   "Kill this entire line (including newline), regardless of where point is within the line."
+   (interactive)
+   (beginning-of-line)
+   (kill-line)
+   (back-to-indentation))
+
+ (bind-key* "C-k" 'kill-entire-line)
+ (global-set-key [remap kill-whole-line] 'kill-entire-line)
+ #+END_SRC
+
+ And the same is true when I'm in org-mode, which has an own kill function...
+ (the keybinding happens later, after org-mode is loaded fully)
+ #+BEGIN_SRC emacs-lisp :tangle no
+ (defun jj-org-kill-line (&optional arg)
+   "Kill the entire line, regardless of where point is within the line, org-mode-version"
+   (interactive "P")
+   (beginning-of-line)
+   (org-kill-line arg)
+   (back-to-indentation)
+   )
+ #+END_SRC
+**** No tabs
+ I really hate tabs, so I don't want any indentation to try using them.
+ And in case a project really needs them, I can change it just for that
+ file/project, but luckily none of those I work in is as broken.
+ #+BEGIN_SRC emacs-lisp
+ (setq-default indent-tabs-mode nil)
+ #+END_SRC
+**** match paren
+ Make the % key jump to the matching {}[]() if on another, like vi, see [[id:b6e6cf73-9802-4a7b-bd65-fdb6f9745319][the function]]
+ #+BEGIN_SRC emacs-lisp
+ (bind-key* "M-5" 'match-paren)
+ #+END_SRC
+**** backward-kill-word
+ Instead of the default "mark-defun" I want a more readline-like setting.
+ #+BEGIN_SRC emacs-lisp
+ (bind-key "C-M-h" 'backward-kill-word)
+ #+END_SRC
+**** Align with regexp
+ Align whatever with a regexp.
+ #+BEGIN_SRC emacs-lisp
+ (bind-key "C-x \\" 'align-regexp)
+ #+END_SRC
+**** Font size changes
+ #+BEGIN_SRC emacs-lisp
+ (bind-key "C-+" 'text-scale-increase)
+ (bind-key "C--" 'text-scale-decrease)
+ #+END_SRC
+**** rgrep
+ Rgrep is infinitely useful in multi-file projects.
+ #+begin_src emacs-lisp
+ (bind-key "C-x C-g" 'rgrep)
+ #+end_src
+**** Transpose lines
+ Easy way to move a line up - or down. Simpler than dealing with C-x C-t
+ AKA transpose lines.
+ #+BEGIN_SRC emacs-lisp
+ (bind-key "<M-S-up>"  'move-line-up)
+ (bind-key "<M-S-down>" 'move-line-down)
+ #+END_SRC
+**** "Pull" lines up, join them
+ #+BEGIN_SRC emacs-lisp
+ (defun join-line-or-lines-in-region ()
+   "Join this line or the lines in the selected region.
+ Joins single lines in reverse order to the default, ie. pulls the next one up."
+   (interactive)
+   (cond ((region-active-p)
+          (let ((min (line-number-at-pos (region-beginning))))
+            (goto-char (region-end))
+            (while (> (line-number-at-pos) min)
+              (join-line ))))
+         (t (let ((current-prefix-arg '(4)))
+              (call-interactively 'join-line)))))
+ (bind-key "M-j" 'join-line-or-lines-in-region)
+ #+END_SRC
+**** Let enter indent next line
+ When I press Enter I almost always want to go to the right indentation on the next line.
+ #+BEGIN_SRC emacs-lisp
+ (bind-key "RET" 'newline-and-indent)
+ #+END_SRC
+**** Easier undo
+     and i don't need suspend-frame
+ #+BEGIN_SRC emacs-lisp
+ (bind-key "C-z" 'undo)
+ #+END_SRC
+**** Window switching, go backwards. (C-x o goes to the next window)
+ #+BEGIN_SRC emacs-lisp
+ (bind-key "C-x O" (lambda ()
+                     (interactive)
+                     (other-window -1)))
+ #+END_SRC
+**** Edit file as root
+ #+BEGIN_SRC emacs-lisp 
+ (bind-key "C-x C-r" 'prelude-sudo-edit)
+ #+END_SRC
+**** Just one space with newline
+ M-space is bound to just-one-space, which is great for programming. What
+ it does is remove all spaces around the cursor, except for one. But to
+ be really useful, it also should include newlines. It doesn’t do this by
+ default. Rather, you have to call it with a negative argument. Sure
+ not, bad Emacs.
+ #+BEGIN_SRC emacs-lisp
+ (bind-key "M-SPC" 'just-one-space-with-newline)
+ #+END_SRC
+**** Count which commands I use how often.
+ #+BEGIN_SRC emacs-lisp :tangle no
+ (use-package keyfreq
+   :ensure keyfreq
+   :config
+   (progn
+     (validate-setq keyfreq-file (expand-file-name "keyfreq" jj-cache-dir))
+     (validate-setq keyfreq-file-lock (expand-file-name "keyfreq.lock" jj-cache-dir))
+     (keyfreq-mode 1)
+     (keyfreq-autosave-mode 1)))
+ #+END_SRC
+**** Duplicate current line
+ #+BEGIN_SRC emacs-lisp
+ (defun duplicate-line ()
+   "Insert a copy of the current line after the current line."
+   (interactive)
+   (save-excursion
+     (let ((line-text (buffer-substring-no-properties
+                       (line-beginning-position)
+                       (line-end-position))))
+       (move-end-of-line 1)
+       (newline)
+       (insert line-text))))
+
+ (bind-key "C-c p" 'duplicate-line)
+ #+END_SRC
+**** Smarter move to the beginning of the line.
+That is, it first moves to the beginning of the line - and on second
+ keypress it goes to the first character on line.
+ #+BEGIN_SRC emacs-lisp
+ (defun smarter-move-beginning-of-line (arg)
+   "Move point back to indentation of beginning of line.
+
+ Move point to the first non-whitespace character on this line.
+ If point is already there, move to the beginning of the line.
+ Effectively toggle between the first non-whitespace character and
+ the beginning of the line.
+
+ If ARG is not nil or 1, move forward ARG - 1 lines first.  If
+ point reaches the beginning or end of the buffer, stop there."
+   (interactive "^p")
+   (validate-setq arg (or arg 1))
+
+   ;; Move lines first
+   (when (/= arg 1)
+     (let ((line-move-visual nil))
+       (forward-line (1- arg))))
+
+   (let ((orig-point (point)))
+     (back-to-indentation)
+     (when (= orig-point (point))
+       (move-beginning-of-line 1))))
+
+ ;; remap C-a to `smarter-move-beginning-of-line'
+ (global-set-key [remap move-beginning-of-line]
+                 'smarter-move-beginning-of-line)
+
+ #+END_SRC
+**** Copy characters from previous line
+ Easily copy characters from the previous nonblank line, starting just
+ above point. With a prefix argument, only copy ARG characters (never
+ past EOL), no argument copies rest of line.
+ #+BEGIN_SRC emacs-lisp
+   (use-package misc
+     :bind ("H-y" . copy-from-above-command))
+ #+END_SRC
+**** Misc keybindings
+ Open a new X Terminal pointing to the directory of the current
+ buffers path.
+ #+BEGIN_SRC emacs-lisp
+ (bind-key "H-t" 'jj-open-shell)
+ #+END_SRC
+
+ Align code
+ #+BEGIN_SRC emacs-lisp
+ (bind-key "H-a" 'align-code)
+ #+END_SRC
+
+ Insert date
+ #+BEGIN_SRC emacs-lisp
+ (bind-key "C-c d" 'insert-date)
+ #+END_SRC
+
+ Another key for indenting
+ #+BEGIN_SRC emacs-lisp
+ (bind-key "H-i" 'indent-region)
+ #+END_SRC
+
+ Clean all whitespace stuff
+ #+BEGIN_SRC emacs-lisp
+ (bind-key "H-w" 'whitespace-cleanup)
+ #+END_SRC
+
+ Comment/Uncomment
+ #+BEGIN_SRC emacs-lisp
+ (bind-key "H-c" 'comment-dwim)
+ #+END_SRC
+
+ Show keystrokes in progress
+ #+BEGIN_SRC emacs-lisp
+ (validate-setq echo-keystrokes 0.1)
+ #+END_SRC
+**** Overwrite mode
+Usually you can press the *Ins*ert key, to get into overwrite mode. I
+don't like that, have broken much with it and so just forbid it by
+disabling that.
+#+BEGIN_SRC emacs-lisp
+(unbind-key "<insert>")
+(unbind-key "<kp-insert>")
 #+END_SRC
 
+**** Easily navigate sillyCased words
+ #+BEGIN_SRC emacs-lisp
+ (global-subword-mode 1)
+ #+END_SRC
+**** Delete file of current buffer, then kill buffer
+ [2014-06-14 Sat 23:03]
+ #+BEGIN_SRC emacs-lisp
+ (defun delete-current-buffer-file ()
+   "Removes file connected to current buffer and kills buffer."
+   (interactive)
+   (let ((filename (buffer-file-name))
+         (buffer (current-buffer))
+         (name (buffer-name)))
+     (if (not (and filename (file-exists-p filename)))
+         (ido-kill-buffer)
+       (when (yes-or-no-p "Are you sure you want to remove this file? ")
+         (delete-file filename)
+         (kill-buffer buffer)
+         (message "File '%s' successfully removed" filename)))))
+
+ (bind-key "C-x C-k" 'delete-current-buffer-file)
+ #+END_SRC
+**** Rename file of current buffer
+ [2014-06-14 Sat 23:04]
+ #+BEGIN_SRC emacs-lisp
+ (defun rename-current-buffer-file ()
+   "Renames current buffer and file it is visiting."
+   (interactive)
+   (let ((name (buffer-name))
+         (filename (buffer-file-name)))
+     (if (not (and filename (file-exists-p filename)))
+         (error "Buffer '%s' is not visiting a file!" name)
+       (let ((new-name (read-file-name "New name: " filename)))
+         (if (get-buffer new-name)
+             (error "A buffer named '%s' already exists!" new-name)
+           (rename-file filename new-name 1)
+           (rename-buffer new-name)
+           (set-visited-file-name new-name)
+           (set-buffer-modified-p nil)
+           (message "File '%s' successfully renamed to '%s'"
+                    name (file-name-nondirectory new-name)))))))
+
+ (bind-key "C-x C-S-r" 'rename-current-buffer-file)
+ #+END_SRC
+**** Quickly find emacs lisp sources
+ [2014-06-22 Sun 23:05]
+ #+BEGIN_SRC emacs-lisp
+ (bind-key "C-l" 'find-library 'help-command)
+ (bind-key "C-f" 'find-function 'help-command)
+ (bind-key "C-k" 'find-function-on-key 'help-command)
+ (bind-key "C-v" 'find-variable 'help-command)
+ #+END_SRC
+*** Adjust occur
+[2015-01-26 Mon 16:01]
+#+BEGIN_SRC emacs-lisp
+(bind-key "M-s o" 'occur-dwim)
+#+END_SRC
+*** Searches and matches should ignore case.
+#+BEGIN_SRC emacs-lisp
+(setq-default case-fold-search t)
+#+END_SRC
+*** Don't display a cursor in non-selected windows.
+#+BEGIN_SRC emacs-lisp
+(setq-default cursor-in-non-selected-windows nil)
+#+END_SRC
+*** Modeline filetype endings display
 What should be displayed in the mode-line for files with those types
 of line endings.
 #+BEGIN_SRC emacs-lisp
@@ -612,8 +979,7 @@ of line endings.
 (validate-setq max-lisp-eval-depth 1000)
 (validate-setq max-specpdl-size 3000)
 #+END_SRC
-
-Unfill paragraph
+*** Unfill paragraph
 From https://raw.github.com/qdot/conf_emacs/master/emacs_conf.org
 #+BEGIN_SRC emacs-lisp
 (defun unfill-paragraph ()
@@ -628,23 +994,19 @@ From https://raw.github.com/qdot/conf_emacs/master/emacs_conf.org
 (setq-default indicate-empty-lines t)
 (validate-setq sentence-end-double-space nil)
 #+END_SRC
-
-Hilight annotations in comments, like FIXME/TODO/...
+*** Hilight annotations in comments, like FIXME/TODO/...
 #+BEGIN_SRC emacs-lisp :tangle yes
 (add-hook 'prog-mode-hook 'font-lock-comment-annotations)
 #+END_SRC
-
-Wait a bit longer before considering emacs idle
+*** Wait a bit longer before considering emacs idle
 #+BEGIN_SRC emacs-lisp :tangle yes
 (validate-setq idle-update-delay 2)
 #+END_SRC
-
-Make gnutls a bit safer, the default is an absurdly low 256
+*** Make gnutls a bit safer, the default is an absurdly low 256
 #+BEGIN_SRC emacs-lisp :tangle yes
 (validate-setq gnutls-min-prime-bits 4096)
 #+END_SRC
-
-Emacs defaults to using --insecure - and supporting ssl3. No thanks.
+*** Emacs defaults to using --insecure - and supporting ssl3. No thanks.
 #+BEGIN_SRC emacs-lisp :tangle yes
 (setq tls-program
       ;; Defaults:
@@ -654,8 +1016,7 @@ Emacs defaults to using --insecure - and supporting ssl3. No thanks.
       '("gnutls-cli -p %p %h"
         "openssl s_client -connect %h:%p -no_ssl2 -no_ssl3 -ign_eof"))
 #+END_SRC
-
-Resolve symlinks without asking
+*** Resolve symlinks without asking
 #+BEGIN_SRC emacs-lisp :tangle no
 (setq-default find-file-visit-truename t)
 #+END_SRC
@@ -664,17 +1025,6 @@ Resolve symlinks without asking
 (setq-default bidi-display-reordering nil)
 #+END_SRC
 
-*** Browser
-#+BEGIN_SRC emacs-lisp
-  (use-package browse-url
-    :ensure t
-    :commands (browse-url)
-    :config
-    (progn
-      (validate-setq browse-url-browser-function (quote browse-url-generic))
-      (validate-setq browse-url-generic-program "/usr/bin/x-www-browser")))
-#+END_SRC
-
 *** When saving a script - make it executable
 #+BEGIN_SRC emacs-lisp
 (add-hook 'after-save-hook 'executable-make-buffer-file-executable-if-script-p)
@@ -696,25 +1046,18 @@ Resolve symlinks without asking
     (validate-setq edit-server-new-frame nil)
     (edit-server-start)))
 #+END_SRC
-**** Atomic chrome, edit text from Chrome in Emacs
-[2017-03-09 Do 14:56]
-#+BEGIN_SRC emacs-lisp
-(use-package atomic-chrome
-  :ensure t
-  :config
-  (progn
-    (atomic-chrome-start-server)))
-#+END_SRC
-*** Adjust buffer mode for zsh commandline editing buffers
-[2017-03-17 Fr 13:35]
-I got a handy zsh setup, using edit-command-line widget, so typing C-x
-C-e I end up in emacs with whatever is in my commandline. Save, exit -
-and commandline is changed to it. Very nice.
-Now I want the buffers of it appear in sh-mode by default
+*** Adjust buffer mode for zsh commandline editing buffers
+[2017-03-17 Fr 13:35]
+I got a handy zsh setup, using edit-command-line widget, so typing C-x
+C-e I end up in emacs with whatever is in my commandline. Save, exit -
+and commandline is changed to it. Very nice.
+Now I want the buffers of it appear in sh-mode by default
 #+BEGIN_SRC emacs-lisp
 (add-auto-mode 'sh-mode "zshe.*$")
 #+END_SRC
-** Customized variables
+
+
+* Customized variables
 [2013-05-02 Thu 22:14]
 The following contains a set of variables i may reasonably want to
 change on other systems - which don't affect the init file loading
@@ -744,120 +1087,94 @@ This can be 0 for immediate, or a floating point value."
   :group 'ganneff-org-mode)
 #+END_SRC
 
+** Customized variables
+   :PROPERTIES:
+   :ID:       0102208d-fdf6-4928-9e40-7e341bd3aa3a
+   :END:
+ Of course I want to be able to use the customize interface, and some
+ things can only be set via it (or so they say). I usually prefer to put
+ things I keep for a long while into statements somewhere else, not just
+ custom-set here, but we need it anyways.
 
-** Compatibility
-[2013-05-21 Tue 23:22]
-Restore removed var alias, used by ruby-electric-brace and others
-#+BEGIN_SRC emacs-lisp
-(unless (boundp 'last-command-char)
-  (defvaralias 'last-command-char 'last-command-event))
-#+END_SRC
-* Customized variables
-:PROPERTIES:
-:ID: 0102208d-fdf6-4928-9e40-7e341bd3aa3a
-:END:
-Of course I want to be able to use the customize interface, and some
-things can only be set via it (or so they say). I usually prefer to put
-things I keep for a long while into statements somewhere else, not just
-custom-set here, but we need it anyways.
+ #+BEGIN_SRC emacs-lisp
+ (validate-setq custom-file jj-custom-file)
+ (safe-load custom-file)
+ #+END_SRC
 
-#+BEGIN_SRC emacs-lisp
-(validate-setq custom-file jj-custom-file)
-(safe-load custom-file)
-#+END_SRC
+ The source of this is:
+ #+INCLUDE: "~/.emacs.d/config/customized.el" src emacs-lisp
 
-The source of this is:
-#+INCLUDE: "~/.emacs.d/config/customized.el" src emacs-lisp
-* Extra modes and their configuration
+
+* Extra modes, additions, thingies, fun
 ** abbrev
 A defined abbrev is a word which expands, if you insert it, into some
 different text. Abbrevs are defined by the user to expand in specific
 ways.
-#+BEGIN_SRC emacs-lisp
-(use-package abbrev
-  :commands abbrev-mode
-  :diminish abbrev-mode
-  :config
-  (progn
-    (validate-setq save-abbrevs 'silently)
-    (validate-setq abbrev-file-name (expand-file-name "abbrev_defs" jj-cache-dir))
-    (if (file-exists-p abbrev-file-name)
-        (quietly-read-abbrev-file))
-
-    (hook-into-modes #'abbrev-mode '(text-mode-hook))
-    (add-hook 'expand-load-hook
-              (lambda ()
-                (add-hook 'expand-expand-hook 'indent-according-to-mode)
-                (add-hook 'expand-jump-hook 'indent-according-to-mode)))))
-#+END_SRC
-** autocorrect
-[2016-02-15 Mon 22:19]
-See [[http://endlessparentheses.com/ispell-and-abbrev-the-perfect-auto-correct.html][Ispell and Abbrev, the Perfect Auto-Correct]].
-#+BEGIN_SRC emacs-lisp
-(bind-key "C-i" 'endless/ispell-word-then-abbrev ctl-x-map)
-
-(defun endless/ispell-word-then-abbrev (p)
-  "Call `ispell-word', then create an abbrev for it.
-With prefix P, create local abbrev. Otherwise it will
-be global.
-If there's nothing wrong with the word at point, keep
-looking for a typo until the beginning of buffer. You can
-skip typos you don't want to fix with `SPC', and you can
-abort completely with `C-g'."
-  (interactive "P")
-  (let (bef aft)
-    (save-excursion
-      (while (if (validate-setq bef (thing-at-point 'word))
-                 ;; Word was corrected or used quit.
-                 (if (ispell-word nil 'quiet)
-                     nil ; End the loop.
-                   ;; Also end if we reach `bob'.
-                   (not (bobp)))
-               ;; If there's no word at point, keep looking
-               ;; until `bob'.
-               (not (bobp)))
-        (backward-word))
-      (validate-setq aft (thing-at-point 'word)))
-    (if (and aft bef (not (equal aft bef)))
-        (let ((aft (downcase aft))
-              (bef (downcase bef)))
-          (define-abbrev
-            (if p local-abbrev-table global-abbrev-table)
-            bef aft)
-          (message "\"%s\" now expands to \"%s\" %sally"
-                   bef aft (if p "loc" "glob")))
-      (user-error "No typo at or before point"))))
-
-(validate-setq save-abbrevs 'silently)
-(setq-default abbrev-mode t)
+Also see [[http://endlessparentheses.com/ispell-and-abbrev-the-perfect-auto-correct.html][Ispell and Abbrev, the Perfect Auto-Correct]].
+#+BEGIN_SRC emacs-lisp :tangle yes
+  (use-package abbrev
+    :commands abbrev-mode
+    :diminish abbrev-mode
+    :bind (:map ctl-x-map
+           ("C-i" . endless/ispell-word-then-abbrev))
+    :init
+    (progn
+      (setq-default abbrev-mode t)
+      (hook-into-modes #'abbrev-mode '(text-mode-hook)))
+    :config
+    (progn
+      (validate-setq save-abbrevs 'silently)
+      (validate-setq abbrev-file-name (expand-file-name "abbrev_defs" jj-cache-dir))
+      (if (file-exists-p abbrev-file-name)
+          (quietly-read-abbrev-file))
+
+      (add-hook 'expand-load-hook
+                (lambda ()
+                  (add-hook 'expand-expand-hook 'indent-according-to-mode)
+                  (add-hook 'expand-jump-hook 'indent-according-to-mode)))
+
+      (defun endless/ispell-word-then-abbrev (p)
+        "Call `ispell-word', then create an abbrev for it.
+  With prefix P, create local abbrev. Otherwise it will
+  be global.
+  If there's nothing wrong with the word at point, keep
+  looking for a typo until the beginning of buffer. You can
+  skip typos you don't want to fix with `SPC', and you can
+  abort completely with `C-g'."
+        (interactive "P")
+        (let (bef aft)
+          (save-excursion
+            (while (if (validate-setq bef (thing-at-point 'word))
+                       ;; Word was corrected or used quit.
+                       (if (ispell-word nil 'quiet)
+                           nil ; End the loop.
+                         ;; Also end if we reach `bob'.
+                         (not (bobp)))
+                     ;; If there's no word at point, keep looking
+                     ;; until `bob'.
+                     (not (bobp)))
+              (backward-word))
+            (validate-setq aft (thing-at-point 'word)))
+          (if (and aft bef (not (equal aft bef)))
+              (let ((aft (downcase aft))
+                    (bef (downcase bef)))
+                (define-abbrev
+                  (if p local-abbrev-table global-abbrev-table)
+                  bef aft)
+                (message "\"%s\" now expands to \"%s\" %sally"
+                         bef aft (if p "loc" "glob")))
+            (user-error "No typo at or before point"))))
+            (validate-setq save-abbrevs 'silently)))
 #+END_SRC
 ** Atomic chrome, edit text from Chrome in Emacs
 [2017-03-09 Do 14:56]
 #+BEGIN_SRC emacs-lisp
 (use-package atomic-chrome
   :ensure t
-  :config
+  :init
   (progn
     (atomic-chrome-start-server)))
 #+END_SRC
-** avy-mode
-[2013-04-28 So 11:26]
-avy is a GNU Emacs package for jumping to visible text using a char-based decision tree.
-#+BEGIN_SRC emacs-lisp
-(use-package avy
-  :ensure avy
-  :commands (avy-goto-char avy-goto-char-2 avy-goto-line avy-goto-word-1 avy-goto-word-0 avy-isearch avy-goto-subword-0 avy-goto-subword-1 avy-copy-line avy-copy-region avy-move-line)
-  :bind (("H-SPC" . avy-goto-char-2)
-         ("M-g g" . avy-goto-line)
-         )
-  :config
-  (progn
-    (bind-key "C-y" 'avy-isearch isearch-mode-map)
-    (validate-setq avy-all-windows 'all-frames)
-    (setq avi-keys '(?a ?s ?d ?e ?f ?h ?j ?k ?l ?n ?m ?v ?r ?u) )
-    )
-)
-#+END_SRC
 ** ace-window
 [2013-04-21 So 20:27]
 Use H-w to switch windows
@@ -871,27 +1188,6 @@ Use H-w to switch windows
     (validate-setq aw-keys '(?a ?s ?d ?f ?j ?k ?l))
     ))
 #+END_SRC
-** aggressive-indent
-[2014-10-27 Mon 13:08]
-electric-indent-mode is enough to keep your code nicely aligned when
-all you do is type. However, once you start shifting blocks around,
-transposing lines, or slurping and barfing sexps, indentation is bound
-to go wrong.
-
-aggressive-indent-mode is a minor mode that keeps your code always
-indented. It reindents after every command, making it more reliable
-than electric-indent-mode.
-#+BEGIN_SRC emacs-lisp :tangle no
-(use-package aggressive-indent
-  :ensure aggressive-indent
-  :commands (aggressive-indent-mode global-aggressive-indent-mode)
-  :config
-  (progn
-    (global-aggressive-indent-mode 0)
-    (validate-setq aggressive-indent-comments-too t)
-    (add-to-list 'aggressive-indent-excluded-modes 'html-mode)
-    ))
-#+END_SRC
 ** anzu
 [2014-06-01 Sun 23:02]
 Provides a minor mode which displays current match and total matches
@@ -901,767 +1197,60 @@ information in the mode-line in various search modes.
   :ensure anzu
   :diminish anzu-mode
   :defer t
+  :init
+    (global-anzu-mode 1)
   :config
   (progn
     (validate-setq anzu-search-threshold 1000)
-    (global-anzu-mode 1)
     (set-face-attribute 'anzu-mode-line nil :foreground "yellow" :weight 'bold)))
 #+END_SRC
-** ascii
-[2014-05-21 Wed 00:33]
-#+BEGIN_SRC emacs-lisp
-(use-package ascii
-  :ensure t
-  :commands (ascii-on ascii-toggle ascii-display)
-  :bind (("C-c e A" . ascii-toggle))
-  :init
-  (progn
-    (defun ascii-toggle ()
-      (interactive)
-      (defvar ascii-display nil)
-      (if ascii-display
-          (ascii-off)
-        (ascii-on)))))
-#+END_SRC
-** auctex
-#+BEGIN_SRC emacs-lisp
-(use-package auctex
-  :ensure t
-  :mode ("\\.tex\\'" . latex-mode)
-  :commands (latex-mode LaTeX-mode plain-tex-mode)
-  :init
-  (progn
-    (add-hook 'LaTeX-mode-hook #'LaTeX-preview-setup)
-    (add-hook 'LaTeX-mode-hook #'flyspell-mode)
-    (add-hook 'LaTeX-mode-hook #'turn-on-reftex)
-    (setq TeX-auto-save t
-          TeX-parse-self t
-          TeX-save-query nil
-          TeX-PDF-mode t)
-    (setq-default TeX-master nil)
-
-    ;; Compilation command
-    (add-hook 'LaTeX-mode-hook (lambda () (setq compile-command "latexmk -pdf")))))
-
-;; (validate-setq auto-mode-alist (cons '("\\.tex\\'" . latex-mode) auto-mode-alist))
-;; (validate-setq TeX-auto-save t)
-;; (validate-setq TeX-parse-self t)
-;; (validate-setq TeX-PDF-mode t)
-#+END_SRC
-** auto-complete mode
-[2013-04-27 Sa 16:33]
-And aren't we all lazy? I definitely am, and I like my emacs doing as
-much possible work for me as it can.
-So here, auto-complete-mode, which lets emacs do this, based on what I
-already had typed.
-#+BEGIN_SRC emacs-lisp
-(use-package auto-complete
-  :ensure auto-complete
-  :commands auto-complete-mode
-  :bind (("C-n" . ac-next)
-         ("C-p" . ac-previous)
-         :map ac-complete-mode-map
-         ("\t" . ac-expand)
-         ("\r" . ac-complete)
-         ("M-n" . ac-next)
-         ("M-p" . ac-previous)
-         :map ac-mode-map
-         ("M-TAB" . auto-complete)
-         :map ac-completing-map
-         ("C-s" . ac-isearch))
-  :init
-  (progn
-    (auto-complete-mode t))
-  :config
-  (progn
-    (ac-config-default)
-    ;; hook AC into completion-at-point
-    (defun sanityinc/auto-complete-at-point ()
-      (when (and (not (minibufferp))
-                 (fboundp 'auto-complete-mode)
-                 auto-complete-mode)
-        (auto-complete)))
-    (defun set-auto-complete-as-completion-at-point-function ()
-      (add-to-list 'completion-at-point-functions 'sanityinc/auto-complete-at-point))
-    ;; Exclude very large buffers from dabbrev
-    (defun sanityinc/dabbrev-friend-buffer (other-buffer)
-      (< (buffer-size other-buffer) (* 1 1024 1024)))
-
-    (use-package pos-tip
-      :ensure t)
-
-    (validate-setq ac-comphist-file (expand-file-name "ac-comphist.dat" jj-cache-dir))
-    (validate-setq ac-use-comphist t)
-    (validate-setq ac-expand-on-auto-complete nil)
-    (validate-setq ac-dwim t)
-    (validate-setq ac-auto-start 3)
-    (validate-setq ac-delay 0.3)
-    (validate-setq ac-menu-height 15)
-    (validate-setq ac-quick-help-delay 0.5)
-    (validate-setq ac-use-fuzzy t)
-
-    (ac-flyspell-workaround)
-
-    ;; use 't when auto-complete is disabled
-    (validate-setq tab-always-indent 'complete)
-    (add-to-list 'completion-styles 'initials t)
-
-     ;; Use space and punctuation to accept the current the most likely completion.
-    (setq auto-completion-syntax-alist (quote (global accept . word)))
-     ;; Avoid completion for short trivial words.
-    (setq auto-completion-min-chars (quote (global . 3)))
-    (setq completion-use-dynamic t)
-
-    (add-hook 'auto-complete-mode-hook 'set-auto-complete-as-completion-at-point-function)
-
-    ;; Exclude very large buffers from dabbrev
-    (setq dabbrev-friend-buffer-function 'sanityinc/dabbrev-friend-buffer)
-
-    (use-package ac-dabbrev
-      :ensure t)
-
-    (set-default 'ac-sources
-                 '(ac-source-imenu
-                   ac-source-dictionary
-                   ac-source-words-in-buffer
-                   ac-source-words-in-same-mode-buffers
-    ;               ac-source-words-in-all-buffer
-                   ac-source-dabbrev))
-
-    (dolist (mode '(magit-log-edit-mode log-edit-mode org-mode text-mode haml-mode
-                    sass-mode yaml-mode csv-mode espresso-mode haskell-mode 
-                    html-mode nxml-mode sh-mode smarty-mode clojure-mode go-mode
-                    lisp-mode textile-mode markdown-mode tuareg-mode python-mode
-                    js3-mode css-mode less-css-mode sql-mode ielm-mode))
-      (add-to-list 'ac-modes mode))
-
-    (add-hook 'latex-mode-hook 'auto-complete-mode)
-    (add-hook 'LaTeX-mode-hook 'auto-complete-mode)
-    (add-hook 'prog-mode-hook 'auto-complete-mode)
-    (add-hook 'org-mode-hook 'auto-complete-mode)))
-#+END_SRC
-
-** auto-revert
-When files change outside emacs for whatever reason I want emacs to deal
-with it. Not to have to revert buffers myself
-#+BEGIN_SRC emacs-lisp
-(use-package autorevert
-  :commands auto-revert-mode
-  :diminish auto-revert-mode
-  :init
-  (progn
-    (validate-setq global-auto-revert-mode t)
-    (validate-setq global-auto-revert-non-file-buffers t)
-    (global-auto-revert-mode)))
-#+END_SRC
-
-** backups
-Emacs should keep backup copies of files I edit, but I do not want them
-to clutter up the filesystem everywhere. So I put them into one defined
-place, backup-directory, which even contains my username (for systems
-where =temporary-file-directory= is not inside my home).
-#+BEGIN_SRC emacs-lisp :tangle no
-(use-package backups-mode
-  :load-path "elisp/backups-mode"
-  :disabled t
-  :bind   (("\C-cv" . save-version)
-           ("\C-cb" . list-backups)
-           ("\C-ck" . kill-buffer-prompt)
-           ("\C-cw" . backup-walker-start))
-  :init
-  (progn
-    (validate-setq backup-directory jj-backup-directory)
-;    (validate-setq tramp-backup-directory (concat jj-backup-directory "/tramp"))
-;    (if (not (file-exists-p tramp-backup-directory))
-;        (make-directory tramp-backup-directory))
-;    (validate-setq tramp-backup-directory-alist `((".*" . ,tramp-backup-directory)))
-    (validate-setq backup-directory-alist `(("." . ,jj-backup-directory)))
-    (validate-setq auto-save-list-file-prefix (concat jj-backup-directory ".auto-saves-"))
-    (validate-setq auto-save-file-name-transforms `((".*" ,jj-backup-directory t)))
-
-    (validate-setq version-control t)     ;; Use version numbers for backups
-    (validate-setq kept-new-versions 10)  ;; Number of newest versions to keep
-    (validate-setq kept-old-versions 2)   ;; Number of oldest versions to keep
-    (validate-setq delete-old-versions t) ;; Ask to delete excess backup versions?
-    (validate-setq backup-by-copying t)
-    (validate-setq backup-by-copying-when-linked t) ;; Copy linked files, don't rename.
-    (validate-setq make-backup-files t)
-
-    (defadvice kill-buffer (around kill-buffer)
-      "Always save before killing a file buffer"
-      (when (and (buffer-modified-p)
-                 (buffer-file-name)
-                 (file-exists-p (buffer-file-name)))
-        (save-buffer))
-      ad-do-it)
-    (ad-activate 'kill-buffer)
-
-    (defadvice save-buffers-kill-emacs (around save-buffers-kill-emacs)
-      "Always save before killing emacs"
-      (save-some-buffers t)
-      ad-do-it)
-    (ad-activate 'save-buffers-kill-emacs)
-
-    (defun kill-buffer-prompt ()
-      "Allows one to kill a buffer without saving it.
-This is necessary since once you start backups-mode all file based buffers
-are saved automatically when they are killed"
-      (interactive)
-      (if (and (buffer-modified-p) (buffer-file-name) (file-exists-p (buffer-file-name)) (y-or-n-p "Save buffer?"))
-          (save-buffer)
-        (set-buffer-modified-p nil))
-      (kill-buffer))
-
-    (validate-setq backup-enable-predicate
-          (lambda (name)
-            (and (normal-backup-enable-predicate name)
-                 (not
-                  (let ((method (file-remote-p name 'method)))
-                    (when (stringp method)
-                      (member method '("su" "sudo"))))))))))
-
-#+END_SRC
-** browse-kill-ring
-[2014-12-11 Thu 11:31]
-Currently replaced with counsel, see Ivy
-#+BEGIN_SRC emacs-lisp :tangle no
-(use-package browse-kill-ring
-  :ensure t
-  :commands (browse-kill-ring browse-kill-ring-mode)
-  :bind ("M-y" . browse-kill-ring)
-  )
-#+END_SRC
-** calendar
-[2014-06-10 Tue 22:20]
-#+BEGIN_SRC emacs-lisp :tangle no
-(use-package calendar
-  :commands (cal/insert)
-  :bind ("C-c c" . cal/insert)
-  :config
-  (progn
-    ; Weeks start on Monday, not sunday.
-    (validate-setq calendar-week-start-day 1)
-    (validate-setq calendar-date-style 'european)
-
-    ; Display ISO week numbers in Calendar Mode
-    (copy-face font-lock-constant-face 'calendar-iso-week-face)
-    (set-face-attribute 'calendar-iso-week-face nil :height 0.7)
-    (validate-setq calendar-intermonth-text
-          '(propertize
-            (format "%2d"
-                    (car
-                     (calendar-iso-from-absolute
-                      (calendar-absolute-from-gregorian (list month day year)))))
-            'font-lock-face 'calendar-iso-week-face))
-    (copy-face 'default 'calendar-iso-week-header-face)
-    (set-face-attribute 'calendar-iso-week-header-face nil :height 0.7)
-    (validate-setq calendar-intermonth-header
-          (propertize "Wk"                  ; or e.g. "KW" in Germany
-                      'font-lock-face 'calendar-iso-week-header-face))))
-
-#+END_SRC
-** corral
-[2015-10-15 Thu 11:34]
-Corral is a lightweight package that lets you quickly wrap parentheses
-and other delimiters around text, intuitively surrounding what you
-want it to using just two commands.
-#+BEGIN_SRC emacs-lisp
-(use-package corral
-  :ensure corral
-  :bind (("C-c c" . hydra-corral/body))
-  :config
-  (progn
-    ; Interpret # and * as part of the word
-    (validate-setq corral-syntax-entries '((?# "_")
-                                  (?* "_")
-                                  (?$ ".")
-                                  (?/ ".")))
-    (defhydra hydra-corral (:columns 4)
-      "Corral"
-      ("(" corral-parentheses-backward "Back")
-      (")" corral-parentheses-forward "Forward")
-      ("[" corral-brackets-backward "Back")
-      ("]" corral-brackets-forward "Forward")
-      ("{" corral-braces-backward "Back")
-      ("}" corral-braces-forward "Forward")
-      ("\"" corral-double-quotes-backward "Back")
-      ("2" corral-double-quotes-forward "Forward")
-      ("'" corral-single-quotes-backward "Back")
-      ("#" corral-single-quotes-forward "Forward")
-      ("." hydra-repeat "Repeat"))
-    ))
-#+END_SRC
-** crontab-mode
-[2013-05-21 Tue 23:18]
-#+BEGIN_SRC emacs-lisp
-(use-package crontab-mode
-  :ensure crontab-mode
-  :commands crontab-mode
-  :mode ("\\.?cron\\(tab\\)?\\'" . crontab-mode))
-#+END_SRC
-
-** css
-web-mode takes over, see [[*web-mode][web-mode]]
-#+BEGIN_SRC emacs-lisp :tangle no
-(use-package css-mode
-  :mode ("\\.css\\'" . css-mode)
-  :defer t
-  :config
-  (progn
-  ;;; CSS flymake
-    (use-package flymake-css
-      :ensure flymake-css
-      :config
-      (progn
-        (defun maybe-flymake-css-load ()
-          "Activate flymake-css as necessary, but not in derived modes."
-          (when (eq major-mode 'css-mode)
-            (flymake-css-load)))
-        (add-hook 'css-mode-hook 'maybe-flymake-css-load)))
-    ;;; Auto-complete CSS keywords
-    (eval-after-load 'auto-complete
-      '(progn
-         (dolist (hook '(css-mode-hook sass-mode-hook scss-mode-hook))
-           (add-hook hook 'ac-css-mode-setup))))))
-#+END_SRC
-
-** cua
-I know that this lets it look "more like windows", but I don't much care
-about its paste/copy/cut keybindings, the really nice part is the great
-support for rectangular regions, which I started to use a lot since I
-know this mode. The normal keybindings for those are just to useless.
-#+BEGIN_SRC emacs-lisp
-(cua-mode t)
-(validate-setq cua-enable-cua-keys (quote shift))
-#+END_SRC
-
-Luckily cua-mode easily supports this, with the following line I just
-get the CUA selection and rectangle stuff, not the keybindings. Yes,
-even though the above =cua-enable-cua-keys= setting would only enable
-them if the selection is done when the region was marked with a shifted
-movement keys.
-#+BEGIN_SRC emacs-lisp
-(cua-selection-mode t)
-#+END_SRC
-
-** Debian related
-#+BEGIN_SRC emacs-lisp
-  (require 'dpkg-dev-el-loaddefs nil 'noerror)
-  (require 'debian-el-loaddefs nil 'noerror)
-
-  (setq debian-changelog-full-name "Joerg Jaspert")
-  (setq debian-changelog-mailing-address "joerg@debian.org")
-#+END_SRC
-
-** diff-mode
-#+BEGIN_SRC emacs-lisp
-(use-package diff-mode
-  :commands diff-mode
-  :mode (("\\.diff" . diff-mode)))
-#+END_SRC
-
-** dired & co
-#+BEGIN_SRC emacs-lisp
-(use-package dired
-  :commands (dired dired-other-window dired-other-frame dired-noselect
-                   dired-mode dired-jump)
-  :defines (dired-omit-regexp-orig)
-  :bind (:map dired-mode-map
-         ("F" . find-name-dired)
-         ("/" . dired-narrow))
-  :init
-  (progn
-    (setq diredp-hide-details-initially-flag nil))
-  :config
-  (progn
-    (validate-setq dired-auto-revert-buffer (quote dired-directory-changed-p))
-    (validate-setq dired-dwim-target t)
-    (validate-setq dired-listing-switches "-alh")
-    (validate-setq dired-listing-switches "-alXh --group-directories-first")
-    (validate-setq dired-recursive-copies (quote top))
-    (validate-setq dired-recursive-deletes (quote top))
-
-    (use-package dired+
-      :ensure dired+)
-
-    (use-package dired-x
-      :config
-      (progn
-        (validate-setq dired-guess-shell-alist-user
-                       '(("\\.pdf\\'" "mupdf")
-                         ("\\.\\(?:djvu\\|eps\\)\\'" "evince")
-                         ("\\.\\(?:jpg\\|jpeg\\|png\\|gif\\|xpm\\)\\'" "eog")
-                         ("\\.\\(?:xcf\\)\\'" "gimp")
-                         ("\\.csv\\'" "libreoffice")
-                         ("\\.tex\\'" "pdflatex" "latex")
-                         ("\\.\\(?:mp4\\|mkv\\|avi\\|flv\\|ogv\\)\\(?:\\.part\\)?\\'" "vlc")
-                         ("\\.html?\\'" "conkeror")))))
-
-    (use-package dired-single
-      :ensure dired-single
-      :bind (:map dired-mode-map
-                  ("<return>" . dired-single-buffer)
-                  ("<mouse-1>" . dired-single-buffer))
-      :init
-      (progn
-        (bind-key "^"
-                  (function
-                   (lambda nil (interactive) (dired-single-buffer ".."))) dired-mode-map )))
-
-    (use-package wdired
-      :ensure wdired
-      :bind (:map dired-mode-map
-             ("r" . wdired-change-to-wdired-mode))
-      :config
-      (progn
-        (validate-setq wdired-allow-to-change-permissions t)))
-
-    (use-package dired-narrow
-      :ensure t
-      :diminish dired-narrow-mode
-      :bind (:map dired-mode-map
-                  ("/" . dired-narrow)))
-
-    (use-package gnus-dired
-      :commands (gnus-dired-attach gnus-dired-mode)
-      :bind (:map dired-mode-map
-                  ("a" . gnus-dired-attach)))
-
-    (use-package runner
-      :ensure runner)
-
-    (defvar mark-files-cache (make-hash-table :test #'equal))
-
-    (defun mark-similar-versions (name)
-      (let ((pat name))
-        (if (string-match "^\\(.+?\\)-[0-9._-]+$" pat)
-            (validate-setq pat (match-string 1 pat)))
-        (or (gethash pat mark-files-cache)
-            (ignore (puthash pat t mark-files-cache)))))
-
-    (defun dired-mark-similar-version ()
-      (interactive)
-      (validate-setq mark-files-cache (make-hash-table :test #'equal))
-      (dired-mark-sexp '(mark-similar-versions name)))
-
-    (defun dired-package-initialize ()
-      (unless (featurep 'runner)
-        (bind-key "M-!" 'async-shell-command dired-mode-map)
-        (unbind-key "M-s f" dired-mode-map)
-
-        (defadvice dired-omit-startup (after diminish-dired-omit activate)
-          "Make sure to remove \"Omit\" from the modeline."
-          (diminish 'dired-omit-mode) dired-mode-map)
-
-        ;; Omit files that Git would ignore
-        (defun dired-omit-regexp ()
-          (let ((file (expand-file-name ".git"))
-                parent-dir)
-            (while (and (not (file-exists-p file))
-                        (progn
-                          (validate-setq parent-dir
-                                         (file-name-directory
-                                          (directory-file-name
-                                           (file-name-directory file))))
-                          ;; Give up if we are already at the root dir.
-                          (not (string= (file-name-directory file)
-                                        parent-dir))))
-              ;; Move up to the parent dir and try again.
-              (validate-setq file (expand-file-name ".git" parent-dir)))
-            ;; If we found a change log in a parent, use that.
-            (if (file-exists-p file)
-                (let ((regexp (funcall dired-omit-regexp-orig))
-                      (omitted-files
-                       (shell-command-to-string "git clean -d -x -n")))
-                  (if (= 0 (length omitted-files))
-                      regexp
-                    (concat
-                     regexp
-                     (if (> (length regexp) 0)
-                         "\\|" "")
-                     "\\("
-                     (mapconcat
-                      #'(lambda (str)
-                          (concat
-                           "^"
-                           (regexp-quote
-                            (substring str 13
-                                       (if (= ?/ (aref str (1- (length str))))
-                                           (1- (length str))
-                                         nil)))
-                           "$"))
-                      (split-string omitted-files "\n" t)
-                      "\\|")
-                     "\\)")))
-              (funcall dired-omit-regexp-orig))))))
-
-    (add-hook 'dired-mode-hook 'dired-package-initialize)
-
-    (defun dired-double-jump (first-dir second-dir)
-      (interactive
-       (list (read-directory-name "First directory: "
-                                  (expand-file-name "~")
-                                  nil nil "/Downloads/")
-             (read-directory-name "Second directory: "
-                                  (expand-file-name "~")
-                                  nil nil "/")))
-      (dired first-dir)
-      (dired-other-window second-dir))
-    (bind-key "C-c J" 'dired-double-jump)
-
-    (defun dired-back-to-top ()
-      (interactive)
-      (goto-char (point-min))
-      (dired-next-line 4))
-
-    (define-key dired-mode-map
-      (vector 'remap 'beginning-of-buffer) 'dired-back-to-top)
-
-    (defun dired-jump-to-bottom ()
-      (interactive)
-      (goto-char (point-max))
-      (dired-next-line -1))
-
-    (define-key dired-mode-map
-      (vector 'remap 'end-of-buffer) 'dired-jump-to-bottom)))
-
-#+END_SRC
-** discover-my-major
-[2014-06-01 Sun 23:32]
-Discover key bindings and their meaning for the current Emacs major mode.
+** ansible
+[2017-08-26 Sa 14:24]
+Something for that horrible tool
 #+BEGIN_SRC emacs-lisp
-(use-package discover-my-major
-  :ensure discover-my-major
-  :commands discover-my-major
-  :bind ("C-h C-m" . discover-my-major))
+(use-package ansible
+  :ensure t)
 #+END_SRC
-** easypg
-EasyPG is a GnuPG interface for Emacs.
-Bookmark: [[http://www.emacswiki.org/emacs/EasyPG][EmacsWiki: Easy PG]]
+** avy-mode
+[2013-04-28 So 11:26]
+avy is a GNU Emacs package for jumping to visible text using a char-based decision tree.
 #+BEGIN_SRC emacs-lisp
-(use-package epa-file
+(use-package avy
+  :ensure avy
+  :commands (avy-goto-char avy-goto-char-2 avy-goto-line avy-goto-word-1 avy-goto-word-0 avy-isearch avy-goto-subword-0 avy-goto-subword-1 avy-copy-line avy-copy-region avy-move-line)
+  :bind (("H-SPC" . avy-goto-char-2)
+         ("M-g g" . avy-goto-line)
+         :map isearch-mode-map
+         ("C-y" . avy-isearch)
+         )
   :config
   (progn
-    (epa-file-enable)
-    ;; I took the following from [[http://www.emacswiki.org/emacs/EasyPG][EmacsWiki: Easy PG]]
-    (defadvice epg--start (around advice-epg-disable-agent disable)
-      "Don't allow epg--start to use gpg-agent in plain text
-    terminals . "
-      (if (display-graphic-p)
-          ad-do-it
-        (let ((agent (getenv "GPG_AGENT_INFO")))
-          (setenv "GPG_AGENT_INFO" nil) ; give us a usable text password prompt
-          ad-do-it
-          (setenv "GPG_AGENT_INFO" agent))))
-    (ad-enable-advice 'epg--start 'around 'advice-epg-disable-agent)
-    (ad-activate 'epg--start)
+    (validate-setq avy-all-windows 'all-frames)
+    (setq avi-keys '(?a ?s ?d ?e ?f ?h ?j ?k ?l ?n ?m ?v ?r ?u) )
     ))
 #+END_SRC
-** ediff
-[2013-04-21 So 20:36]
-ediff - don't start another frame
+** Browser
 #+BEGIN_SRC emacs-lisp
-(use-package ediff
-  :init
-  (progn
-    (defvar ctl-period-equals-map)
-    (define-prefix-command 'ctl-period-equals-map)
-    (bind-key "C-. =" 'ctl-period-equals-map)
-    (bind-key "C-. = c" 'compare-windows)) ; not an ediff command, but it fits
-
-  :bind (("C-. = b" . ediff-buffers)
-         ("C-. = B" . ediff-buffers3)
-         ("C-. = =" . ediff-files)
-         ("C-. = f" . ediff-files)
-         ("C-. = F" . ediff-files3)
-         ("C-. = r" . ediff-revision)
-         ("C-. = p" . ediff-patch-file)
-         ("C-. = P" . ediff-patch-buffer)
-         ("C-. = l" . ediff-regions-linewise)
-         ("C-. = w" . ediff-regions-wordwise))
-  :config (progn
-            (validate-setq ediff-window-setup-function 'ediff-setup-windows-plain)
-            (validate-setq ediff-split-window-function 'split-window-horizontally)
-            )
-)
-#+END_SRC
-** edit-server
-[2015-12-16 Wed 22:13]
-Allows chromium to "send" files (textbox inputs) to emacs to edit.
-#+BEGIN_SRC emacs-lisp :tangle no
-(use-package edit-server
-  :ensure t
-  :if window-system
-  :config
-  (progn
-    (validate-setq edit-server-new-frame t)
-    (edit-server-start)))
+  (use-package browse-url
+    :ensure t
+    :commands (browse-url)
+    :config
+    (progn
+      (validate-setq browse-url-browser-function (quote browse-url-generic))
+      (validate-setq browse-url-generic-program "/usr/bin/x-www-browser")))
 #+END_SRC
-** emms
 
-EMMS is the Emacs Multimedia System.
-#+BEGIN_SRC emacs-lisp :tangle no
-(require 'emms-source-file)
-(require 'emms-source-playlist)
-(require 'emms-info)
-(require 'emms-cache)
-(require 'emms-playlist-mode)
-(require 'emms-playing-time)
-(require 'emms-player-mpd)
-(require 'emms-playlist-sort)
-(require 'emms-mark)
-(require 'emms-browser)
-(require 'emms-lyrics)
-(require 'emms-last-played)
-(require 'emms-score)
-(require 'emms-tag-editor)
-(require 'emms-history)
-(require 'emms-i18n)
-
-(validate-setq emms-playlist-default-major-mode 'emms-playlist-mode)
-(add-to-list 'emms-track-initialize-functions 'emms-info-initialize-track)
-(emms-playing-time 1)
-(emms-lyrics 1)
-(add-hook 'emms-player-started-hook 'emms-last-played-update-current)
-;(add-hook 'emms-player-started-hook 'emms-player-mpd-sync-from-emms)
-(emms-score 1)
-(when (fboundp 'emms-cache) ; work around compiler warning
-  (emms-cache 1))
-(validate-setq emms-score-default-score 3)
-
-(defun emms-mpd-init ()
-  "Connect Emms to mpd."
-  (interactive)
-  (emms-player-mpd-connect))
-
-;; players
-(require 'emms-player-mpd)
-(validate-setq emms-player-mpd-server-name "localhost")
-(validate-setq emms-player-mpd-server-port "6600")
-(add-to-list 'emms-info-functions 'emms-info-mpd)
-(add-to-list 'emms-player-list 'emms-player-mpd)
-(validate-setq emms-volume-change-function 'emms-volume-mpd-change)
-(validate-setq emms-player-mpd-sync-playlist t)
-
-(validate-setq emms-source-file-default-directory "/var/lib/mpd/music")
-(validate-setq emms-player-mpd-music-directory "/var/lib/mpd/music")
-(validate-setq emms-info-auto-update t)
-(validate-setq emms-lyrics-scroll-p t)
-(validate-setq emms-lyrics-display-on-minibuffer t)
-(validate-setq emms-lyrics-display-on-modeline nil)
-(validate-setq emms-lyrics-dir "~/.emacs.d/var/lyrics")
-
-(validate-setq emms-last-played-format-alist
-      '(((emms-last-played-seconds-today) . "%H:%M")
-        (604800                           . "%a %H:%M") ; this week
-        ((emms-last-played-seconds-month) . "%d.%m.%Y")
-        ((emms-last-played-seconds-year)  . "%d.%m.%Y")
-        (t                                . "Never played")))
-
-;; Playlist format
-(defun my-describe (track)
-  (let* ((empty "...")
-         (name (emms-track-name track))
-         (type (emms-track-type track))
-         (short-name (file-name-nondirectory name))
-         (play-count (or (emms-track-get track 'play-count) 0))
-         (last-played (or (emms-track-get track 'last-played) '(0 0 0)))
-         (artist (or (emms-track-get track 'info-artist) empty))
-         (year (emms-track-get track 'info-year))
-         (playing-time (or (emms-track-get track 'info-playing-time) 0))
-         (min (/ playing-time 60))
-         (sec (% playing-time 60))
-         (album (or (emms-track-get track 'info-album) empty))
-         (tracknumber (emms-track-get track 'info-tracknumber))
-         (short-name (file-name-sans-extension
-                      (file-name-nondirectory name)))
-         (title (or (emms-track-get track 'info-title) short-name))
-         (rating (emms-score-get-score name))
-         (rate-char ?☭)
-         )
-    (format "%12s %20s (%.4s) [%-20s] - %2s. %-30s | %2d %s"
-            (emms-last-played-format-date last-played)
-            artist
-            year
-            album
-            (if (and tracknumber ; tracknumber
-                     (not (zerop (string-to-number tracknumber))))
-                (format "%02d" (string-to-number tracknumber))
-              "")
-            title
-            play-count
-            (make-string rating rate-char)))
-)
-
-(validate-setq emms-track-description-function 'my-describe)
-
-;; (global-set-key (kbd "C-<f9> t") 'emms-play-directory-tree)
-;; (global-set-key (kbd "H-<f9> e") 'emms-play-file)
-(global-set-key (kbd "H-<f9> <f9>") 'emms-mpd-init)
-(global-set-key (kbd "H-<f9> d") 'emms-play-dired)
-(global-set-key (kbd "H-<f9> x") 'emms-start)
-(global-set-key (kbd "H-<f9> v") 'emms-stop)
-(global-set-key (kbd "H-<f9> n") 'emms-next)
-(global-set-key (kbd "H-<f9> p") 'emms-previous)
-(global-set-key (kbd "H-<f9> o") 'emms-show)
-(global-set-key (kbd "H-<f9> h") 'emms-shuffle)
-(global-set-key (kbd "H-<f9> SPC") 'emms-pause)
-(global-set-key (kbd "H-<f9> a") 'emms-add-directory-tree)
-(global-set-key (kbd "H-<f9> b") 'emms-smart-browse)
-(global-set-key (kbd "H-<f9> l") 'emms-playlist-mode-go)
-
-(global-set-key (kbd "H-<f9> r") 'emms-toggle-repeat-track)
-(global-set-key (kbd "H-<f9> R") 'emms-toggle-repeat-playlist)
-(global-set-key (kbd "H-<f9> m") 'emms-lyrics-toggle-display-on-minibuffer)
-(global-set-key (kbd "H-<f9> M") 'emms-lyrics-toggle-display-on-modeline)
-
-(global-set-key (kbd "H-<f9> <left>") (lambda () (interactive) (emms-seek -10)))
-(global-set-key (kbd "H-<f9> <right>") (lambda () (interactive) (emms-seek +10)))
-(global-set-key (kbd "H-<f9> <down>") (lambda () (interactive) (emms-seek -60)))
-(global-set-key (kbd "H-<f9> <up>") (lambda () (interactive) (emms-seek +60)))
-
-(global-set-key (kbd "H-<f9> s u") 'emms-score-up-playing)
-(global-set-key (kbd "H-<f9> s d") 'emms-score-down-playing)
-(global-set-key (kbd "H-<f9> s o") 'emms-score-show-playing)
-(global-set-key (kbd "H-<f9> s s") 'emms-score-set-playing)
-
-(define-key emms-playlist-mode-map "u" 'emms-score-up-playing)
-(define-key emms-playlist-mode-map "d" 'emms-score-down-playing)
-(define-key emms-playlist-mode-map "o" 'emms-score-show-playing)
-(define-key emms-playlist-mode-map "s" 'emms-score-set-playing)
-(define-key emms-playlist-mode-map "r" 'emms-mpd-init)
-(define-key emms-playlist-mode-map "N"  'emms-playlist-new)
-
-(define-key emms-playlist-mode-map "x" 'emms-start)
-(define-key emms-playlist-mode-map "v" 'emms-stop)
-(define-key emms-playlist-mode-map "n" 'emms-next)
-(define-key emms-playlist-mode-map "p" 'emms-previous)
-
-(validate-setq emms-playlist-buffer-name "*EMMS Playlist*"
-      emms-playlist-mode-open-playlists t)
-
-;; Faces
-(if (window-system)
-    ((lambda ()
-       (set-face-attribute
-        'emms-browser-artist-face nil
-        :family "Arno Pro")
-       )
-))
-
-(validate-setq emms-player-mpd-supported-regexp
-      (or (emms-player-mpd-get-supported-regexp)
-          (concat "\\`http://\\|"
-                  (emms-player-simple-regexp
-                   "m3u" "ogg" "flac" "mp3" "wav" "mod" "au" "aiff"))))
-(emms-player-set emms-player-mpd 'regex emms-player-mpd-supported-regexp)
-
-#+END_SRC
-** Emacs shell
+** CANCELLED Emacs shell                                         :CANCELLED:
+CLOSED: [2017-08-26 Sa 13:55]
+:LOGBOOK:
+- State "CANCELLED"  from              [2017-08-26 Sa 13:55] \\
+  Not using it at the moment
+:END:
 Basic settings for emacs integrated shell
-#+BEGIN_SRC emacs-lisp :tangle no
+#+BEGIN_SRC emacs-lisp
 (use-package eshell
   :defer t
+  :defines eshell-path-env
   :commands eshell
   :init
   (progn
@@ -1683,6 +1272,7 @@ Basic settings for emacs integrated shell
     )
   :config
   (progn
+    (setq eshell-path-env path-from-shell) ; for eshell users
     (defalias 'emacs 'find-file)
     (defalias 'ec 'find-file)
     (defalias 'e 'find-file)
@@ -1766,29 +1356,9 @@ Basic settings for emacs integrated shell
     (validate-setq eshell-prompt-function 'eshell/my-prompt)
     (validate-setq eshell-highlight-prompt nil)
     (validate-setq eshell-prompt-regexp "^[^#$\n]+[#$] ")))
-
-#+END_SRC
-
-*** Isearch related
-Incremental search is great, but annoyingly you need to type whatever
-you want. If you want to search for just the next (or previous)
-occurence of what is at your cursor position use the following.
-*C-x* will insert the current word while *M-up* and *M-down* will just
-jump to the next/previous occurence of it.
-#+BEGIN_SRC emacs-lisp
-(bind-key "C-x" 'sacha/isearch-yank-current-word isearch-mode-map)
-(bind-key* "<M-up>" 'sacha/search-word-backward)
-(bind-key* "<M-down>" 'sacha/search-word-forward)
 #+END_SRC
 
-*** Frame configuration
-I want to see the buffername and its size, not the host I am on in my
-frame title.
-#+BEGIN_SRC emacs-lisp
-(validate-setq frame-title-format "%b (%i)")
-#+END_SRC
-
-*** Protect some buffers
+** keep-buffers
 I don't want some buffers to be killed, **scratch** for example.
 In the past I had a long function that just recreated them, but the
 =keep-buffers= package is easier.
@@ -1802,29 +1372,27 @@ In the past I had a long function that just recreated them, but the
     ))
 #+END_SRC
 
-*** yes-or-no-p
-Emas usually wants you to type /yes/ or /no/ fully. What a mess, I am
-lazy.
-#+BEGIN_SRC emacs-lisp
-(defalias 'yes-or-no-p 'y-or-n-p)
-#+END_SRC
-
-*** Language/i18n stuff
-In this day and age, UTF-8 is the way to go.
+** midnight mode
 #+BEGIN_SRC emacs-lisp
-(set-language-environment 'utf-8)
-(set-default-coding-systems 'utf-8)
-(set-terminal-coding-system 'utf-8)
-(set-keyboard-coding-system 'utf-8)
-(set-clipboard-coding-system 'utf-8)
-(prefer-coding-system 'utf-8)
-(set-charset-priority 'unicode)
-(validate-setq default-process-coding-system '(utf-8-unix . utf-8-unix))
-(when (display-graphic-p)
-  (validate-setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING)))
+  (use-package midnight
+    :ensure t
+    :init
+    (midnight-mode)
+    :config
+    (progn
+      (validate-setq clean-buffer-list-kill-buffer-names (quote ("*Help*" "*Apropos*"
+                                                                 "*Man " "*Buffer List*"
+                                                                 "*Compile-Log*"
+                                                                 "*info*" "*vc*"
+                                                                 "*vc-diff*" "*diff*"
+                                                                 "*Customize"
+                                                                 "*tramp/" "*debug "
+                                                                 "*magit" "*Calendar"
+                                                                 "*eww*")))
+      (midnight-delay-set 'midnight-delay (* 14 60 60))
+      ))
 #+END_SRC
-
-*** Hilight matching parentheses
+** mic-paren
 While I do have the nifty shortcut to jump to the other parentheses,
 hilighting them makes it obvious where they are.
 #+BEGIN_SRC emacs-lisp
@@ -1832,3685 +1400,4370 @@ hilighting them makes it obvious where they are.
   :config
   (paren-activate))
 #+END_SRC
-*** Kill other buffers
-While many editors allow you to close "all the other files, not the one
-you are in", emacs doesn't have this... Except, now it will.
-(Update 30.05.2014: Not used ever, deactivated)
-#+BEGIN_SRC emacs-lisp :tangle no
-(bind-key "C-c k" 'prelude-kill-other-buffers)
-#+END_SRC
-*** Scrolling
-Default scrolling behaviour in emacs is a bit annoying, who wants to
-jump half-windows?
-#+BEGIN_SRC emacs-lisp
-(validate-setq scroll-margin 3)
-(validate-setq scroll-conservatively 100000)
-(validate-setq scroll-up-aggressively 0.0)
-(validate-setq scroll-down-aggressively 0.0)
-(validate-setq scroll-preserve-screen-position 'always)
-#+END_SRC
-
-*** Copy/Paste with X
-[2013-04-09 Di 23:31]
-The default how emacs handles cutting/pasting with the primary selection
-changed in emacs24. I am used to the old way, so get it back.
-#+BEGIN_SRC emacs-lisp
-(validate-setq select-enable-primary t)
-(validate-setq select-enable-clipboard nil)
-(validate-setq interprogram-paste-function 'x-cut-buffer-or-selection-value)
-(validate-setq mouse-drag-copy-region t)
-#+END_SRC
-*** Global keyboard changes not directly related to a mode
-Disable /suspend_frame/ function, I dislike it.
-#+BEGIN_SRC emacs-lisp
-(unbind-key "C-z")
-(unbind-key "C-x C-z")
-#+END_SRC
-
-http://endlessparentheses.com/kill-entire-line-with-prefix-argument.html?source=rss
-#+BEGIN_SRC emacs-lisp
-(defmacro bol-with-prefix (function)
-  "Define a new function which calls FUNCTION.
-Except it moves to beginning of line before calling FUNCTION when
-called with a prefix argument. The FUNCTION still receives the
-prefix argument."
-  (let ((name (intern (format "endless/%s-BOL" function))))
-    `(progn
-       (defun ,name (p)
-         ,(format
-           "Call `%s', but move to BOL when called with a prefix argument."
-           function)
-         (interactive "P")
-         (when p
-           (forward-line 0))
-         (call-interactively ',function))
-       ',name)))
-
-(global-set-key [remap paredit-kill] (bol-with-prefix paredit-kill))
-(global-set-key [remap org-kill-line] (bol-with-prefix org-kill-line))
-(global-set-key [remap kill-line] (bol-with-prefix kill-line))
-#+END_SRC
-
-Default of *C-k* is to kill from the point to the end of line. If
-'kill-whole-line' (see [[id:0a1560d9-7e55-47ab-be52-b3a8b8eea4aa][the kill-whole-line part in "General stuff"]]) is
-set, including newline. But to kill the entire line, one still needs a
-*C-a* in front of it. So I change it, by defining a function to do just this for
-me. Lazyness++.
-#+BEGIN_SRC emacs-lisp :tangle no
-(defun kill-entire-line ()
-  "Kill this entire line (including newline), regardless of where point is within the line."
-  (interactive)
-  (beginning-of-line)
-  (kill-line)
-  (back-to-indentation))
-
-(bind-key* "C-k" 'kill-entire-line)
-(global-set-key [remap kill-whole-line] 'kill-entire-line)
-#+END_SRC
-
-And the same is true when I'm in org-mode, which has an own kill function...
-(the keybinding happens later, after org-mode is loaded fully)
-#+BEGIN_SRC emacs-lisp :tangle no
-(defun jj-org-kill-line (&optional arg)
-  "Kill the entire line, regardless of where point is within the line, org-mode-version"
-  (interactive "P")
-  (beginning-of-line)
-  (org-kill-line arg)
-  (back-to-indentation)
-  )
-#+END_SRC
-
-I really hate tabs, so I don't want any indentation to try using them.
-And in case a project really needs them, I can change it just for that
-file/project, but luckily none of those I work in is as broken.
-#+BEGIN_SRC emacs-lisp
-(setq-default indent-tabs-mode nil)
-#+END_SRC
-
-Make the % key jump to the matching {}[]() if on another, like vi, see [[id:b6e6cf73-9802-4a7b-bd65-fdb6f9745319][the function]]
-#+BEGIN_SRC emacs-lisp
-(bind-key* "M-5" 'match-paren)
-#+END_SRC
-
-Instead of the default "mark-defun" I want a more readline-like setting.
-#+BEGIN_SRC emacs-lisp
-(bind-key "C-M-h" 'backward-kill-word)
-#+END_SRC
-
-Align whatever with a regexp.
-#+BEGIN_SRC emacs-lisp
-(bind-key "C-x \\" 'align-regexp)
-#+END_SRC
-
-Font size changes
-#+BEGIN_SRC emacs-lisp
-(bind-key "C-+" 'text-scale-increase)
-(bind-key "C--" 'text-scale-decrease)
-#+END_SRC
-
-Regexes are too useful, so use the regex search by default.
-Disabled, see ivy-mode.
-#+begin_src emacs-lisp :tangle no
-(bind-key "C-s"   'isearch-forward-regexp)
-(bind-key "C-r"   'isearch-backward-regexp)
-(bind-key "C-M-s" 'isearch-forward)
-(bind-key "C-M-r" 'isearch-backward)
-#+end_src
-
-Rgrep is infinitely useful in multi-file projects.
-#+begin_src emacs-lisp
-(bind-key "C-x C-g" 'rgrep)
-#+end_src
-
-Easy way to move a line up - or down. Simpler than dealing with C-x C-t
-AKA transpose lines.
-#+BEGIN_SRC emacs-lisp
-(bind-key "<M-S-up>"  'move-line-up)
-(bind-key "<M-S-down>" 'move-line-down)
-#+END_SRC
-
-"Pull" lines up, join them
-#+BEGIN_SRC emacs-lisp
-(defun join-line-or-lines-in-region ()
-  "Join this line or the lines in the selected region.
-Joins single lines in reverse order to the default, ie. pulls the next one up."
-  (interactive)
-  (cond ((region-active-p)
-         (let ((min (line-number-at-pos (region-beginning))))
-           (goto-char (region-end))
-           (while (> (line-number-at-pos) min)
-             (join-line ))))
-        (t (let ((current-prefix-arg '(4)))
-             (call-interactively 'join-line)))))
-(bind-key "M-j" 'join-line-or-lines-in-region)
-#+END_SRC
-
-When I press Enter I almost always want to go to the right indentation on the next line.
-#+BEGIN_SRC emacs-lisp
-(bind-key "RET" 'newline-and-indent)
-#+END_SRC
-
-Easier undo, and i don't need suspend-frame
-#+BEGIN_SRC emacs-lisp
-(bind-key "C-z" 'undo)
-#+END_SRC
-
-Window switching, go backwards. (C-x o goes to the next window)
-#+BEGIN_SRC emacs-lisp
-(bind-key "C-x O" (lambda ()
-                    (interactive)
-                    (other-window -1)))
-#+END_SRC
-
-Edit file as root
-#+BEGIN_SRC emacs-lisp
-(bind-key "C-x C-r" 'prelude-sudo-edit)
-#+END_SRC
-
-M-space is bound to just-one-space, which is great for programming. What
-it does is remove all spaces around the cursor, except for one. But to
-be really useful, it also should include newlines. It doesn’t do this by
-default. Rather, you have to call it with a negative argument. Sure
-not, bad Emacs.
-#+BEGIN_SRC emacs-lisp
-(bind-key "M-SPC" 'just-one-space-with-newline)
-#+END_SRC
-
-Count which commands I use how often.
-#+BEGIN_SRC emacs-lisp
-(use-package keyfreq
-  :ensure keyfreq
-  :config
-  (progn
-    (validate-setq keyfreq-file (expand-file-name "keyfreq" jj-cache-dir))
-    (validate-setq keyfreq-file-lock (expand-file-name "keyfreq.lock" jj-cache-dir))
-    (keyfreq-mode 1)
-    (keyfreq-autosave-mode 1)))
-#+END_SRC
-
-Duplicate current line
-#+BEGIN_SRC emacs-lisp
-(defun duplicate-line ()
-  "Insert a copy of the current line after the current line."
-  (interactive)
-  (save-excursion
-    (let ((line-text (buffer-substring-no-properties
-                      (line-beginning-position)
-                      (line-end-position))))
-      (move-end-of-line 1)
-      (newline)
-      (insert line-text))))
-
-(bind-key "C-c p" 'duplicate-line)
-#+END_SRC
-
-Smarter move to the beginning of the line. That is, it first moves to
-the beginning of the line - and on second keypress it goes to the
-first character on line.
-#+BEGIN_SRC emacs-lisp
-(defun smarter-move-beginning-of-line (arg)
-  "Move point back to indentation of beginning of line.
 
-Move point to the first non-whitespace character on this line.
-If point is already there, move to the beginning of the line.
-Effectively toggle between the first non-whitespace character and
-the beginning of the line.
-
-If ARG is not nil or 1, move forward ARG - 1 lines first.  If
-point reaches the beginning or end of the buffer, stop there."
-  (interactive "^p")
-  (validate-setq arg (or arg 1))
-
-  ;; Move lines first
-  (when (/= arg 1)
-    (let ((line-move-visual nil))
-      (forward-line (1- arg))))
-
-  (let ((orig-point (point)))
-    (back-to-indentation)
-    (when (= orig-point (point))
-      (move-beginning-of-line 1))))
-
-;; remap C-a to `smarter-move-beginning-of-line'
-(global-set-key [remap move-beginning-of-line]
-                'smarter-move-beginning-of-line)
-
-#+END_SRC
-
-Easily copy characters from the previous nonblank line, starting just
-above point. With a prefix argument, only copy ARG characters (never
-past EOL), no argument copies rest of line.
+** Paradox
+Paradox is a nicer interface to the package system
 #+BEGIN_SRC emacs-lisp
-(require 'misc)
-(bind-key "H-y" 'copy-from-above-command)
+ (use-package paradox
+   :ensure t
+   :commands (paradox-list-packages paradox-install paradox-upgrade-packages paradox-enable)
+   :config
+   (progn
+     (setq paradox-github-token t)
+     ))
+   :defer 5
+   :init
+     (paradox-enable)
+    
 #+END_SRC
-
-Open a new X Terminal pointing to the directory of the current
-buffers path.
+** Shell (ZSH)
+[2013-04-23 Tue 16:43]
+Shell. zsh in my case.
 #+BEGIN_SRC emacs-lisp
-(bind-key "H-t" 'jj-open-shell)
+  (use-package shell
+    :commands (shell)
+    :defer t
+    :config
+    (progn
+       (validate-setq shell-file-name "zsh")
+       (validate-setq shell-command-switch "-c")
+       (validate-setq explicit-shell-file-name shell-file-name)
+       (setenv "SHELL" shell-file-name)
+       (setq explicit-sh-args '("-login" "-i"))
+       (add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
+       (validate-setq comint-scroll-to-bottom-on-input t)  ; always insert at the bottom
+       (validate-setq comint-scroll-to-bottom-on-output t) ; always add output at the bottom
+       (validate-setq comint-scroll-show-maximum-output t) ; scroll to show max possible output
+       (validate-setq comint-completion-autolist t)        ; show completion list when ambiguous
+       (validate-setq comint-input-ignoredups t)           ; no duplicates in command history
+       (validate-setq comint-completion-addsuffix t)       ; insert space/slash after file completion
+       (validate-setq comint-buffer-maximum-size 20000)    ; max lenght of the buffer in lines
+       (validate-setq comint-prompt-read-only nil)         ; if this is t, it breaks shell-command
+       ))
 #+END_SRC
 
-Align code
-#+BEGIN_SRC emacs-lisp
-(bind-key "H-a" 'align-code)
-#+END_SRC
+** ascii
+ [2014-05-21 Wed 00:33]
+ #+BEGIN_SRC emacs-lisp
+ (use-package ascii
+   :ensure t
+   :commands (ascii-on ascii-toggle ascii-display)
+   :bind (("C-c e A" . ascii-toggle))
+   :init
+   (progn
+     (defun ascii-toggle ()
+       (interactive)
+       (defvar ascii-display nil)
+       (if ascii-display
+           (ascii-off)
+         (ascii-on)))))
+ #+END_SRC
+** auctex
+ #+BEGIN_SRC emacs-lisp
+ (use-package tex
+   :ensure auctex
+   :mode ("\\.tex\\'" . latex-mode)
+   :commands (latex-mode LaTeX-mode plain-tex-mode)
+   :config
+   (progn
+     (add-hook 'LaTeX-mode-hook #'LaTeX-preview-setup)
+     (add-hook 'LaTeX-mode-hook #'flyspell-mode)
+     (add-hook 'LaTeX-mode-hook #'turn-on-reftex)
+     (setq TeX-auto-save t
+           TeX-parse-self t
+           TeX-save-query nil
+           TeX-PDF-mode t)
+     (setq-default TeX-master nil)
+
+     ;; Compilation command
+     (add-hook 'LaTeX-mode-hook (lambda () (setq compile-command "latexmk -pdf")))))
+ #+END_SRC
+** auto-complete mode
+ [2013-04-27 Sa 16:33]
+ And aren't we all lazy? I definitely am, and I like my emacs doing as
+ much possible work for me as it can.
+ So here, auto-complete-mode, which lets emacs do this, based on what I
+ already had typed.
+ #+BEGIN_SRC emacs-lisp
+ (use-package auto-complete
+   :ensure auto-complete
+   :commands auto-complete-mode
+   :bind (("C-n" . ac-next)
+          ("C-p" . ac-previous)
+          :map ac-complete-mode-map
+          ("\t" . ac-expand)
+          ("\r" . ac-complete)
+          ("M-n" . ac-next)
+          ("M-p" . ac-previous)
+          :map ac-mode-map
+          ("M-TAB" . auto-complete)
+          :map ac-completing-map
+          ("C-s" . ac-isearch))
+   :init
+   (progn
+     (auto-complete-mode t))
+   :config
+   (progn
+     (ac-config-default)
+     ;; hook AC into completion-at-point
+     (defun sanityinc/auto-complete-at-point ()
+       (when (and (not (minibufferp))
+                  (fboundp 'auto-complete-mode)
+                  auto-complete-mode)
+         (auto-complete)))
+     (defun set-auto-complete-as-completion-at-point-function ()
+       (add-to-list 'completion-at-point-functions 'sanityinc/auto-complete-at-point))
+     ;; Exclude very large buffers from dabbrev
+     (defun sanityinc/dabbrev-friend-buffer (other-buffer)
+       (< (buffer-size other-buffer) (* 1 1024 1024)))
+
+     (use-package pos-tip
+       :ensure t)
+
+     (validate-setq ac-comphist-file (expand-file-name "ac-comphist.dat" jj-cache-dir))
+     (validate-setq ac-use-comphist t)
+     (validate-setq ac-expand-on-auto-complete nil)
+     (validate-setq ac-dwim t)
+     (validate-setq ac-auto-start 3)
+     (validate-setq ac-delay 0.3)
+     (validate-setq ac-menu-height 15)
+     (validate-setq ac-quick-help-delay 0.5)
+     (validate-setq ac-use-fuzzy t)
+
+     (ac-flyspell-workaround)
+
+     ;; use 't when auto-complete is disabled
+     (validate-setq tab-always-indent 'complete)
+     (add-to-list 'completion-styles 'initials t)
+
+      ;; Use space and punctuation to accept the current the most likely completion.
+     (setq auto-completion-syntax-alist (quote (global accept . word)))
+      ;; Avoid completion for short trivial words.
+     (setq auto-completion-min-chars (quote (global . 3)))
+     (setq completion-use-dynamic t)
+
+     (add-hook 'auto-complete-mode-hook 'set-auto-complete-as-completion-at-point-function)
+
+     ;; Exclude very large buffers from dabbrev
+     (setq dabbrev-friend-buffer-function 'sanityinc/dabbrev-friend-buffer)
+
+     (use-package ac-dabbrev
+       :ensure t)
+
+     (set-default 'ac-sources
+                  '(ac-source-imenu
+                    ac-source-dictionary
+                    ac-source-words-in-buffer
+                    ac-source-words-in-same-mode-buffers
+     ;               ac-source-words-in-all-buffer
+                    ac-source-dabbrev))
+
+     (dolist (mode '(magit-log-edit-mode log-edit-mode org-mode text-mode haml-mode
+                     sass-mode yaml-mode csv-mode espresso-mode haskell-mode 
+                     html-mode nxml-mode sh-mode smarty-mode clojure-mode go-mode
+                     lisp-mode textile-mode markdown-mode tuareg-mode python-mode
+                     js3-mode css-mode less-css-mode sql-mode ielm-mode))
+       (add-to-list 'ac-modes mode))
+
+     (hook-into-modes 'auto-complete-mode '(latex-mode-hook LaTeX-mode-hook prog-mode-hook html-mode lisp-mode css-mode org-mode-hook))))
+ #+END_SRC
 
-Insert date
-#+BEGIN_SRC emacs-lisp
-(bind-key "C-c d" 'insert-date)
-#+END_SRC
+** auto-revert
+ When files change outside emacs for whatever reason I want emacs to deal
+ with it. Not to have to revert buffers myself
+ #+BEGIN_SRC emacs-lisp
+ (use-package autorevert
+   :commands auto-revert-mode
+   :diminish auto-revert-mode
+   :init
+   (progn
+     (validate-setq global-auto-revert-mode t)
+     (setq global-auto-revert-non-file-buffers t)
+     (global-auto-revert-mode)))
+ #+END_SRC
+
+** CANCELLED backups                                             :CANCELLED:
+CLOSED: [2017-08-26 Sa 14:41]
+ Emacs should keep backup copies of files I edit, but I do not want them
+ to clutter up the filesystem everywhere. So I put them into one defined
+ place, backup-directory, which even contains my username (for systems
+ where =temporary-file-directory= is not inside my home).
+ #+BEGIN_SRC emacs-lisp :tangle no
+ (use-package backups-mode
+   :load-path "elisp/backups-mode"
+   :disabled t
+   :bind   (("\C-cv" . save-version)
+            ("\C-cb" . list-backups)
+            ("\C-ck" . kill-buffer-prompt)
+            ("\C-cw" . backup-walker-start))
+   :init
+   (progn
+     (validate-setq backup-directory jj-backup-directory)
+ ;    (validate-setq tramp-backup-directory (concat jj-backup-directory "/tramp"))
+ ;    (if (not (file-exists-p tramp-backup-directory))
+ ;        (make-directory tramp-backup-directory))
+ ;    (validate-setq tramp-backup-directory-alist `((".*" . ,tramp-backup-directory)))
+     (validate-setq backup-directory-alist `(("." . ,jj-backup-directory)))
+     (validate-setq auto-save-list-file-prefix (concat jj-backup-directory ".auto-saves-"))
+     (validate-setq auto-save-file-name-transforms `((".*" ,jj-backup-directory t)))
+
+     (validate-setq version-control t)     ;; Use version numbers for backups
+     (validate-setq kept-new-versions 10)  ;; Number of newest versions to keep
+     (validate-setq kept-old-versions 2)   ;; Number of oldest versions to keep
+     (validate-setq delete-old-versions t) ;; Ask to delete excess backup versions?
+     (validate-setq backup-by-copying t)
+     (validate-setq backup-by-copying-when-linked t) ;; Copy linked files, don't rename.
+     (validate-setq make-backup-files t)
+
+     (defadvice kill-buffer (around kill-buffer)
+       "Always save before killing a file buffer"
+       (when (and (buffer-modified-p)
+                  (buffer-file-name)
+                  (file-exists-p (buffer-file-name)))
+         (save-buffer))
+       ad-do-it)
+     (ad-activate 'kill-buffer)
+
+     (defadvice save-buffers-kill-emacs (around save-buffers-kill-emacs)
+       "Always save before killing emacs"
+       (save-some-buffers t)
+       ad-do-it)
+     (ad-activate 'save-buffers-kill-emacs)
+
+     (defun kill-buffer-prompt ()
+       "Allows one to kill a buffer without saving it.
+ This is necessary since once you start backups-mode all file based buffers
+ are saved automatically when they are killed"
+       (interactive)
+       (if (and (buffer-modified-p) (buffer-file-name) (file-exists-p (buffer-file-name)) (y-or-n-p "Save buffer?"))
+           (save-buffer)
+         (set-buffer-modified-p nil))
+       (kill-buffer))
+
+     (validate-setq backup-enable-predicate
+           (lambda (name)
+             (and (normal-backup-enable-predicate name)
+                  (not
+                   (let ((method (file-remote-p name 'method)))
+                     (when (stringp method)
+                       (member method '("su" "sudo"))))))))))
+
+ #+END_SRC
+** bbdb
+ [2017-06-27 Di 23:10]
+ #+BEGIN_SRC emacs-lisp
+ (use-package bbdb
+   :ensure t
+   :commands (bbdb)
+   :config
+   (progn
+;     (use-package bbdb-hooks)
+     (use-package bbdb-message)
+     (use-package bbdb-gnus)
+     (use-package bbdb-com)
+
+     (add-hook 'gnus-startup-hook 'bbdb-insinuate-gnus)
+     ;(add-hook 'message-setup-hook 'bbdb-define-all-aliases)
+
+     (setq bbdb-add-mails t)
+     (setq bbdb-canonicalize-redundant-mails t)
+     (setq bbdb-complete-mail-allow-cycling t)
+     (setq bbdb-complete-name-allow-cycling t)
+     (setq bbdb-default-area-code 661)
+     (setq bbdb-dial-local-prefix "0")
+     (setq bbdb-file-coding-system 'utf-8)
+     (setq bbdb-hashtable-size 104729)
+     (setq bbdb-ignore-messages-alist '(("To" . "\\(\\(\\(joerg\\)\\(\\.jaspert\\)?\\)\\|root\\|gnus\\)@\\(debian\\.org\\|ganneff\\.de\\|debconf\\.org\\|spi-inc\\.org\\)")))
+     (setq bbdb-new-mails-primary t)
+     (setq bbdb-notice-auto-save-file t)
+     (setq bbdb-notice-mail-hook 'bbdb-auto-notes-hook)
+     (setq bbdb-phone-style nil)
+     (setq bbdb-pop-up-window-size 6)
+     (setq bbdb-user-mail-names "\\(\\(\\(joerg\\)\\(\\.jaspert\\)?\\)\\|root\\|gnus\\)@\\(debian\\.org\\|ganneff\\.de\\|debconf\\.org\\|spi-inc\\.org\\)")
+     (setq bbdb/gnus-summary-known-poster-mark "+")
+     (setq bbdb/gnus-summary-mark-known-posters t)
+     (setq bbdb/gnus-summary-prefer-real-names t)
+     (setq bbdb/news-auto-create-p 'bbdb-ignore-most-messages-hook)
+     (setq bbdb-auto-notes-rules
+           '(("user-agent" (".*" interface 0))
+             ("Organization"  (".*" company 0))
+             ("x-mailer" (".*" interface 0))
+             ("x-newsreader" (".*" interface 0))
+             ("X-URL"         (".*" url 0))
+             ("newsgroups" ("\\\\([^,]*\\\\),?" posted-to "\\\\1" t))
+             ("xref" ("\\\\b[^ ]+:[0-9]+.*" seen-in 0))))
+     (put 'seen-in 'field-separator "; ")
+     (put 'interface 'field-seperator "; ")
+     )
+   )
+ #+END_SRC
+** CANCELLED browse-kill-ring                                    :CANCELLED:
+CLOSED: [2017-08-26 Sat 14:46]
+:LOGBOOK:
+- State "CANCELLED"  from              [2017-08-26 Sat 14:46] \\
+  deactivated
+:END:
+ [2014-12-11 Thu 11:31]
+ Currently replaced with counsel, see Ivy
+ #+BEGIN_SRC emacs-lisp :tangle no
+ (use-package browse-kill-ring
+   :ensure t
+   :commands (browse-kill-ring browse-kill-ring-mode)
+   :bind ("M-y" . browse-kill-ring)
+   )
+ #+END_SRC
+** CANCELLED calendar                                            :CANCELLED:
+CLOSED: [2017-08-26 Sat 14:47]
+:LOGBOOK:
+- State "CANCELLED"  from              [2017-08-26 Sat 14:47]
+:END:
+ [2014-06-10 Tue 22:20]
+ #+BEGIN_SRC emacs-lisp
+ (use-package calendar
+   :commands (cal/insert)
+   :bind ("C-c c" . cal/insert)
+   :config
+   (progn
+     ; Weeks start on Monday, not sunday.
+     (validate-setq calendar-week-start-day 1)
+     (validate-setq calendar-date-style 'european)
+
+     ; Display ISO week numbers in Calendar Mode
+     (copy-face font-lock-constant-face 'calendar-iso-week-face)
+     (set-face-attribute 'calendar-iso-week-face nil :height 0.7)
+     (validate-setq calendar-intermonth-text
+           '(propertize
+             (format "%2d"
+                     (car
+                      (calendar-iso-from-absolute
+                       (calendar-absolute-from-gregorian (list month day year)))))
+             'font-lock-face 'calendar-iso-week-face))
+     (copy-face 'default 'calendar-iso-week-header-face)
+     (set-face-attribute 'calendar-iso-week-header-face nil :height 0.7)
+     (validate-setq calendar-intermonth-header
+           (propertize "Wk"                  ; or e.g. "KW" in Germany
+                       'font-lock-face 'calendar-iso-week-header-face))))
+
+ #+END_SRC
+** corral
+ [2015-10-15 Thu 11:34]
+ Corral is a lightweight package that lets you quickly wrap parentheses
+ and other delimiters around text, intuitively surrounding what you
+ want it to using just two commands.
+ #+BEGIN_SRC emacs-lisp
+ (use-package corral
+   :ensure corral
+   :bind (("C-c c" . hydra-corral/body))
+   :config
+   (progn
+     ; Interpret # and * as part of the word
+     (validate-setq corral-syntax-entries '((?# "_")
+                                   (?* "_")
+                                   (?$ ".")
+                                   (?/ ".")))
+     (defhydra hydra-corral (:columns 4)
+       "Corral"
+       ("(" corral-parentheses-backward "Back")
+       (")" corral-parentheses-forward "Forward")
+       ("[" corral-brackets-backward "Back")
+       ("]" corral-brackets-forward "Forward")
+       ("{" corral-braces-backward "Back")
+       ("}" corral-braces-forward "Forward")
+       ("\"" corral-double-quotes-backward "Back")
+       ("2" corral-double-quotes-forward "Forward")
+       ("'" corral-single-quotes-backward "Back")
+       ("#" corral-single-quotes-forward "Forward")
+       ("." hydra-repeat "Repeat"))
+     ))
+ #+END_SRC
+** crontab-mode
+ [2013-05-21 Tue 23:18]
+ #+BEGIN_SRC emacs-lisp
+ (use-package crontab-mode
+   :ensure crontab-mode
+   :commands crontab-mode
+   :mode ("\\.?cron\\(tab\\)?\\'" . crontab-mode))
+ #+END_SRC
+
+** CANCELLED css                                                 :CANCELLED:
+CLOSED: [2017-08-26 Sat 14:50]
+:LOGBOOK:
+- State "CANCELLED"  from              [2017-08-26 Sat 14:50] \\
+  web mode it is
+:END:
+ web-mode takes over, see [[*web-mode][web-mode]]
+ #+BEGIN_SRC emacs-lisp :tangle no
+ (use-package css-mode
+   :mode ("\\.css\\'" . css-mode)
+   :defer t
+   :config
+   (progn
+   ;;; CSS flymake
+     (use-package flymake-css
+       :ensure flymake-css
+       :config
+       (progn
+         (defun maybe-flymake-css-load ()
+           "Activate flymake-css as necessary, but not in derived modes."
+           (when (eq major-mode 'css-mode)
+             (flymake-css-load)))
+         (add-hook 'css-mode-hook 'maybe-flymake-css-load)))
+     ;;; Auto-complete CSS keywords
+     (eval-after-load 'auto-complete
+       '(progn
+          (dolist (hook '(css-mode-hook sass-mode-hook scss-mode-hook))
+            (add-hook hook 'ac-css-mode-setup))))))
+ #+END_SRC
 
-Another key for indenting
-#+BEGIN_SRC emacs-lisp
-(bind-key "H-i" 'indent-region)
-#+END_SRC
+** cua
+ I know that this lets it look "more like windows", but I don't much care
+ about its paste/copy/cut keybindings, the really nice part is the great
+ support for rectangular regions, which I started to use a lot since I
+ know this mode. The normal keybindings for those are just to useless.
+ #+BEGIN_SRC emacs-lisp
+ (cua-mode t)
+ (validate-setq cua-enable-cua-keys (quote shift))
+ #+END_SRC
+
+ Luckily cua-mode easily supports this, with the following line I just
+ get the CUA selection and rectangle stuff, not the keybindings. Yes,
+ even though the above =cua-enable-cua-keys= setting would only enable
+ them if the selection is done when the region was marked with a shifted
+ movement keys.
+ #+BEGIN_SRC emacs-lisp
+ (cua-selection-mode t)
+ #+END_SRC
 
-Clean all whitespace stuff
-#+BEGIN_SRC emacs-lisp
-(bind-key "H-w" 'whitespace-cleanup)
-#+END_SRC
+** Debian related
+ #+BEGIN_SRC emacs-lisp
+   (require 'dpkg-dev-el-loaddefs nil 'noerror)
+   (require 'debian-el-loaddefs nil 'noerror)
 
-Comment/Uncomment
-#+BEGIN_SRC emacs-lisp
-(bind-key "H-c" 'comment-dwim)
-#+END_SRC
+   (setq debian-changelog-full-name "Joerg Jaspert")
+   (setq debian-changelog-mailing-address "joerg@debian.org")
+ #+END_SRC
 
-Show keystrokes in progress
-#+BEGIN_SRC emacs-lisp
-(validate-setq echo-keystrokes 0.1)
-#+END_SRC
-**** Overwrite mode
-Usually you can press the *Ins*ert key, to get into overwrite mode. I
-don't like that, have broken much with it and so just forbid it by
-disabling that.
-#+BEGIN_SRC emacs-lisp
-(unbind-key "<insert>")
-(unbind-key "<kp-insert>")
-#+END_SRC
+** diff-mode
+ #+BEGIN_SRC emacs-lisp
+ (use-package diff-mode
+   :commands diff-mode
+   :mode (("\\.diff" . diff-mode)))
+ #+END_SRC
 
-*** Easily navigate sillyCased words
-#+BEGIN_SRC emacs-lisp
-(global-subword-mode 1)
-#+END_SRC
-*** Delete file of current buffer, then kill buffer
-[2014-06-14 Sat 23:03]
-#+BEGIN_SRC emacs-lisp
-(defun delete-current-buffer-file ()
-  "Removes file connected to current buffer and kills buffer."
-  (interactive)
-  (let ((filename (buffer-file-name))
-        (buffer (current-buffer))
-        (name (buffer-name)))
-    (if (not (and filename (file-exists-p filename)))
-        (ido-kill-buffer)
-      (when (yes-or-no-p "Are you sure you want to remove this file? ")
-        (delete-file filename)
-        (kill-buffer buffer)
-        (message "File '%s' successfully removed" filename)))))
-
-(global-set-key (kbd "C-x C-k") 'delete-current-buffer-file)
-#+END_SRC
-*** Rename file of current buffer
-[2014-06-14 Sat 23:04]
-#+BEGIN_SRC emacs-lisp
-(defun rename-current-buffer-file ()
-  "Renames current buffer and file it is visiting."
-  (interactive)
-  (let ((name (buffer-name))
-        (filename (buffer-file-name)))
-    (if (not (and filename (file-exists-p filename)))
-        (error "Buffer '%s' is not visiting a file!" name)
-      (let ((new-name (read-file-name "New name: " filename)))
-        (if (get-buffer new-name)
-            (error "A buffer named '%s' already exists!" new-name)
-          (rename-file filename new-name 1)
-          (rename-buffer new-name)
-          (set-visited-file-name new-name)
-          (set-buffer-modified-p nil)
-          (message "File '%s' successfully renamed to '%s'"
-                   name (file-name-nondirectory new-name)))))))
-
-(global-set-key (kbd "C-x C-S-r") 'rename-current-buffer-file)
-#+END_SRC
-*** Quickly find emacs lisp sources
-[2014-06-22 Sun 23:05]
-#+BEGIN_SRC emacs-lisp
-(bind-key "C-l" 'find-library 'help-command)
-(bind-key "C-f" 'find-function 'help-command)
-(bind-key "C-k" 'find-function-on-key 'help-command)
-(bind-key "C-v" 'find-variable 'help-command)
-#+END_SRC
-*** Adjust occur
-[2015-01-26 Mon 16:01]
-#+BEGIN_SRC emacs-lisp
-(bind-key "M-s o" 'occur-dwim)
-#+END_SRC
+** dired & co
+ #+BEGIN_SRC emacs-lisp
+ (use-package dired
+   :commands (dired dired-other-window dired-other-frame dired-noselect
+                    dired-mode dired-jump)
+   :defines (dired-omit-regexp-orig)
+   :bind (:map dired-mode-map
+          ("F" . find-name-dired)
+          ("/" . dired-narrow))
+   :init
+   (progn
+     (setq diredp-hide-details-initially-flag nil))
+   :config
+   (progn
+     (validate-setq dired-auto-revert-buffer (quote dired-directory-changed-p))
+     (validate-setq dired-dwim-target t)
+     (validate-setq dired-listing-switches "-alh")
+     (validate-setq dired-listing-switches "-alXh --group-directories-first")
+     (validate-setq dired-recursive-copies (quote top))
+     (validate-setq dired-recursive-deletes (quote top))
+
+     (use-package dired+
+       :ensure dired+)
+
+     (use-package dired-x
+       :init
+       (progn
+         (validate-setq dired-guess-shell-alist-user
+                        '(("\\.pdf\\'" "mupdf")
+                          ("\\.\\(?:djvu\\|eps\\)\\'" "evince")
+                          ("\\.\\(?:jpg\\|jpeg\\|png\\|gif\\|xpm\\)\\'" "eog")
+                          ("\\.\\(?:xcf\\)\\'" "gimp")
+                          ("\\.csv\\'" "libreoffice")
+                          ("\\.tex\\'" "pdflatex" "latex")
+                          ("\\.\\(?:mp4\\|mkv\\|avi\\|flv\\|ogv\\)\\(?:\\.part\\)?\\'" "vlc")
+                          ("\\.html?\\'" "conkeror")))))
+
+     (use-package dired-single
+       :ensure dired-single
+       :bind (:map dired-mode-map
+                   ("<return>" . dired-single-buffer)
+                   ("<mouse-1>" . dired-single-buffer))
+       :init
+       (progn
+         (bind-key "^"
+                   (function
+                    (lambda nil (interactive) (dired-single-buffer ".."))) dired-mode-map )))
+
+     (use-package wdired
+       :ensure wdired
+       :bind (:map dired-mode-map
+              ("r" . wdired-change-to-wdired-mode))
+       :init
+       (progn
+         (validate-setq wdired-allow-to-change-permissions t)))
+
+     (use-package dired-narrow
+       :ensure t
+       :diminish dired-narrow-mode
+       :bind (:map dired-mode-map
+                   ("/" . dired-narrow)))
+
+     (use-package gnus-dired
+       :commands (gnus-dired-attach gnus-dired-mode)
+       :bind (:map dired-mode-map
+                   ("a" . gnus-dired-attach)))
+
+     (use-package runner
+       :ensure runner)
+
+     (defvar mark-files-cache (make-hash-table :test #'equal))
+
+     (defun mark-similar-versions (name)
+       (let ((pat name))
+         (if (string-match "^\\(.+?\\)-[0-9._-]+$" pat)
+             (validate-setq pat (match-string 1 pat)))
+         (or (gethash pat mark-files-cache)
+             (ignore (puthash pat t mark-files-cache)))))
+
+     (defun dired-mark-similar-version ()
+       (interactive)
+       (validate-setq mark-files-cache (make-hash-table :test #'equal))
+       (dired-mark-sexp '(mark-similar-versions name)))
+
+     (defun dired-package-initialize ()
+       (unless (featurep 'runner)
+         (bind-key "M-!" 'async-shell-command dired-mode-map)
+         (unbind-key "M-s f" dired-mode-map)
+
+         (defadvice dired-omit-startup (after diminish-dired-omit activate)
+           "Make sure to remove \"Omit\" from the modeline."
+           (diminish 'dired-omit-mode) dired-mode-map)
+
+         ;; Omit files that Git would ignore
+         (defun dired-omit-regexp ()
+           (let ((file (expand-file-name ".git"))
+                 parent-dir)
+             (while (and (not (file-exists-p file))
+                         (progn
+                           (validate-setq parent-dir
+                                          (file-name-directory
+                                           (directory-file-name
+                                            (file-name-directory file))))
+                           ;; Give up if we are already at the root dir.
+                           (not (string= (file-name-directory file)
+                                         parent-dir))))
+               ;; Move up to the parent dir and try again.
+               (validate-setq file (expand-file-name ".git" parent-dir)))
+             ;; If we found a change log in a parent, use that.
+             (if (file-exists-p file)
+                 (let ((regexp (funcall dired-omit-regexp-orig))
+                       (omitted-files
+                        (shell-command-to-string "git clean -d -x -n")))
+                   (if (= 0 (length omitted-files))
+                       regexp
+                     (concat
+                      regexp
+                      (if (> (length regexp) 0)
+                          "\\|" "")
+                      "\\("
+                      (mapconcat
+                       #'(lambda (str)
+                           (concat
+                            "^"
+                            (regexp-quote
+                             (substring str 13
+                                        (if (= ?/ (aref str (1- (length str))))
+                                            (1- (length str))
+                                          nil)))
+                            "$"))
+                       (split-string omitted-files "\n" t)
+                       "\\|")
+                      "\\)")))
+               (funcall dired-omit-regexp-orig))))))
+
+     (add-hook 'dired-mode-hook 'dired-package-initialize)
+
+     (defun dired-double-jump (first-dir second-dir)
+       (interactive
+        (list (read-directory-name "First directory: "
+                                   (expand-file-name "~")
+                                   nil nil "/Downloads/")
+              (read-directory-name "Second directory: "
+                                   (expand-file-name "~")
+                                   nil nil "/")))
+       (dired first-dir)
+       (dired-other-window second-dir))
+     (bind-key "C-c J" 'dired-double-jump)
+
+     (defun dired-back-to-top ()
+       (interactive)
+       (goto-char (point-min))
+       (dired-next-line 4))
+
+     (define-key dired-mode-map
+       (vector 'remap 'beginning-of-buffer) 'dired-back-to-top)
+
+     (defun dired-jump-to-bottom ()
+       (interactive)
+       (goto-char (point-max))
+       (dired-next-line -1))
+
+     (define-key dired-mode-map
+       (vector 'remap 'end-of-buffer) 'dired-jump-to-bottom)))
+
+ #+END_SRC
+** discover-my-major
+ [2014-06-01 Sun 23:32]
+ Discover key bindings and their meaning for the current Emacs major mode.
+ #+BEGIN_SRC emacs-lisp
+ (use-package discover-my-major
+   :ensure discover-my-major
+   :commands discover-my-major
+   :bind ("C-h C-m" . discover-my-major))
+ #+END_SRC
+** easypg
+ EasyPG is a GnuPG interface for Emacs.
+ Bookmark: [[http://www.emacswiki.org/emacs/EasyPG][EmacsWiki: Easy PG]]
+ #+BEGIN_SRC emacs-lisp
+ (use-package epa-file
+   :config
+   (progn
+     (epa-file-enable)
+     ;; I took the following from [[http://www.emacswiki.org/emacs/EasyPG][EmacsWiki: Easy PG]]
+     (defadvice epg--start (around advice-epg-disable-agent disable)
+       "Don't allow epg--start to use gpg-agent in plain text
+     terminals . "
+       (if (display-graphic-p)
+           ad-do-it
+         (let ((agent (getenv "GPG_AGENT_INFO")))
+           (setenv "GPG_AGENT_INFO" nil) ; give us a usable text password prompt
+           ad-do-it
+           (setenv "GPG_AGENT_INFO" agent))))
+     (ad-enable-advice 'epg--start 'around 'advice-epg-disable-agent)
+     (ad-activate 'epg--start)
+     ))
+ #+END_SRC
+** ediff
+ [2013-04-21 So 20:36]
+ ediff - don't start another frame
+ #+BEGIN_SRC emacs-lisp
+ (use-package ediff
+   :init
+   (progn
+     (defvar ctl-period-equals-map)
+     (define-prefix-command 'ctl-period-equals-map)
+     (bind-key "C-. =" 'ctl-period-equals-map)
+     (bind-key "C-. = c" 'compare-windows)) ; not an ediff command, but it fits
+
+   :bind (("C-. = b" . ediff-buffers)
+          ("C-. = B" . ediff-buffers3)
+          ("C-. = =" . ediff-files)
+          ("C-. = f" . ediff-files)
+          ("C-. = F" . ediff-files3)
+          ("C-. = r" . ediff-revision)
+          ("C-. = p" . ediff-patch-file)
+          ("C-. = P" . ediff-patch-buffer)
+          ("C-. = l" . ediff-regions-linewise)
+          ("C-. = w" . ediff-regions-wordwise))
+   :config (progn
+             (validate-setq ediff-window-setup-function 'ediff-setup-windows-plain)
+             (validate-setq ediff-split-window-function 'split-window-horizontally)
+             )
+ )
+ #+END_SRC
+** CANCELLED edit-server                                         :CANCELLED:
+CLOSED: [2017-08-26 Sat 14:55]
+:LOGBOOK:
+- State "CANCELLED"  from              [2017-08-26 Sat 14:55] \\
+  no more workinng
+:END:
+ [2015-12-16 Wed 22:13]
+ Allows chromium to "send" files (textbox inputs) to emacs to edit.
+ #+BEGIN_SRC emacs-lisp :tangle no
+ (use-package edit-server
+   :ensure t
+   :if window-system
+   :config
+   (progn
+     (validate-setq edit-server-new-frame t)
+     (edit-server-start)))
+ #+END_SRC
+** CANCELLED emms                                                :CANCELLED:
+CLOSED: [2017-08-26 Sat 14:55]
+:LOGBOOK:
+- State "CANCELLED"  from              [2017-08-26 Sat 14:55]
+:END:
 
-** ethan-wspace
-[2014-06-01 Sun 15:00]
-Proper whitespace handling
-#+BEGIN_SRC emacs-lisp :tangle no
-(use-package ethan-wspace
-  :ensure ethan-wspace
-  :diminish (ethan-wspace-mode . "ew")
-  :init
-  (global-ethan-wspace-mode 1))
-#+END_SRC
+ EMMS is the Emacs Multimedia System.
+ #+BEGIN_SRC emacs-lisp :tangle no
+ (require 'emms-source-file)
+ (require 'emms-source-playlist)
+ (require 'emms-info)
+ (require 'emms-cache)
+ (require 'emms-playlist-mode)
+ (require 'emms-playing-time)
+ (require 'emms-player-mpd)
+ (require 'emms-playlist-sort)
+ (require 'emms-mark)
+ (require 'emms-browser)
+ (require 'emms-lyrics)
+ (require 'emms-last-played)
+ (require 'emms-score)
+ (require 'emms-tag-editor)
+ (require 'emms-history)
+ (require 'emms-i18n)
+
+ (validate-setq emms-playlist-default-major-mode 'emms-playlist-mode)
+ (add-to-list 'emms-track-initialize-functions 'emms-info-initialize-track)
+ (emms-playing-time 1)
+ (emms-lyrics 1)
+ (add-hook 'emms-player-started-hook 'emms-last-played-update-current)
+ ;(add-hook 'emms-player-started-hook 'emms-player-mpd-sync-from-emms)
+ (emms-score 1)
+ (when (fboundp 'emms-cache) ; work around compiler warning
+   (emms-cache 1))
+ (validate-setq emms-score-default-score 3)
+
+ (defun emms-mpd-init ()
+   "Connect Emms to mpd."
+   (interactive)
+   (emms-player-mpd-connect))
+
+ ;; players
+ (require 'emms-player-mpd)
+ (validate-setq emms-player-mpd-server-name "localhost")
+ (validate-setq emms-player-mpd-server-port "6600")
+ (add-to-list 'emms-info-functions 'emms-info-mpd)
+ (add-to-list 'emms-player-list 'emms-player-mpd)
+ (validate-setq emms-volume-change-function 'emms-volume-mpd-change)
+ (validate-setq emms-player-mpd-sync-playlist t)
+
+ (validate-setq emms-source-file-default-directory "/var/lib/mpd/music")
+ (validate-setq emms-player-mpd-music-directory "/var/lib/mpd/music")
+ (validate-setq emms-info-auto-update t)
+ (validate-setq emms-lyrics-scroll-p t)
+ (validate-setq emms-lyrics-display-on-minibuffer t)
+ (validate-setq emms-lyrics-display-on-modeline nil)
+ (validate-setq emms-lyrics-dir "~/.emacs.d/var/lyrics")
+
+ (validate-setq emms-last-played-format-alist
+       '(((emms-last-played-seconds-today) . "%H:%M")
+         (604800                           . "%a %H:%M") ; this week
+         ((emms-last-played-seconds-month) . "%d.%m.%Y")
+         ((emms-last-played-seconds-year)  . "%d.%m.%Y")
+         (t                                . "Never played")))
+
+ ;; Playlist format
+ (defun my-describe (track)
+   (let* ((empty "...")
+          (name (emms-track-name track))
+          (type (emms-track-type track))
+          (short-name (file-name-nondirectory name))
+          (play-count (or (emms-track-get track 'play-count) 0))
+          (last-played (or (emms-track-get track 'last-played) '(0 0 0)))
+          (artist (or (emms-track-get track 'info-artist) empty))
+          (year (emms-track-get track 'info-year))
+          (playing-time (or (emms-track-get track 'info-playing-time) 0))
+          (min (/ playing-time 60))
+          (sec (% playing-time 60))
+          (album (or (emms-track-get track 'info-album) empty))
+          (tracknumber (emms-track-get track 'info-tracknumber))
+          (short-name (file-name-sans-extension
+                       (file-name-nondirectory name)))
+          (title (or (emms-track-get track 'info-title) short-name))
+          (rating (emms-score-get-score name))
+          (rate-char ?☭)
+          )
+     (format "%12s %20s (%.4s) [%-20s] - %2s. %-30s | %2d %s"
+             (emms-last-played-format-date last-played)
+             artist
+             year
+             album
+             (if (and tracknumber ; tracknumber
+                      (not (zerop (string-to-number tracknumber))))
+                 (format "%02d" (string-to-number tracknumber))
+               "")
+             title
+             play-count
+             (make-string rating rate-char)))
+ )
+
+ (validate-setq emms-track-description-function 'my-describe)
+
+ ;; (global-set-key (kbd "C-<f9> t") 'emms-play-directory-tree)
+ ;; (global-set-key (kbd "H-<f9> e") 'emms-play-file)
+ (global-set-key (kbd "H-<f9> <f9>") 'emms-mpd-init)
+ (global-set-key (kbd "H-<f9> d") 'emms-play-dired)
+ (global-set-key (kbd "H-<f9> x") 'emms-start)
+ (global-set-key (kbd "H-<f9> v") 'emms-stop)
+ (global-set-key (kbd "H-<f9> n") 'emms-next)
+ (global-set-key (kbd "H-<f9> p") 'emms-previous)
+ (global-set-key (kbd "H-<f9> o") 'emms-show)
+ (global-set-key (kbd "H-<f9> h") 'emms-shuffle)
+ (global-set-key (kbd "H-<f9> SPC") 'emms-pause)
+ (global-set-key (kbd "H-<f9> a") 'emms-add-directory-tree)
+ (global-set-key (kbd "H-<f9> b") 'emms-smart-browse)
+ (global-set-key (kbd "H-<f9> l") 'emms-playlist-mode-go)
+
+ (global-set-key (kbd "H-<f9> r") 'emms-toggle-repeat-track)
+ (global-set-key (kbd "H-<f9> R") 'emms-toggle-repeat-playlist)
+ (global-set-key (kbd "H-<f9> m") 'emms-lyrics-toggle-display-on-minibuffer)
+ (global-set-key (kbd "H-<f9> M") 'emms-lyrics-toggle-display-on-modeline)
+
+ (global-set-key (kbd "H-<f9> <left>") (lambda () (interactive) (emms-seek -10)))
+ (global-set-key (kbd "H-<f9> <right>") (lambda () (interactive) (emms-seek +10)))
+ (global-set-key (kbd "H-<f9> <down>") (lambda () (interactive) (emms-seek -60)))
+ (global-set-key (kbd "H-<f9> <up>") (lambda () (interactive) (emms-seek +60)))
+
+ (global-set-key (kbd "H-<f9> s u") 'emms-score-up-playing)
+ (global-set-key (kbd "H-<f9> s d") 'emms-score-down-playing)
+ (global-set-key (kbd "H-<f9> s o") 'emms-score-show-playing)
+ (global-set-key (kbd "H-<f9> s s") 'emms-score-set-playing)
+
+ (define-key emms-playlist-mode-map "u" 'emms-score-up-playing)
+ (define-key emms-playlist-mode-map "d" 'emms-score-down-playing)
+ (define-key emms-playlist-mode-map "o" 'emms-score-show-playing)
+ (define-key emms-playlist-mode-map "s" 'emms-score-set-playing)
+ (define-key emms-playlist-mode-map "r" 'emms-mpd-init)
+ (define-key emms-playlist-mode-map "N"  'emms-playlist-new)
+
+ (define-key emms-playlist-mode-map "x" 'emms-start)
+ (define-key emms-playlist-mode-map "v" 'emms-stop)
+ (define-key emms-playlist-mode-map "n" 'emms-next)
+ (define-key emms-playlist-mode-map "p" 'emms-previous)
+
+ (validate-setq emms-playlist-buffer-name "*EMMS Playlist*"
+       emms-playlist-mode-open-playlists t)
+
+ ;; Faces
+ (if (window-system)
+     ((lambda ()
+        (set-face-attribute
+         'emms-browser-artist-face nil
+         :family "Arno Pro")
+        )
+ ))
+
+ (validate-setq emms-player-mpd-supported-regexp
+       (or (emms-player-mpd-get-supported-regexp)
+           (concat "\\`http://\\|"
+                   (emms-player-simple-regexp
+                    "m3u" "ogg" "flac" "mp3" "wav" "mod" "au" "aiff"))))
+ (emms-player-set emms-player-mpd 'regex emms-player-mpd-supported-regexp)
+
+ #+END_SRC
+** CANCELLED Emacs shell                                         :CANCELLED:
+CLOSED: [2017-08-26 Sat 14:56]
+:LOGBOOK:
+- State "CANCELLED"  from              [2017-08-26 Sat 14:56]
+:END:
+ Basic settings for emacs integrated shell
+ #+BEGIN_SRC emacs-lisp :tangle no
+ (use-package eshell
+   :defer t
+   :commands eshell
+   :init
+   (progn
+     (defun eshell-initialize ()
+       (defun eshell-spawn-external-command (beg end)
+         "Parse and expand any history references in current input."
+         (save-excursion
+           (goto-char end)
+           (when (looking-back "&!" beg)
+             (delete-region (match-beginning 0) (match-end 0))
+             (goto-char beg)
+             (insert "spawn "))))
+       (add-hook 'eshell-expand-input-functions 'eshell-spawn-external-command)
+       (eval-after-load "em-unix"
+         '(progn
+            (unintern 'eshell/su)
+            (unintern 'eshell/sudo))))
+     (add-hook 'eshell-first-time-mode-hook 'eshell-initialize)
+     )
+   :config
+   (progn
+     (defalias 'emacs 'find-file)
+     (defalias 'ec 'find-file)
+     (defalias 'e 'find-file)
+
+     (use-package f
+       :ensure f)
+     (use-package 'em-cmpl)
+     (use-package 'em-prompt)
+     (use-package 'em-term)
+
+     (validate-setq eshell-cmpl-cycle-completions nil
+           eshell-save-history-on-exit t
+           eshell-buffer-maximum-lines 20000
+           eshell-history-size 350
+           eshell-buffer-shorthand t
+           eshell-highlight-prompt t
+           eshell-plain-echo-behavior t
+           eshell-cmpl-dir-ignore "\\`\\(\\.\\.?\\|CVS\\|\\.svn\\|\\.git\\)/\\'")
+
+     (setenv "PAGER" "cat")
+     (validate-setq eshell-visual-commands
+           '("less" "tmux" "htop" "top" "bash" "zsh" "tail"))
+     (validate-setq eshell-visual-subcommands
+           '(("git" "log" "l" "diff" "show")))
+
+     (add-to-list 'eshell-command-completions-alist
+                  '("gunzip" "gz\\'"))
+     (add-to-list 'eshell-command-completions-alist
+                  '("tar" "\\(\\.tar|\\.tgz\\|\\.tar\\.gz\\)\\'"))
+
+     (when (not (functionp 'eshell/rgrep))
+       (defun eshell/rgrep (&rest args)
+         "Use Emacs grep facility instead of calling external grep."
+         (eshell-grep "rgrep" args t)))
+
+     ;(set-face-attribute 'eshell-prompt nil :foreground "turquoise1")
+     (add-hook 'eshell-mode-hook ;; for some reason this needs to be a hook
+               '(lambda () (define-key eshell-mode-map "\C-a" 'eshell-bol)))
+     (add-hook 'eshell-preoutput-filter-functions
+               'ansi-color-filter-apply)
+     ;; Prompt with a bit of help from http://www.emacswiki.org/emacs/EshellPrompt
+
+     (defmacro with-face (str &rest properties)
+       `(propertize ,str 'face (list ,@properties)))
+
+     (defun eshell/abbr-pwd ()
+       (let ((home (getenv "HOME"))
+             (path (eshell/pwd)))
+         (cond
+          ((string-equal home path) "~")
+          ((f-ancestor-of? home path) (concat "~/" (f-relative path home)))
+          (path))))
+
+     (defun eshell/my-prompt ()
+       (let ((header-bg "#161616"))
+         (concat
+          (with-face user-login-name :foreground "cyan")
+          (with-face (concat "@" hostname) :foreground "white")
+          " "
+          (with-face (eshell/abbr-pwd) :foreground "#009900")
+          (if (= (user-uid) 0)
+              (with-face "#" :foreground "red")
+            (with-face "$" :foreground "#69b7f0"))
+          " ")))
+
+     (use-package eshell-prompt-extras
+       :ensure t
+       :init
+       (progn
+         (validate-setq eshell-highlight-prompt nil
+               ;; epe-git-dirty-char "Ϟ"
+               epe-git-dirty-char "*"
+               eshell-prompt-function 'epe-theme-dakrone)))
+
+     (defun eshell/magit ()
+       "Function to open magit-status for the current directory"
+       (interactive)
+       (magit-status default-directory)
+       nil)
+
+     (validate-setq eshell-prompt-function 'eshell/my-prompt)
+     (validate-setq eshell-highlight-prompt nil)
+     (validate-setq eshell-prompt-regexp "^[^#$\n]+[#$] ")))
+
+ #+END_SRC
+
+** CANCELLED ethan-wspace                                        :CANCELLED:
+CLOSED: [2017-08-26 Sat 14:57]
+:LOGBOOK:
+- State "CANCELLED"  from              [2017-08-26 Sat 14:57]
+:END:
+ [2014-06-01 Sun 15:00]
+ Proper whitespace handling
+ #+BEGIN_SRC emacs-lisp :tangle no
+ (use-package ethan-wspace
+   :ensure ethan-wspace
+   :diminish (ethan-wspace-mode . "ew")
+   :init
+   (global-ethan-wspace-mode 1))
+ #+END_SRC
 ** Eww - Emacs browser
-[2016-10-03 Mo 21:30]
-#+BEGIN_SRC emacs-lisp :tangle yes
-;; Time-stamp: <2016-07-08 18:22:46 kmodi>
+ [2016-10-03 Mo 21:30]
+Eww - Emacs browser (needs emacs 24.4 or higher)
+ #+BEGIN_SRC emacs-lisp
+  (use-package eww
+    :bind (("M-s M-w" . eww-search-words)
+           :map eww-mode-map
+           (":" . eww) ; Go to URL
+           ("h" . eww-list-histories) ; View history
+           :map eww-text-map ; For single line text fields
+           ("<backtab>"  . shr-previous-link) ; S-TAB Jump to previous link on the page
+           ("<C-return>" . eww-submit)
+           :map eww-textarea-map ; For multi-line text boxes
+           ("<backtab>"  . shr-previous-link)
+           ("<C-return>" . eww-submit)
+           :map eww-checkbox-map
+           ("<down-mouse-1>" . eww-toggle-checkbox)
+           :map shr-map
+           ("w" . modi/eww-copy-url-dwim)
+           :map eww-link-keymap
+           ("w" . modi/eww-copy-url-dwim))
 
-;; Eww - Emacs browser (needs emacs 24.4 or higher)
+    :config
+    (progn
+      ;; Make the binding for `revert-buffer' do `eww-reload' in eww-mode
+      (define-key eww-mode-map [remap revert-buffer] #'eww-reload)
+
+      ;; (validate-setq eww-search-prefix                 "https://duckduckgo.com/html/?q=")
+      (validate-setq eww-search-prefix                 "https://www.google.com/search?q=")
+      (validate-setq eww-download-directory            "~/Downloads")
+      ;; (validate-setq eww-form-checkbox-symbol          "[ ]")
+      (validate-setq eww-form-checkbox-symbol          "☐") ; Unicode hex 2610
+      ;; (validate-setq eww-form-checkbox-selected-symbol "[X]")
+      (validate-setq eww-form-checkbox-selected-symbol "☑") ; Unicode hex 2611
+      ;; Improve the contract of pages like Google results
+      ;; http://emacs.stackexchange.com/q/2955/115
+      (setq shr-color-visible-luminance-min 80) ; default = 40
+
+      ;; Auto-rename new eww buffers
+      ;; http://ergoemacs.org/emacs/emacs_eww_web_browser.html
+      (defun xah-rename-eww-hook ()
+        "Rename eww browser's buffer so sites open in new page."
+        (rename-buffer "eww" t))
+      (add-hook 'eww-mode-hook #'xah-rename-eww-hook)
+
+      ;; If the current buffer is an eww buffer, "M-x eww" will always reuse the
+      ;; current buffer to load the new page. Below advice will make "C-u M-x eww"
+      ;; force a new eww buffer even when the current buffer is an eww buffer.
+      ;; The above `xah-rename-eww-hook' fix is still needed in order to create
+      ;; uniquely named eww buffers.
+      ;; http://emacs.stackexchange.com/a/24477/115
+      (defun modi/force-new-eww-buffer (orig-fun &rest args)
+        "When prefix argument is used, a new eww buffer will be created.
+  This is regardless of whether the current buffer is an eww buffer. "
+        (if current-prefix-arg
+            (with-temp-buffer
+              (apply orig-fun args))
+          (apply orig-fun args)))
+      (advice-add 'eww :around #'modi/force-new-eww-buffer)
+
+      ;; Override the default definition of `eww-search-words'
+      (defun eww-search-words (&optional beg end)
+        "Search the web for the text between the point and marker.
+  See the `eww-search-prefix' variable for the search engine used."
+        (interactive "r")
+        (if (use-region-p)
+            (eww (buffer-substring beg end))
+          (eww (modi/get-symbol-at-point))))
+
+      ;; eww-lnum
+      ;; https://github.com/m00natic/eww-lnum
+      (use-package eww-lnum
+        :ensure t
+        :bind (:map eww-mode-map
+               ("f" . eww-lnum-follow)
+               ("U" . eww-lnum-universal)))
+
+      ;; org-eww
+      ;; Copy text from html page for pasting in org mode file/buffer
+      ;; e.g. Copied HTML hyperlinks get converted to [[link][desc]] for org mode.
+      ;; http://emacs.stackexchange.com/a/8191/115
+      (use-package org-eww
+        :bind (:map eww-mode-map
+               ("o" . org-eww-copy-for-org-mode)))
+
+      ;; Auto-refreshing eww buffer whenever the html file it's showing changes
+      ;; http://emacs.stackexchange.com/a/2566/115
+      (defvar modi/eww--file-notify-descriptors-list ()
+        "List to store file-notify descriptor for all files that have an
+  associated auto-reloading eww buffer.")
+
+      (defun modi/advice-eww-open-file-to-auto-reload (orig-fun &rest args)
+        "When `eww-open-file' is called with \\[universal-argument], open
+  the file in eww and also add `file-notify' watch for it so that the eww
+  buffer auto-reloads when the HTML file changes."
+        (prog1
+            (apply orig-fun args)
+          (when current-prefix-arg ; C-u M-x eww-open-file
+            (require 'filenotify)
+            (let ((file-name (car args)))
+              (file-notify-add-watch file-name
+                                     '(change attribute-change)
+                                     #'modi/file-notify-callback-eww-reload)
+              ;; Show the HTML file and its rendered form in eww side-by-side
+              (find-file-other-window file-name))
+            ;; Redefine the `q' binding in `eww-mode-map'
+            (bind-key "q" #'modi/eww-quit-and-update-fn-descriptors eww-mode-map))))
+      (advice-add 'eww-open-file :around #'modi/advice-eww-open-file-to-auto-reload)
+
+      (defun modi/file-notify-callback-eww-reload (event)
+        "On getting triggered, switch to the eww buffer, reload and switch
+  back to the working buffer. Also save the `file-notify-descriptor' of the
+  triggering event."
+        (let* ((working-buffer (buffer-name)))
+          (switch-to-buffer-other-window "eww")
+          (eww-reload)
+          (switch-to-buffer-other-window working-buffer))
+        ;; `(car event)' will return the event descriptor
+        (add-to-list 'modi/eww--file-notify-descriptors-list (car event)))
+
+      (defun modi/eww-quit-and-update-fn-descriptors ()
+        "When quitting `eww', first remove any saved file-notify descriptors
+  specific to eww, while also updating `modi/eww--file-notify-descriptors-list'."
+        (interactive)
+        (dotimes (index (safe-length modi/eww--file-notify-descriptors-list))
+          (file-notify-rm-watch (pop modi/eww--file-notify-descriptors-list)))
+        (quit-window :kill))))
+
+  ;; Default eww key bindings
+  ;; |-----------+---------------------------------------------------------------------|
+  ;; | Key       | Function                                                            |
+  ;; |-----------+---------------------------------------------------------------------|
+  ;; | &         | Browse the current URL with an external browser.                    |
+  ;; | -         | Begin a negative numeric argument for the next command.             |
+  ;; | 0 .. 9    | Part of the numeric argument for the next command.                  |
+  ;; | C         | Display a buffer listing the current URL cookies, if there are any. |
+  ;; | H         | List the eww-histories.                                             |
+  ;; | F         | Toggle font between variable-width and fixed-width.                 |
+  ;; | G         | Go to a URL                                                         |
+  ;; | R         | Readable mode                                                       |
+  ;; | S         | List eww buffers                                                    |
+  ;; | d         | Download URL under point to `eww-download-directory'.               |
+  ;; | g         | Reload the current page.                                            |
+  ;; | q         | Quit WINDOW and bury its buffer.                                    |
+  ;; | v         | `eww-view-source'                                                   |
+  ;; | w         | `eww-copy-page-url'                                                 |
+  ;; |-----------+---------------------------------------------------------------------|
+  ;; | b         | Add the current page to the bookmarks.                              |
+  ;; | B         | Display the bookmark list.                                          |
+  ;; | M-n       | Visit the next bookmark                                             |
+  ;; | M-p       | Visit the previous bookmark                                         |
+  ;; |-----------+---------------------------------------------------------------------|
+  ;; | t         | Go to the page marked `top'.                                        |
+  ;; | u         | Go to the page marked `up'.                                         |
+  ;; |-----------+---------------------------------------------------------------------|
+  ;; | n         | Go to the page marked `next'.                                       |
+  ;; | p         | Go to the page marked `previous'.                                   |
+  ;; |-----------+---------------------------------------------------------------------|
+  ;; | l         | Go to the previously displayed page.                                |
+  ;; | r         | Go to the next displayed page.                                      |
+  ;; |-----------+---------------------------------------------------------------------|
+  ;; | TAB       | Move point to next link on the page.                                |
+  ;; | S-TAB     | Move point to previous link on the page.                            |
+  ;; |-----------+---------------------------------------------------------------------|
+  ;; | SPC       | Scroll up                                                           |
+  ;; | DEL/Bkspc | Scroll down                                                         |
+  ;; | S-SPC     | Scroll down                                                         |
+  ;; |-----------+---------------------------------------------------------------------|
+ #+END_SRC
+
+ #+results:
 
-(use-package eww
-  :bind ( ("M-s M-w" . eww-search-words))
-  :config
-  (progn
-    ;; (validate-setq eww-search-prefix                 "https://duckduckgo.com/html/?q=")
-    (validate-setq eww-search-prefix                 "https://www.google.com/search?q=")
-    (validate-setq eww-download-directory            "~/Downloads")
-    ;; (validate-setq eww-form-checkbox-symbol          "[ ]")
-    (validate-setq eww-form-checkbox-symbol          "☐") ; Unicode hex 2610
-    ;; (validate-setq eww-form-checkbox-selected-symbol "[X]")
-    (validate-setq eww-form-checkbox-selected-symbol "☑") ; Unicode hex 2611
-    ;; Improve the contract of pages like Google results
-    ;; http://emacs.stackexchange.com/q/2955/115
-    (setq shr-color-visible-luminance-min 80) ; default = 40
-
-    ;; Auto-rename new eww buffers
-    ;; http://ergoemacs.org/emacs/emacs_eww_web_browser.html
-    (defun xah-rename-eww-hook ()
-      "Rename eww browser's buffer so sites open in new page."
-      (rename-buffer "eww" t))
-    (add-hook 'eww-mode-hook #'xah-rename-eww-hook)
-
-    ;; If the current buffer is an eww buffer, "M-x eww" will always reuse the
-    ;; current buffer to load the new page. Below advice will make "C-u M-x eww"
-    ;; force a new eww buffer even when the current buffer is an eww buffer.
-    ;; The above `xah-rename-eww-hook' fix is still needed in order to create
-    ;; uniquely named eww buffers.
-    ;; http://emacs.stackexchange.com/a/24477/115
-    (defun modi/force-new-eww-buffer (orig-fun &rest args)
-      "When prefix argument is used, a new eww buffer will be created.
-This is regardless of whether the current buffer is an eww buffer. "
-      (if current-prefix-arg
-          (with-temp-buffer
-            (apply orig-fun args))
-        (apply orig-fun args)))
-    (advice-add 'eww :around #'modi/force-new-eww-buffer)
-
-    ;; Override the default definition of `eww-search-words'
-    (defun eww-search-words (&optional beg end)
-      "Search the web for the text between the point and marker.
-See the `eww-search-prefix' variable for the search engine used."
-      (interactive "r")
-      (if (use-region-p)
-          (eww (buffer-substring beg end))
-        (eww (modi/get-symbol-at-point))))
-
-    ;; eww-lnum
-    ;; https://github.com/m00natic/eww-lnum
-    (use-package eww-lnum
-      :ensure t
-      :bind (:map eww-mode-map
-             ("f" . eww-lnum-follow)
-             ("U" . eww-lnum-universal)))
-
-    ;; org-eww
-    ;; Copy text from html page for pasting in org mode file/buffer
-    ;; e.g. Copied HTML hyperlinks get converted to [[link][desc]] for org mode.
-    ;; http://emacs.stackexchange.com/a/8191/115
-    (use-package org-eww
-      :bind (:map eww-mode-map
-             ("o" . org-eww-copy-for-org-mode)))
-
-    ;; Auto-refreshing eww buffer whenever the html file it's showing changes
-    ;; http://emacs.stackexchange.com/a/2566/115
-    (defvar modi/eww--file-notify-descriptors-list ()
-      "List to store file-notify descriptor for all files that have an
-associated auto-reloading eww buffer.")
-
-    (defun modi/advice-eww-open-file-to-auto-reload (orig-fun &rest args)
-      "When `eww-open-file' is called with \\[universal-argument], open
-the file in eww and also add `file-notify' watch for it so that the eww
-buffer auto-reloads when the HTML file changes."
-      (prog1
-          (apply orig-fun args)
-        (when current-prefix-arg ; C-u M-x eww-open-file
-          (require 'filenotify)
-          (let ((file-name (car args)))
-            (file-notify-add-watch file-name
-                                   '(change attribute-change)
-                                   #'modi/file-notify-callback-eww-reload)
-            ;; Show the HTML file and its rendered form in eww side-by-side
-            (find-file-other-window file-name))
-          ;; Redefine the `q' binding in `eww-mode-map'
-          (bind-key "q" #'modi/eww-quit-and-update-fn-descriptors eww-mode-map))))
-    (advice-add 'eww-open-file :around #'modi/advice-eww-open-file-to-auto-reload)
-
-    (defun modi/file-notify-callback-eww-reload (event)
-      "On getting triggered, switch to the eww buffer, reload and switch
-back to the working buffer. Also save the `file-notify-descriptor' of the
-triggering event."
-      (let* ((working-buffer (buffer-name)))
-        (switch-to-buffer-other-window "eww")
-        (eww-reload)
-        (switch-to-buffer-other-window working-buffer))
-      ;; `(car event)' will return the event descriptor
-      (add-to-list 'modi/eww--file-notify-descriptors-list (car event)))
-
-    (defun modi/eww-quit-and-update-fn-descriptors ()
-      "When quitting `eww', first remove any saved file-notify descriptors
-specific to eww, while also updating `modi/eww--file-notify-descriptors-list'."
-      (interactive)
-      (dotimes (index (safe-length modi/eww--file-notify-descriptors-list))
-        (file-notify-rm-watch (pop modi/eww--file-notify-descriptors-list)))
-      (quit-window :kill))
-
-    (bind-keys
-     :map eww-mode-map
-      (":" . eww) ; Go to URL
-      ("h" . eww-list-histories)) ; View history
-
-    ;; Make the binding for `revert-buffer' do `eww-reload' in eww-mode
-    (define-key eww-mode-map [remap revert-buffer] #'eww-reload)
-    (bind-keys
-     :map eww-text-map ; For single line text fields
-      ("<backtab>"  . shr-previous-link) ; S-TAB Jump to previous link on the page
-      ("<C-return>" . eww-submit)) ; S-TAB Jump to previous link on the page
-    (bind-keys
-     :map eww-textarea-map ; For multi-line text boxes
-      ("<backtab>"  . shr-previous-link) ; S-TAB Jump to previous link on the page
-      ("<C-return>" . eww-submit)) ; S-TAB Jump to previous link on the page
-    (bind-keys
-     :map eww-checkbox-map
-      ("<down-mouse-1>" . eww-toggle-checkbox))
-    (bind-keys
-     :map shr-map
-      ("w" . modi/eww-copy-url-dwim))
-    (bind-keys
-     :map eww-link-keymap
-      ("w" . modi/eww-copy-url-dwim))))
-
-;; Default eww key bindings
-;; |-----------+---------------------------------------------------------------------|
-;; | Key       | Function                                                            |
-;; |-----------+---------------------------------------------------------------------|
-;; | &         | Browse the current URL with an external browser.                    |
-;; | -         | Begin a negative numeric argument for the next command.             |
-;; | 0 .. 9    | Part of the numeric argument for the next command.                  |
-;; | C         | Display a buffer listing the current URL cookies, if there are any. |
-;; | H         | List the eww-histories.                                             |
-;; | F         | Toggle font between variable-width and fixed-width.                 |
-;; | G         | Go to a URL                                                         |
-;; | R         | Readable mode                                                       |
-;; | S         | List eww buffers                                                    |
-;; | d         | Download URL under point to `eww-download-directory'.               |
-;; | g         | Reload the current page.                                            |
-;; | q         | Quit WINDOW and bury its buffer.                                    |
-;; | v         | `eww-view-source'                                                   |
-;; | w         | `eww-copy-page-url'                                                 |
-;; |-----------+---------------------------------------------------------------------|
-;; | b         | Add the current page to the bookmarks.                              |
-;; | B         | Display the bookmark list.                                          |
-;; | M-n       | Visit the next bookmark                                             |
-;; | M-p       | Visit the previous bookmark                                         |
-;; |-----------+---------------------------------------------------------------------|
-;; | t         | Go to the page marked `top'.                                        |
-;; | u         | Go to the page marked `up'.                                         |
-;; |-----------+---------------------------------------------------------------------|
-;; | n         | Go to the page marked `next'.                                       |
-;; | p         | Go to the page marked `previous'.                                   |
-;; |-----------+---------------------------------------------------------------------|
-;; | l         | Go to the previously displayed page.                                |
-;; | r         | Go to the next displayed page.                                      |
-;; |-----------+---------------------------------------------------------------------|
-;; | TAB       | Move point to next link on the page.                                |
-;; | S-TAB     | Move point to previous link on the page.                            |
-;; |-----------+---------------------------------------------------------------------|
-;; | SPC       | Scroll up                                                           |
-;; | DEL/Bkspc | Scroll down                                                         |
-;; | S-SPC     | Scroll down                                                         |
-;; |-----------+---------------------------------------------------------------------|
-#+END_SRC
 ** exec path from shell
-[2017-04-01 Sat 23:27]
-#+BEGIN_SRC emacs-lisp :tangle yes
-(use-package exec-path-from-shell
-  :ensure t
-  :config
-  (progn
-    (exec-path-from-shell-initialize)
-    (exec-path-from-shell-copy-env "GOPATH")))
-#+END_SRC
+ [2017-04-01 Sat 23:27]
+ #+BEGIN_SRC emacs-lisp
+ (use-package exec-path-from-shell
+   :ensure t
+   :config
+   (progn
+     (exec-path-from-shell-initialize)
+     (exec-path-from-shell-copy-env "GOPATH")))
+ #+END_SRC
 ** expand-region
-[2014-06-01 Sun 15:16]
-#+BEGIN_SRC emacs-lisp
-(use-package expand-region
-  :ensure expand-region
-  :bind ("C-M-+" . er/expand-region)
-  :commands er/expand-region)
-#+END_SRC
-** eyebrowse
-[2017-04-29 Sat 13:18]
-[[https://github.com/wasamasa/eyebrowse][Eyebrowse]] is a global minor mode for Emacs that allows you to manage
-your window configurations in a simple manner, just like tiling window
-managers like i3wm with their workspaces do. It displays their current
-state in the modeline by default. The behaviour is modeled after
-ranger, a file manager written in Python.
-#+BEGIN_SRC emacs-lisp
-(use-package eyebrowse
-  :ensure t
-  :config
-  (progn
-    (eyebrowse-mode t)
-    ))
-#+END_SRC
+ [2014-06-01 Sun 15:16]
+ #+BEGIN_SRC emacs-lisp
+ (use-package expand-region
+   :ensure expand-region
+   :bind ("C-M-+" . er/expand-region)
+   :commands er/expand-region)
+ #+END_SRC
+** CANCELLED eyebrowse                                           :CANCELLED:
+CLOSED: [2017-08-26 Sat 15:06]
+:LOGBOOK:
+- State "CANCELLED"  from              [2017-08-26 Sat 15:06]
+:END:
+ [2017-04-29 Sat 13:18]
+ [[https://github.com/wasamasa/eyebrowse][Eyebrowse]] is a global minor mode for Emacs that allows you to manage
+ your window configurations in a simple manner, just like tiling window
+ managers like i3wm with their workspaces do. It displays their current
+ state in the modeline by default. The behaviour is modeled after
+ ranger, a file manager written in Python.
+ #+BEGIN_SRC emacs-lisp :tangle no
+ (use-package eyebrowse
+   :ensure t
+   :config
+   (progn
+     (eyebrowse-mode t)
+     ))
+ #+END_SRC
 
 ** filladapt
-[2013-05-02 Thu 00:04]
-Filladapt by KyleJones enhances Emacs’ fill functions by guessing a
-fill prefix, such as a comment sequence in program code, and handling
-bullet points like “1.” or “*”.
-#+BEGIN_SRC emacs-lisp
-(use-package filladapt
-  :load-path ("elisp/local")
-  :diminish filladapt-mode
-  :config
-  (setq-default filladapt-mode t))
-#+END_SRC
+ [2013-05-02 Thu 00:04]
+ Filladapt by KyleJones enhances Emacs’ fill functions by guessing a
+ fill prefix, such as a comment sequence in program code, and handling
+ bullet points like “1.” or “*”.
+ #+BEGIN_SRC emacs-lisp
+ (use-package filladapt
+   :load-path ("elisp/local")
+   :diminish filladapt-mode
+   :init
+   (setq-default filladapt-mode t))
+ #+END_SRC
 ** flycheck
-[2013-04-28 So 22:21]
-Flycheck is a on-the-fly syntax checking tool, supposedly better than Flymake.
-As the one time I tried Flymake i wasn't happy, thats easy to
-understand for me.
-#+BEGIN_SRC emacs-lisp
-(use-package flycheck
-  :ensure flycheck
-  :diminish flycheck-mode
-  :bind (("M-n" . next-error)
-         ("M-p" . previous-error))
-  :config
-  (progn
-    (use-package flycheck-color-mode-line
-      :ensure flycheck-color-mode-line)
-    (validate-setq flycheck-highlighting-mode 'nil)
-    (validate-setq flycheck-flake8-maximum-line-length '150)
-    (add-hook 'flycheck-mode-hook 'flycheck-color-mode-line-mode)
-    (validate-setq flycheck-sh-shellcheck-executable "/usr/bin/shellcheck -e 2086")
-    (add-hook 'find-file-hook
-          (lambda ()
-            (when (not (equal 'emacs-lisp-mode major-mode))
-              (flycheck-mode))))
-    ))
-#+END_SRC
+ [2013-04-28 So 22:21]
+ Flycheck is a on-the-fly syntax checking tool, supposedly better than Flymake.
+ As the one time I tried Flymake i wasn't happy, thats easy to
+ understand for me.
+ #+BEGIN_SRC emacs-lisp
+ (use-package flycheck
+   :ensure flycheck
+   :diminish flycheck-mode
+   :bind (("M-n" . next-error)
+          ("M-p" . previous-error))
+   :config
+   (progn
+     (use-package flycheck-color-mode-line
+       :ensure flycheck-color-mode-line)
+     (validate-setq flycheck-highlighting-mode 'nil)
+     (validate-setq flycheck-flake8-maximum-line-length '150)
+     (add-hook 'flycheck-mode-hook 'flycheck-color-mode-line-mode)
+     (validate-setq flycheck-sh-shellcheck-executable "/usr/bin/shellcheck -e 2086")
+     (add-hook 'find-file-hook
+           (lambda ()
+             (when (not (equal 'emacs-lisp-mode major-mode))
+               (flycheck-mode))))
+     ))
+ #+END_SRC
 ** font-lock
-Obviously emacs can do syntax hilighting. For more things than you ever
-heard about.
-And I want to have it everywhere.
-#+BEGIN_SRC emacs-lisp
-(use-package font-lock
-  :init
-  (progn
-    (global-font-lock-mode 1)
-    (validate-setq font-lock-maximum-decoration t)
-    (validate-setq jit-lock-defer-time nil)
-    (validate-setq jit-lock-stealth-nice 0.1)
-    (validate-setq jit-lock-stealth-time 0.2)
-    (validate-setq jit-lock-stealth-verbose nil)))
-#+END_SRC
-** form-feed-mode
-[2015-08-31 Mon 11:27]
-Display nice lines instead of page breaks
-#+BEGIN_SRC emacs-lisp :tangle no
-(use-package form-feed
-  :ensure t
-  )
-#+END_SRC
-** git commit mode
-#+BEGIN_SRC emacs-lisp :tangle no
-(use-package git-commit
-  :commands git-commit
-  :mode ("COMMIT_EDITMSG" . git-commit-mode))
-#+END_SRC
-
-** git rebase mode
-#+BEGIN_SRC emacs-lisp :tangle no
-(use-package git-rebase
-  :commands git-rebase
-  :mode ("git-rebase-todo" . git-rebase-mode))
-#+END_SRC
+ Obviously emacs can do syntax hilighting. For more things than you ever
+ heard about.
+ And I want to have it everywhere.
+ #+BEGIN_SRC emacs-lisp
+ (use-package font-lock
+   :init
+   (progn
+     (global-font-lock-mode 1)
+     (validate-setq font-lock-maximum-decoration t)
+     (validate-setq jit-lock-defer-time nil)
+     (validate-setq jit-lock-stealth-nice 0.1)
+     (validate-setq jit-lock-stealth-time 0.2)
+     (validate-setq jit-lock-stealth-verbose nil)))
+ #+END_SRC
+** CANCELLED form-feed-mode                                      :CANCELLED:
+CLOSED: [2017-08-26 Sat 15:07]
+:LOGBOOK:
+- State "CANCELLED"  from              [2017-08-26 Sat 15:07]
+:END:
+ [2015-08-31 Mon 11:27]
+ Display nice lines instead of page breaks
+ #+BEGIN_SRC emacs-lisp :tangle no
+ (use-package form-feed
+   :ensure t
+   )
+ #+END_SRC
+** CANCELLED git commit mode                                     :CANCELLED:
+CLOSED: [2017-08-26 Sat 15:07]
+:LOGBOOK:
+- State "CANCELLED"  from              [2017-08-26 Sat 15:07]
+:END:
+ #+BEGIN_SRC emacs-lisp :tangle no
+ (use-package git-commit
+   :commands git-commit
+   :mode ("COMMIT_EDITMSG" . git-commit-mode))
+ #+END_SRC
+
+** CANCELLED git rebase mode                                     :CANCELLED:
+CLOSED: [2017-08-26 Sat 15:07]
+:LOGBOOK:
+- State "CANCELLED"  from              [2017-08-26 Sat 15:07]
+:END:
+ #+BEGIN_SRC emacs-lisp :tangle no
+ (use-package git-rebase
+   :commands git-rebase
+   :mode ("git-rebase-todo" . git-rebase-mode))
+ #+END_SRC
 ** git-gutter+
-[2014-05-21 Wed 22:56]
-#+BEGIN_SRC emacs-lisp
-(use-package git-gutter+
-  :ensure git-gutter+
-  :diminish git-gutter+-mode
-  :bind (("C-x n" . git-gutter+-next-hunk)
-         ("C-x p" . git-gutter+-previous-hunk)
-         ("C-x v =" . git-gutter+-show-hunk)
-         ("C-x r" . git-gutter+-revert-hunks)
-         ("C-x s" . git-gutter+-stage-hunks)
-         ("C-x c" . git-gutter+-commit)
-         )
-  :config
-  (progn
-    (validate-setq git-gutter+-disabled-modes '(org-mode))
-    (global-git-gutter+-mode 1)
-    (use-package git-gutter-fringe+
-      :ensure git-gutter-fringe+
-      :config
-      (progn
-        (validate-setq git-gutter-fr+-side 'right-fringe)
-        ;(git-gutter-fr+-minimal)
-        ))))
-
-#+END_SRC
+ [2014-05-21 Wed 22:56]
+ #+BEGIN_SRC emacs-lisp
+ (use-package git-gutter+
+   :ensure git-gutter+
+   :diminish git-gutter+-mode
+   :bind (("C-x n" . git-gutter+-next-hunk)
+          ("C-x p" . git-gutter+-previous-hunk)
+          ("C-x v =" . git-gutter+-show-hunk)
+          ("C-x r" . git-gutter+-revert-hunks)
+          ("C-x s" . git-gutter+-stage-hunks)
+          ("C-x c" . git-gutter+-commit)
+          )
+   :init
+   (progn
+     (validate-setq git-gutter+-disabled-modes '(org-mode))
+     (global-git-gutter+-mode 1))
+   :config
+   (progn
+     (use-package git-gutter-fringe+
+       :ensure git-gutter-fringe+
+       :config
+       (progn
+         (validate-setq git-gutter-fr+-side 'right-fringe)
+         ;(git-gutter-fr+-minimal)
+         ))))
+ #+END_SRC
 ** git-messenger
-[2015-02-22 Sun 14:00]
-Provides function that popup commit message at current line. This is
-useful when you want to know why this line was changed.
-#+BEGIN_SRC emacs-lisp
-(use-package git-messenger
-  :ensure git-messenger
-  :commands (git-messenger:popup-message)
-  :bind (("C-x v p" . git-messenger:popup-message))
-  :config
-  (progn
-    (bind-key "m" 'git-messenger:copy-message git-messenger-map)
-    (add-hook 'git-messenger:popup-buffer-hook 'magit-revision-mode)
-    (validate-setq git-messenger:show-detail t)))
-#+END_SRC
+ [2015-02-22 Sun 14:00]
+ Provides function that popup commit message at current line. This is
+ useful when you want to know why this line was changed.
+ #+BEGIN_SRC emacs-lisp
+ (use-package git-messenger
+   :ensure git-messenger
+   :commands (git-messenger:popup-message)
+   :bind (("C-x v p" . git-messenger:popup-message))
+   :config
+   (progn
+     (bind-key "m" 'git-messenger:copy-message git-messenger-map)
+     (add-hook 'git-messenger:popup-buffer-hook 'magit-revision-mode)
+     (validate-setq git-messenger:show-detail t)))
+ #+END_SRC
 ** git timemachine
-[2014-07-23 Mi 12:57]
-Browse historic versions of a file with p (previous) and n (next).
-#+BEGIN_SRC emacs-lisp
-(use-package git-timemachine
-  :ensure git-timemachine
-  :commands git-timemachine)
-#+END_SRC
+ [2014-07-23 Mi 12:57]
+ Browse historic versions of a file with p (previous) and n (next).
+ #+BEGIN_SRC emacs-lisp
+ (use-package git-timemachine
+   :ensure git-timemachine
+   :commands git-timemachine)
+ #+END_SRC
 ** gnus
-Most of my gnus config is in an own file, [[file:gnus.org][gnus.org]], here I only have
-what I want every emacs to know.
-#+BEGIN_SRC emacs-lisp
-(bind-key "C-c g" 'gnus) ; Start gnus with M-n
-(after 'gnus
-  (jj-init-theme)
-)
-#+END_SRC
+ Most of my gnus config is in an own file, [[file:gnus.org][gnus.org]], here I only have
+ what I want every emacs to know.
+ #+BEGIN_SRC emacs-lisp
+   (bind-key "C-c g" 'gnus) ; Start gnus with M-n
+   (after 'gnus
+     (jj-init-theme)
+   )
+ #+END_SRC
 ** go-mode
-[2017-03-11 Sat 20:06]
-The go language, see golang.org
-#+BEGIN_SRC emacs-lisp
-(use-package go-mode
-  :ensure t
-  :bind (("M-." . godef-jump)
-         ("M-*" . pop-tag-mark))
-  :config
-  (progn
-    (defun my-go-mode-hook ()
-      (interactive)
-      (add-hook 'before-save-hook 'gofmt-before-save)
-      ; Customize compile command to run go build
-      (if (not (string-match "go" compile-command))
-          (set (make-local-variable 'compile-command)
-               "go build -v && go test -v && go vet"))
-                                        ; Use goimports instead of go-fmt
-      (setq gofmt-command "goimports")
-      )
-    (add-hook 'go-mode-hook 'my-go-mode-hook)
-    (use-package go-autocomplete
-      :ensure t)
-    (use-package go-eldoc
-      :ensure t
-      :config
-      (progn
-        (add-hook 'go-mode-hook 'go-eldoc-setup)))
-    (use-package go-guru
-      :ensure t
-      :config
-      (progn
-        (go-guru-hl-identifier-mode)
-        (setq go-guru-command "golang-guru")))
-    ))
-#+END_SRC
-** golden ratio
-[2015-02-20 Fri 16:27]
-When working with many windows at the same time, each window has a
-size that is not convenient for editing.
-
-golden-ratio helps on this issue by resizing automatically the windows
-you are working on to the size specified in the "Golden Ratio". The
-window that has the main focus will have the perfect size for editing,
-while the ones that are not being actively edited will be re-sized to
-a smaller size that doesn't get in the way, but at the same time will
-be readable enough to know it's content.
-#+BEGIN_SRC emacs-lisp
-(use-package golden-ratio
-  :ensure golden-ratio
-  :diminish golden-ratio-mode
-  :init
-  (progn
-    (golden-ratio-mode 1)
-    (validate-setq golden-ratio-exclude-buffer-names '("*LV*" "*guide-key*" "*Ediff Control Panel*"))
-    (validate-setq golden-ratio-exclude-modes '("calendar-mode" "gnus-summary-mode"
-                                       "gnus-article-mode" "calc-mode" "calc-trail-mode"
-                                       "bbdb-mode"))
-    ))
-#+END_SRC
-** goto last change
-[2015-02-22 Sun 13:28]
-Move point through buffer-undo-list positions.
-#+BEGIN_SRC emacs-lisp
-(use-package goto-last-change
-  :commands (goto-last-change)
-  :bind (("M-g l" . goto-last-change))
-  )
-#+END_SRC
-** guide-key
-[2014-06-11 Wed 22:27]
-guide-key.el displays the available key bindings automatically and
-dynamically.
-
-For whatever reason I like this more than icicles <backtab> completion
-for this.
-#+BEGIN_SRC emacs-lisp
-(use-package guide-key
-  :ensure guide-key
-  :diminish guide-key-mode
-  :config
-  (progn
-    (validate-setq guide-key/guide-key-sequence '("C-x" "C-c" "M-g" "M-s"))
-    (guide-key-mode 1)
-    (validate-setq guide-key/recursive-key-sequence-flag t)
-    (validate-setq guide-key/popup-window-position 'bottom)
-    (validate-setq guide-key/idle-delay 0.5)))
-
-#+END_SRC
-
-** highlight mode
-[2014-05-21 Wed 23:51]
-#+BEGIN_SRC emacs-lisp
-(use-package hi-lock
-  :bind (("M-o l" . highlight-lines-matching-regexp)
-         ("M-o r" . highlight-regexp)
-         ("M-o w" . highlight-phrase)
-         ("M-o u" . unhighlight-regexp)))
-
-(use-package hilit-chg
-  :bind ("M-o C" . highlight-changes-mode))
-
-#+END_SRC
-** hippie-exp
-Crazy way of completion. It looks at the word before point and then
-tries to expand it in various ways.
-#+BEGIN_SRC emacs-lisp
-(use-package hippie-exp
-  :bind ("M-/" . hippie-expand)
-  :commands hippie-expand
-  :config
-  (progn
-    (validate-setq hippie-expand-try-functions-list '(try-expand-dabbrev
-                                             try-expand-dabbrev-all-buffers
-                                             try-expand-dabbrev-from-kill
-                                             try-complete-file-name-partially
-                                             try-complete-file-name
-                                             try-expand-all-abbrevs try-expand-list
-                                             try-expand-line
-                                             try-complete-lisp-symbol-partially
-                                             try-complete-lisp-symbol))))
-#+END_SRC
-** html-helper
-Replaced by web-mode [[*web-mode][web-mode]]
-#+BEGIN_SRC emacs-lisp :tangle no
-(autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t)
-(add-auto-mode 'html-helper-mode "\\.html$")
-(add-auto-mode 'html-helper-mode "\\.asp$")
-(add-auto-mode 'html-helper-mode "\\.phtml$")
-(add-auto-mode 'html-helper-mode "\\.(jsp|tmpl)\\'")
-(defalias 'html-mode 'html-helper-mode)
-#+END_SRC
-** hydra
-[2015-01-26 Mon 15:50]
-This is a package for GNU Emacs that can be used to tie related
-commands into a family of short bindings with a common prefix - a
-Hydra.
-
-Once you summon the Hydra through the prefixed binding (the body + any
-one head), all heads can be called in succession with only a short
-extension.
-
-The Hydra is vanquished once Hercules, any binding that isn't the
-Hydra's head, arrives. Note that Hercules, besides vanquishing the
-Hydra, will still serve his orignal purpose, calling his proper
-command. This makes the Hydra very seamless, it's like a minor mode
-that disables itself auto-magically.
-#+BEGIN_SRC emacs-lisp
-(use-package hydra
-  :ensure hydra
-  :init
-  (progn
-    (validate-setq hydra-is-helpful t)
-    (validate-setq hydra-lv t)
-
-    (defhydra hydra-zoom (:color red)
-      "zoom"
-      ("g" text-scale-increase "in")
-      ("l" text-scale-decrease "out")
-      ("q" nil "quit"))
-    (bind-key "<F2>" 'hydra-zoom/toggle)
-
-    (defhydra hydra-error (:color red)
-      "goto-error"
-      ("h" first-error "first")
-      ("j" next-error "next")
-      ("k" previous-error "prev")
-      ("v" recenter-top-bottom "recenter")
-      ("q" nil "quit"))
-    (bind-key "M-g e" 'hydra-error/body)
-
-    (defhydra hydra-gnus (:color red)
-      "gnus functions"
-      ("m" gnus-uu-mark-thread "mark thread")
-      ("d" gnus-summary-delete-article "delete article(s)")
-      ("r" gnus-summary-mark-as-read-forward "mark read")
-      ("n" gnus-summary-next-thread "next thread")
-      ("p" gnus-summary-prev-thread "previous thread")
-      ("g" gnus-summary-next-group "next group")
-      ("l" gnus-recenter "recenter")
-      ("x" gnus-summary-limit-to-unread "unread")
-      ("q" nil "quit"))
-    (bind-key "C-c h" 'hydra-gnus/body)
-
-    (defhydra hydra-launcher (:color blue)
-      "Launch"
-      ("h" man "man")
-      ("r" (browse-url "http://www.reddit.com/r/emacs/") "reddit")
-      ("w" (browse-url "http://www.emacswiki.org/") "emacswiki")
-      ("s" shell "shell")
-      ("q" nil "cancel"))
-    (bind-key "C-c r" 'hydra-launcher/body)
-
-    ; whitespace mode gets loaded late, so variable may not be there yet. Workaround...
-    (defvar whitespace-mode nil)
-    (defhydra hydra-toggle (:color pink)
-      "
-_a_ abbrev-mode:        % 4`abbrev-mode^^^^     _f_ auto-fill-mode:    %`auto-fill-function
-_c_ auto-complete-mode: % 4`auto-complete-mode     _r_ auto-revert-mode:  %`auto-revert-mode
-_d_ debug-on-error:     % 4`debug-on-error^     _t_ truncate-lines:    %`truncate-lines
-_w_ whitespace-mode:    % 4`whitespace-mode     _g_ golden-ratio-mode: %`golden-ratio-mode
-_l_ linum-mode:         % 4`linum-mode     _k_ linum relative:    %`linum-format
-
-"
-      ("a" abbrev-mode nil)
-      ("c" auto-complete-mode nil)
-      ("i" aggressive-indent-mode nil)
-      ("d" toggle-debug-on-error nil)
-      ("f" auto-fill-mode nil)
-      ("g" golden-ratio-mode nil)
-      ("t" toggle-truncate-lines nil)
-      ("w" whitespace-mode nil)
-      ("r" auto-revert-mode nil)
-      ("l" linum-mode nil)
-      ("k" linum-relative-toggle nil)
-      ("q" nil "cancel"))
-    (bind-key "C-c C-v" 'hydra-toggle/body)
-    ))
-
-
-#+END_SRC
-** ibuffer
-[2014-05-21 Wed 23:54]
-#+BEGIN_SRC emacs-lisp
-(use-package ibuffer
-  :defer t
-  :bind (("C-h h" . ibuffer)
-         ("C-x C-b" . ibuffer)
-         ("<XF86WebCam>" . ibuffer)
-         :map ibuffer-mode-map
-         ("s" . isearch-forward-regexp)
-         ("." . ibuffer-invert-sorting)
-         ("i" . ibuffer-magit-status)
-         ("G" . ibuffer-magit-status))
-  :commands (ibuffer)
-  :defines (ibuffer-filtering-alist
-            ibuffer-filter-groups ibuffer-compile-formats ibuffer-git-column-length
-            ibuffer-show-empty-filter-groups ibuffer-saved-filter-groups)
-  :config
-  (progn
-    (defvar my-ibufffer-separator " • ")
-    (validate-setq ibuffer-filter-group-name-face 'variable-pitch
-          ibuffer-use-header-line t)
-    (unbind-key "M-o" ibuffer-mode-map)
-
-    (use-package f
-      :ensure f)
-
-    (use-package ibuffer-vc
-      :ensure t
-      :commands
-      (ibuffer-vc-set-filter-groups-by-vc-root
-       ibuffer-vc-generate-filter-groups-by-vc-root))
-
-    (use-package ibuffer-tramp
-      :ensure t
-      :commands (ibuffer-tramp-generate-filter-groups-by-tramp-connection
-                 ibuffer-tramp-set-filter-groups-by-tramp-connection))
-    ;; Switching to ibuffer puts the cursor on the most recent buffer
-    (defadvice ibuffer (around ibuffer-point-to-most-recent activate)
-      "Open ibuffer with cursor pointed to most recent buffer name"
-      (let ((recent-buffer-name (buffer-name)))
-        ad-do-it
-        (ibuffer-update nil t)
-        (unless (string= recent-buffer-name "*Ibuffer*")
-          (ibuffer-jump-to-buffer recent-buffer-name))))
-
-    (defun ibuffer-magit-status ()
-      (interactive)
-      (--when-let (get-buffer "*Ibuffer*")
-        (with-current-buffer it
-          (let* ((selected-buffer (ibuffer-current-buffer))
-                 (buffer-path (with-current-buffer
-                                  selected-buffer
-                                (or (buffer-file-name)
-                                   list-buffers-directory
-                                   default-directory)))
-                 (default-directory
-                   (if (file-regular-p buffer-path)
-                       (file-name-directory buffer-path)
-                     buffer-path)))
-            (magit-status default-directory)))))
-
-    (validate-setq ibuffer-directory-abbrev-alist
-          (-uniq
-           (-flatten
-            (--map
-             (list
-              (cons  (f-slash (f-expand (cdr it))) my-ibufffer-separator)
-              (cons  (f-slash (f-canonical (cdr it))) (concat (car it) my-ibufffer-separator)))
-             '(
-               ("dak" . "/develop/dak/")
-               ("org" . "~/org/")
-               ("config" . "~/.emacs.d/config/")
-               ("tmp" . "~/tmp/")
-               ("systmp" . "/tmp/")
-               ("puppet" . "~/git/puppet")
-               ("git" . "~/git/")
-               )))))
-
-    (use-package ibuffer-git
-      :ensure t)
-    (use-package ibuffer-vc
-      :ensure t)
-
-    (define-ibuffer-column size-h
-      (:name "Size" :inline t)
-      (cond
-       ((> (buffer-size) 1000)
-        (format "%7.1fk" (/ (buffer-size) 1000.0)))
-       ((> (buffer-size) 1000000)
-        (format "%7.1fM" (/ (buffer-size) 1000000.0)))
-       (t
-        (format "%8d" (buffer-size)))))
-
-    (use-package ibuf-ext
-      :config
-      (validate-setq ibuffer-old-time 12))
-
-    (define-ibuffer-filter filename2
-        "Toggle current view to buffers with filename matching QUALIFIER."
-      (:description "filename2"
-                    :reader (read-from-minibuffer "Filter by filename (regexp): "))
-      ;; (ibuffer-awhen (buffer-local-value 'buffer-file-name buf)
-      (ibuffer-awhen (with-current-buffer buf
-                       (or buffer-file-name
-                          default-directory))
-        (string-match qualifier it)))
-
-    (defvar ibuffer-magit-filter-groups nil)
-    (defun ibuffer-magit-define-filter-groups ()
-      (when (and (not ibuffer-magit-filter-groups)
-               (boundp 'magit-repo-dirs))
-        (validate-setq ibuffer-magit-filter-groups
-              (--map (list
-                      (concat "git:: "
-                              (file-name-nondirectory (directory-file-name it)))
-                      `(filename2 . ,it))
-                     (mapcar 'cdr (magit-list-repos magit-repo-dirs))))))
-
-    (defun ibuffer-set-filter-groups-by-root  ()
-      (interactive)
-      ;; (ibuffer-projectile-define-filter-groups)
-      ;; (ibuffer-magit-define-filter-groups)
-      (validate-setq ibuffer-filter-groups
-            (-concat
-             ;; ibuffer-projectile-filter-groups
-             ibuffer-magit-filter-groups
-
-             '(("MORE"
-                (or (mode . magit-log-edit-mode)
-                   (name . "^\\*\\(traad-server\\|httpd\\|epc con.*\\|tramp/.*\\|Completions\\)\\*$")
-                   (name . "^\\*Pymacs\\*$")
-                   (name . "^\\*helm.*\\*")
-                   (name . "^\\*Compile-log\\*$")
-                   (name . "^\\*Ido Completions\\*$")
-                   (name . "^\\*magit-\\(process\\)\\*$")
-                   (name . "^ "))))
-             '(("Tramp"
-                (or
-                 (name . "^\\*\\(tramp/.*\\)\\*$"))))
-             '(("EMACS"
-                (or
-                 (name . "^\\*scratch")
-                 (name . "^\\*Messages")
-                 (name . "^\\*Help")
-                 )))
-             (ibuffer-vc-generate-filter-groups-by-vc-root)
-             (ibuffer-tramp-generate-filter-groups-by-tramp-connection))))
-
-    (defun toggle-ibuffer-filter-groups ()
-      "DOCSTRING"
-      (interactive)
-      (let ((ibuf (get-buffer "*Ibuffer*")))
-        (when ibuf
-          (with-current-buffer ibuf
-            (let ((selected-buffer (ibuffer-current-buffer)))
-              (if (not ibuffer-filter-groups)
-                  (ibuffer-set-filter-groups-by-root)
-                (validate-setq ibuffer-filter-groups nil))
-              (pop-to-buffer ibuf)
-              (ibuffer-update nil t)
-              (ibuffer-jump-to-buffer (buffer-name selected-buffer )))))))
-
-    (bind-key "h" 'toggle-ibuffer-filter-groups ibuffer-mode-map)
-
-    (defun ibuffer-back-to-top ()
-      (interactive)
-      (beginning-of-buffer)
-      (next-line 3))
-
-    (defun ibuffer-jump-to-bottom ()
-      (interactive)
-      (end-of-buffer)
-      (beginning-of-line)
-      (next-line -2))
-
-    (define-key ibuffer-mode-map
-      (vector 'remap 'end-of-buffer) 'ibuffer-jump-to-bottom)
-    (define-key ibuffer-mode-map
-      (vector 'remap 'beginning-of-buffer) 'ibuffer-back-to-top)
-
-    (setq ibuffer-default-sorting-mode 'recency)
-    (setq      ibuffer-eliding-string "…"
-          ibuffer-compile-formats t
-          ibuffer-git-column-length 6
-          ibuffer-show-empty-filter-groups nil
-          ibuffer-default-directory "~/"
-          )
-
-    (validate-setq ibuffer-formats '((mark vc-status-mini
-                                  " "
-                                  (git-status 8 8 :left)
-                                  " "
-                                  read-only modified
-                                  " "
-                                  (name 18 18 :left :elide)
-                                  " "
-                                  (size-h 9 -1 :right)
-                                  " "
-                                  (mode 16 16 :left :elide)
-                                  " " filename-and-process)
-                            (mark " "
-                                  (git-status 8 8 :left)
-                                  " "
-                                  (name 16 -1)
-                                  " " filename)
-                            ))
-
-     (validate-setq ibuffer-saved-filter-groups
-           (quote (("flat")
-                   ("default"
-                    ("dired"  (mode . dired-mode))
-                    ("perl"   (mode . cperl-mode))
-                    ("puppet" (or
-                               (mode . puppet-mode)
-                               (mode . yaml-mode)))
-                    ("ruby"   (mode . ruby-mode))
-                    ("emacs" (or
-                              (name . "^\\*scratch\\*$")
-                              (name . "^\\*Compile-log\\*$")
-                              (name . "^\\*Completions\\*$")
-                              (name . "^\\*Messages\\*$")
-                              (name . "^\\*Backtrace\\*$")
-                              (name . "^\\*Packages*\\*$")
-                              (name . "^\\*Help*\\*$")
-                              (mode . grep-mode)
-                              ))
-                    ("gnus"  (or
-                              (mode . message-mode)
-                              (mode . bbdb-mode)
-                              (mode . mail-mode)
-                              (mode . gnus-group-mode)
-                              (mode . gnus-summary-mode)
-                              (mode . gnus-article-mode)
-                              (name . "^\\.bbdb$")
-                              (name . "^\\.newsrc-dribble")))
-                    ("org agenda" (or
-                                   (mode . org-agenda-mode)
-                                   (name . "^*Org Agenda")))
-                    ("org"   (or
-                              (filename . ".*/org/.*")
-                              ;(mode . org-agenda-mode)
-                              (name . "^diary$")))
-                    ("scm" (or
-                            (mode . magit-status-mode)
-                            (mode . magit-log-mode)
-                            (mode . magit-diff-mode)
-                            (mode . magit-refs-mode)
-                            (mode . magit-revision-mode)
-                            (mode . vc-annotate-mode)))
-                    ("Tramp" (or
-                              (name . "^\\*\\(tramp/.*\\)\\*$")))
-                    ("code" (or
-                             (mode . emacs-lisp-mode)
-                             (mode . python-mode)
-                             (mode . ruby-mode)
-                             (mode . coffee-mode)
-                             (mode . js-mode)
-                             (mode . js2-mode)
-                             (mode . actionscript-mode)
-                             (mode . java-mode)
-                             (mode . sh-mode)
-                             (mode . haskell-mode)
-                             (mode . html-mode)
-                             (mode . web-mode)
-                             (mode . haml-mode)
-                             (mode . nxml-mode)
-                             (mode . go-mode)
-                             (mode . css-mode)))
-                    ("other" (or
-                              (mode . magit-log-edit-mode)
-                              (name . "^\\*magit-\\(process\\|commit\\)\\*$"))))
-                   ("categorized"
-              ;; -------------------------------------------------
-              ;; programming languages #1
-                    ("code" (or
-                             (mode . emacs-lisp-mode)
-                             (mode . python-mode)
-                             (mode . ruby-mode)
-                             (mode . coffee-mode)
-                             (mode . js-mode)
-                             (mode . js2-mode)
-                             (mode . actionscript-mode)
-                             (mode . java-mode)
-                             (mode . sh-mode)
-                             (mode . haskell-mode)
-                             (mode . html-mode)
-                             (mode . web-mode)
-                             (mode . haml-mode)
-                             (mode . nxml-mode)
-                             (mode . go-mode)
-                             (mode . css-mode)))
-                    ;; -------------------------------------------------
-                    ;; configuration/data files
-                    ("conf" (or
-                             (mode . json-mode)
-                             (mode . yaml-mode)
-                             (mode . conf-mode)))
-                    ;; -------------------------------------------------
-                    ;; text/notetaking/org
-                    ("org agenda"  (mode . org-agenda-mode))
-                    ("org" (or
-                            (mode . org-mode)
-                            (name . "^\\*Calendar\\*$")
-                            (name . "^diary$")))
-                    ("text misc" (or
-                                  (mode . text-mode)
-                                  (mode . rst-mode)
-                                  (mode . markdown-mode)))
-                    ;; -------------------------------------------------
-                    ;; media
-                    ("media" (or
-                              (mode . image-mode)))
-                    ;; -------------------------------------------------
-                    ;; misc
-                    ("w3m" (mode . w3m-mode))
-                    ("scm" (or
-                            (mode . magit-status-mode)
-                            (mode . magit-log-mode)
-                            (mode . vc-annotate-mode)))
-                    ("dired" (mode . dired-mode))
-                    ("help" (or
-                             (mode . Info-mode)
-                             (mode . help-mode)
-                             (mode . Man-mode)
-                             (name . "^\\*Personal Keybindings\\*$")))
-                    ("Tramp" (or
-                              (name . "^\\*\\(tramp/.*\\)\\*$")))
-                    ;; -------------------------------------------------
-                    ;; *buffer* buffers
-                    ("MORE" (or (mode . magit-log-edit-mode)
-                                (name . "^\\*\\(traad-server\\|httpd\\|epc con.*\\|tramp/.*\\|Completions\\)\\*$")
-                                (name . "^\\*Pymacs\\*$")
-                                (name . "^\\*Compile-log\\*$")
-                                (name . "^\\*Completions\\*$")
-                                (name . "^\\*magit-\\(process\\|commit\\)\\*$")
-                                (name . "^ ")))
-                    ("*buffer*" (name . "\\*.*\\*"))))))
-
-    (add-hook 'ibuffer-mode-hook
-              (lambda ()
-                (ibuffer-auto-mode 1)
-                (ibuffer-switch-to-saved-filter-groups "default")))
-
-  ;; Unless you turn this variable on you will be prompted every time
-  ;; you want to delete a buffer, even unmodified ones, which is way
-  ;; too cautious for most people. You’ll still be prompted for
-  ;; confirmation when deleting modified buffers after the option has
-  ;; been turned off.
-  (validate-setq ibuffer-expert t)
-))
-#+END_SRC
+ [2017-03-11 Sat 20:06]
+ The go language, see golang.org
+ #+BEGIN_SRC emacs-lisp
+ (use-package go-mode
+   :ensure t
+   :bind (("M-." . godef-jump)
+          ("M-*" . pop-tag-mark))
+   :config
+   (progn
+     (defun my-go-mode-hook ()
+       (interactive)
+       (add-hook 'before-save-hook 'gofmt-before-save)
+       ; Customize compile command to run go build
+       (if (not (string-match "go" compile-command))
+           (set (make-local-variable 'compile-command)
+                "go build -v && go test -v && go vet"))
+                                         ; Use goimports instead of go-fmt
+       (setq gofmt-command "goimports")
+       )
+     (add-hook 'go-mode-hook 'my-go-mode-hook)
+     (use-package go-autocomplete
+       :ensure t)
+     (use-package go-eldoc
+       :ensure t
+       :config
+       (progn
+         (add-hook 'go-mode-hook 'go-eldoc-setup)))
+     (use-package go-guru
+       :ensure t
+       :config
+       (progn
+         (go-guru-hl-identifier-mode)
+         (setq go-guru-command "golang-guru")))
+     ))
+ #+END_SRC
+** golden ratio
+ [2015-02-20 Fri 16:27]
+ When working with many windows at the same time, each window has a
+ size that is not convenient for editing.
+
+ golden-ratio helps on this issue by resizing automatically the windows
+ you are working on to the size specified in the "Golden Ratio". The
+ window that has the main focus will have the perfect size for editing,
+ while the ones that are not being actively edited will be re-sized to
+ a smaller size that doesn't get in the way, but at the same time will
+ be readable enough to know it's content.
+ #+BEGIN_SRC emacs-lisp
+ (use-package golden-ratio
+   :ensure golden-ratio
+   :diminish golden-ratio-mode
+   :init
+   (progn
+     (golden-ratio-mode 1)
+     (validate-setq golden-ratio-exclude-buffer-names '("*LV*" "*guide-key*" "*Ediff Control Panel*"))
+     (validate-setq golden-ratio-exclude-modes '("calendar-mode" "gnus-summary-mode"
+                                        "gnus-article-mode" "calc-mode" "calc-trail-mode"
+                                        "bbdb-mode"))
+     ))
+ #+END_SRC
+** goto last change
+ [2015-02-22 Sun 13:28]
+ Move point through buffer-undo-list positions.
+ #+BEGIN_SRC emacs-lisp
+ (use-package goto-last-change
+   :commands (goto-last-change)
+   :bind (("M-g l" . goto-last-change))
+   )
+ #+END_SRC
+** guide-key
+ [2014-06-11 Wed 22:27]
+ guide-key.el displays the available key bindings automatically and
+ dynamically.
+
+ For whatever reason I like this more than icicles <backtab> completion
+ for this.
+ #+BEGIN_SRC emacs-lisp
+ (use-package guide-key
+   :ensure guide-key
+   :diminish guide-key-mode
+   :config
+   (progn
+     (validate-setq guide-key/guide-key-sequence '("C-x" "C-c" "M-g" "M-s"))
+     (guide-key-mode 1)
+     (validate-setq guide-key/recursive-key-sequence-flag t)
+     (validate-setq guide-key/popup-window-position 'bottom)
+     (validate-setq guide-key/idle-delay 0.5)))
+
+ #+END_SRC
+
+** highlighting modes
+ [2014-05-21 Wed 23:51]
+ #+BEGIN_SRC emacs-lisp
+(use-package hi-lock
+   :bind (("M-o l" . highlight-lines-matching-regexp)
+          ("M-o r" . highlight-regexp)
+          ("M-o w" . highlight-phrase)
+          ("M-o u" . unhighlight-regexp)))
+
+ (use-package hilit-chg
+   :bind ("M-o C" . highlight-changes-mode))
+
+ (use-package highlight-indentation
+   :ensure t
+   :commands 'highlight-indentation-mode
+   :init
+   (hook-into-modes 'highlight-indentation-mode '(yaml-mode-hook python-mode-hook))
+   (hook-into-modes 'highlight-indentation-current-column-mode '(yaml-mode-hook python-mode-hook))
+   (set-face-background 'highlight-indentation-face "#283d83")
+   (set-face-background 'highlight-indentation-current-column-face "#285f85")
+   )
+ #+END_SRC
+** hippie-exp
+ Crazy way of completion. It looks at the word before point and then
+ tries to expand it in various ways.
+ #+BEGIN_SRC emacs-lisp
+ (use-package hippie-exp
+   :bind ("M-/" . hippie-expand)
+   :commands hippie-expand
+   :config
+   (progn
+     (validate-setq hippie-expand-try-functions-list '(try-expand-dabbrev
+                                              try-expand-dabbrev-all-buffers
+                                              try-expand-dabbrev-from-kill
+                                              try-complete-file-name-partially
+                                              try-complete-file-name
+                                              try-expand-all-abbrevs try-expand-list
+                                              try-expand-line
+                                              try-complete-lisp-symbol-partially
+                                              try-complete-lisp-symbol))))
+ #+END_SRC
+** CANCELLED html-helper                                         :CANCELLED:
+CLOSED: [2017-08-26 Sat 15:09]
+:LOGBOOK:
+- State "CANCELLED"  from              [2017-08-26 Sat 15:09]
+:END:
+ Replaced by web-mode [[*web-mode][web-mode]]
+ #+BEGIN_SRC emacs-lisp :tangle no
+ (autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t)
+ (add-auto-mode 'html-helper-mode "\\.html$")
+ (add-auto-mode 'html-helper-mode "\\.asp$")
+ (add-auto-mode 'html-helper-mode "\\.phtml$")
+ (add-auto-mode 'html-helper-mode "\\.(jsp|tmpl)\\'")
+ (defalias 'html-mode 'html-helper-mode)
+ #+END_SRC
+** hydra
+ [2015-01-26 Mon 15:50]
+ This is a package for GNU Emacs that can be used to tie related
+ commands into a family of short bindings with a common prefix - a
+ Hydra.
+
+ Once you summon the Hydra through the prefixed binding (the body + any
+ one head), all heads can be called in succession with only a short
+ extension.
+
+ The Hydra is vanquished once Hercules, any binding that isn't the
+ Hydra's head, arrives. Note that Hercules, besides vanquishing the
+ Hydra, will still serve his orignal purpose, calling his proper
+ command. This makes the Hydra very seamless, it's like a minor mode
+ that disables itself auto-magically.
+ #+BEGIN_SRC emacs-lisp
+ (use-package hydra
+   :ensure hydra
+   :init
+   (progn
+     (validate-setq hydra-is-helpful t)
+     (validate-setq hydra-lv t)
+
+     (defhydra hydra-error (:color red)
+       "goto-error"
+       ("h" first-error "first")
+       ("j" next-error "next")
+       ("k" previous-error "prev")
+       ("v" recenter-top-bottom "recenter")
+       ("q" nil "quit"))
+     (bind-key "M-g e" 'hydra-error/body)
+
+     (defhydra hydra-gnus (:color red)
+       "gnus functions"
+       ("m" gnus-uu-mark-thread "mark thread")
+       ("d" gnus-summary-delete-article "delete article(s)")
+       ("r" gnus-summary-mark-as-read-forward "mark read")
+       ("n" gnus-summary-next-thread "next thread")
+       ("p" gnus-summary-prev-thread "previous thread")
+       ("g" gnus-summary-next-group "next group")
+       ("l" gnus-recenter "recenter")
+       ("x" gnus-summary-limit-to-unread "unread")
+       ("q" nil "quit"))
+     (bind-key "C-c h" 'hydra-gnus/body)
+
+     (defhydra hydra-launcher (:color blue)
+       "Launch"
+       ("h" man "man")
+       ("r" (browse-url "http://www.reddit.com/r/emacs/") "reddit")
+       ("w" (browse-url "http://www.emacswiki.org/") "emacswiki")
+       ("s" shell "shell")
+       ("q" nil "cancel"))
+     (bind-key "M-g r" 'hydra-launcher/body)
+
+     ; whitespace mode gets loaded late, so variable may not be there yet. Workaround...
+     (defvar whitespace-mode nil)
+     (defhydra hydra-toggle (:color pink)
+       "
+ _a_ abbrev-mode:        % 4`abbrev-mode^^^^     _f_ auto-fill-mode:    %`auto-fill-function
+ _c_ auto-complete-mode: % 4`auto-complete-mode     _r_ auto-revert-mode:  %`auto-revert-mode
+ _d_ debug-on-error:     % 4`debug-on-error^     _t_ truncate-lines:    %`truncate-lines
+ _w_ whitespace-mode:    % 4`whitespace-mode     _g_ golden-ratio-mode: %`golden-ratio-mode
+ _l_ linum-mode:         % 4`linum-mode     _k_ linum relative:    %`linum-format
+
+ "
+       ("a" abbrev-mode nil)
+       ("c" auto-complete-mode nil)
+       ("i" aggressive-indent-mode nil)
+       ("d" toggle-debug-on-error nil)
+       ("f" auto-fill-mode nil)
+       ("g" golden-ratio-mode nil)
+       ("t" toggle-truncate-lines nil)
+       ("w" whitespace-mode nil)
+       ("r" auto-revert-mode nil)
+       ("l" linum-mode nil)
+       ("k" linum-relative-toggle nil)
+       ("q" nil "cancel"))
+     (bind-key "C-c C-v" 'hydra-toggle/body)
+     ))
+
+
+ #+END_SRC
+** ibuffer
+ [2014-05-21 Wed 23:54]
+ #+BEGIN_SRC emacs-lisp
+ (use-package ibuffer
+   :bind (("C-h h" . ibuffer)
+          ("C-x C-b" . ibuffer)
+          ("<XF86WebCam>" . ibuffer)
+          :map ibuffer-mode-map
+          ("s" . isearch-forward-regexp)
+          ("." . ibuffer-invert-sorting)
+          ("i" . ibuffer-magit-status)
+          ("G" . ibuffer-magit-status))
+   :commands (ibuffer)
+   :defines (ibuffer-filtering-alist
+             ibuffer-filter-groups ibuffer-compile-formats ibuffer-git-column-length
+             ibuffer-show-empty-filter-groups ibuffer-saved-filter-groups)
+   :config
+   (progn
+     (defvar my-ibufffer-separator " • ")
+     (validate-setq ibuffer-filter-group-name-face 'variable-pitch
+           ibuffer-use-header-line t)
+     (unbind-key "M-o" ibuffer-mode-map)
+
+     (use-package f
+       :ensure f)
+
+     (use-package ibuffer-vc
+       :ensure t
+       :commands
+       (ibuffer-vc-set-filter-groups-by-vc-root
+        ibuffer-vc-generate-filter-groups-by-vc-root))
+
+     (use-package ibuffer-tramp
+       :ensure t
+       :commands (ibuffer-tramp-generate-filter-groups-by-tramp-connection
+                  ibuffer-tramp-set-filter-groups-by-tramp-connection))
+     ;; Switching to ibuffer puts the cursor on the most recent buffer
+     (defadvice ibuffer (around ibuffer-point-to-most-recent activate)
+       "Open ibuffer with cursor pointed to most recent buffer name"
+       (let ((recent-buffer-name (buffer-name)))
+         ad-do-it
+         (ibuffer-update nil t)
+         (unless (string= recent-buffer-name "*Ibuffer*")
+           (ibuffer-jump-to-buffer recent-buffer-name))))
+
+     (defun ibuffer-magit-status ()
+       (interactive)
+       (--when-let (get-buffer "*Ibuffer*")
+         (with-current-buffer it
+           (let* ((selected-buffer (ibuffer-current-buffer))
+                  (buffer-path (with-current-buffer
+                                   selected-buffer
+                                 (or (buffer-file-name)
+                                    list-buffers-directory
+                                    default-directory)))
+                  (default-directory
+                    (if (file-regular-p buffer-path)
+                        (file-name-directory buffer-path)
+                      buffer-path)))
+             (magit-status default-directory)))))
+
+     (validate-setq ibuffer-directory-abbrev-alist
+           (-uniq
+            (-flatten
+             (--map
+              (list
+               (cons  (f-slash (f-expand (cdr it))) my-ibufffer-separator)
+               (cons  (f-slash (f-canonical (cdr it))) (concat (car it) my-ibufffer-separator)))
+              '(
+                ("dak" . "/develop/dak/")
+                ("org" . "~/org/")
+                ("config" . "~/.emacs.d/config/")
+                ("tmp" . "~/tmp/")
+                ("systmp" . "/tmp/")
+                ("puppet" . "~/git/puppet")
+                ("git" . "~/git/")
+                )))))
+
+     (use-package ibuffer-git
+       :ensure t)
+     (use-package ibuffer-vc
+       :ensure t)
+
+     (define-ibuffer-column size-h
+       (:name "Size" :inline t)
+       (cond
+        ((> (buffer-size) 1000)
+         (format "%7.1fk" (/ (buffer-size) 1000.0)))
+        ((> (buffer-size) 1000000)
+         (format "%7.1fM" (/ (buffer-size) 1000000.0)))
+        (t
+         (format "%8d" (buffer-size)))))
+
+     (use-package ibuf-ext
+       :config
+       (validate-setq ibuffer-old-time 12))
+
+     (define-ibuffer-filter filename2
+         "Toggle current view to buffers with filename matching QUALIFIER."
+       (:description "filename2"
+                     :reader (read-from-minibuffer "Filter by filename (regexp): "))
+       ;; (ibuffer-awhen (buffer-local-value 'buffer-file-name buf)
+       (ibuffer-awhen (with-current-buffer buf
+                        (or buffer-file-name
+                           default-directory))
+         (string-match qualifier it)))
+
+     (defvar ibuffer-magit-filter-groups nil)
+     (defun ibuffer-magit-define-filter-groups ()
+       (when (and (not ibuffer-magit-filter-groups)
+                (boundp 'magit-repo-dirs))
+         (validate-setq ibuffer-magit-filter-groups
+               (--map (list
+                       (concat "git:: "
+                               (file-name-nondirectory (directory-file-name it)))
+                       `(filename2 . ,it))
+                      (mapcar 'cdr (magit-list-repos magit-repo-dirs))))))
+
+     (defun ibuffer-set-filter-groups-by-root  ()
+       (interactive)
+       ;; (ibuffer-projectile-define-filter-groups)
+       ;; (ibuffer-magit-define-filter-groups)
+       (validate-setq ibuffer-filter-groups
+             (-concat
+              ;; ibuffer-projectile-filter-groups
+              ibuffer-magit-filter-groups
+
+              '(("MORE"
+                 (or (mode . magit-log-edit-mode)
+                    (name . "^\\*\\(traad-server\\|httpd\\|epc con.*\\|tramp/.*\\|Completions\\)\\*$")
+                    (name . "^\\*Pymacs\\*$")
+                    (name . "^\\*helm.*\\*")
+                    (name . "^\\*Compile-log\\*$")
+                    (name . "^\\*Ido Completions\\*$")
+                    (name . "^\\*magit-\\(process\\)\\*$")
+                    (name . "^ "))))
+              '(("Tramp"
+                 (or
+                  (name . "^\\*\\(tramp/.*\\)\\*$"))))
+              '(("EMACS"
+                 (or
+                  (name . "^\\*scratch")
+                  (name . "^\\*Messages")
+                  (name . "^\\*Help")
+                  )))
+              (ibuffer-vc-generate-filter-groups-by-vc-root)
+              (ibuffer-tramp-generate-filter-groups-by-tramp-connection))))
+
+     (defun toggle-ibuffer-filter-groups ()
+       "DOCSTRING"
+       (interactive)
+       (let ((ibuf (get-buffer "*Ibuffer*")))
+         (when ibuf
+           (with-current-buffer ibuf
+             (let ((selected-buffer (ibuffer-current-buffer)))
+               (if (not ibuffer-filter-groups)
+                   (ibuffer-set-filter-groups-by-root)
+                 (validate-setq ibuffer-filter-groups nil))
+               (pop-to-buffer ibuf)
+               (ibuffer-update nil t)
+               (ibuffer-jump-to-buffer (buffer-name selected-buffer )))))))
+
+     (bind-key "h" 'toggle-ibuffer-filter-groups ibuffer-mode-map)
+
+     (defun ibuffer-back-to-top ()
+       (interactive)
+       (beginning-of-buffer)
+       (next-line 3))
+
+     (defun ibuffer-jump-to-bottom ()
+       (interactive)
+       (end-of-buffer)
+       (beginning-of-line)
+       (next-line -2))
+
+     (define-key ibuffer-mode-map
+       (vector 'remap 'end-of-buffer) 'ibuffer-jump-to-bottom)
+     (define-key ibuffer-mode-map
+       (vector 'remap 'beginning-of-buffer) 'ibuffer-back-to-top)
+
+     (setq ibuffer-default-sorting-mode 'recency)
+     (setq      ibuffer-eliding-string "…"
+           ibuffer-compile-formats t
+           ibuffer-git-column-length 6
+           ibuffer-show-empty-filter-groups nil
+           ibuffer-default-directory "~/"
+           )
+
+     (validate-setq ibuffer-formats '((mark vc-status-mini
+                                   " "
+                                   (git-status 8 8 :left)
+                                   " "
+                                   read-only modified
+                                   " "
+                                   (name 18 18 :left :elide)
+                                   " "
+                                   (size-h 9 -1 :right)
+                                   " "
+                                   (mode 16 16 :left :elide)
+                                   " " filename-and-process)
+                             (mark " "
+                                   (git-status 8 8 :left)
+                                   " "
+                                   (name 16 -1)
+                                   " " filename)
+                             ))
+
+      (validate-setq ibuffer-saved-filter-groups
+            (quote (("flat")
+                    ("default"
+                     ("dired"  (mode . dired-mode))
+                     ("perl"   (mode . cperl-mode))
+                     ("puppet" (or
+                                (mode . puppet-mode)
+                                (mode . yaml-mode)))
+                     ("ruby"   (mode . ruby-mode))
+                     ("emacs" (or
+                               (name . "^\\*scratch\\*$")
+                               (name . "^\\*Compile-log\\*$")
+                               (name . "^\\*Completions\\*$")
+                               (name . "^\\*Messages\\*$")
+                               (name . "^\\*Backtrace\\*$")
+                               (name . "^\\*Packages*\\*$")
+                               (name . "^\\*Help*\\*$")
+                               (mode . grep-mode)
+                               ))
+                     ("gnus"  (or
+                               (mode . message-mode)
+                               (mode . bbdb-mode)
+                               (mode . mail-mode)
+                               (mode . gnus-group-mode)
+                               (mode . gnus-summary-mode)
+                               (mode . gnus-article-mode)
+                               (name . "^\\.bbdb$")
+                               (name . "^\\.newsrc-dribble")))
+                     ("org agenda" (or
+                                    (mode . org-agenda-mode)
+                                    (name . "^*Org Agenda")))
+                     ("org"   (or
+                               (filename . ".*/org/.*")
+                               ;(mode . org-agenda-mode)
+                               (name . "^diary$")))
+                     ("scm" (or
+                             (mode . magit-status-mode)
+                             (mode . magit-log-mode)
+                             (mode . magit-diff-mode)
+                             (mode . magit-refs-mode)
+                             (mode . magit-revision-mode)
+                             (mode . vc-annotate-mode)))
+                     ("Tramp" (or
+                               (name . "^\\*\\(tramp/.*\\)\\*$")))
+                     ("code" (or
+                              (mode . emacs-lisp-mode)
+                              (mode . python-mode)
+                              (mode . ruby-mode)
+                              (mode . coffee-mode)
+                              (mode . js-mode)
+                              (mode . js2-mode)
+                              (mode . actionscript-mode)
+                              (mode . java-mode)
+                              (mode . sh-mode)
+                              (mode . haskell-mode)
+                              (mode . html-mode)
+                              (mode . web-mode)
+                              (mode . haml-mode)
+                              (mode . nxml-mode)
+                              (mode . go-mode)
+                              (mode . css-mode)))
+                     ("other" (or
+                               (mode . magit-log-edit-mode)
+                               (name . "^\\*magit-\\(process\\|commit\\)\\*$"))))
+                    ("categorized"
+               ;; -------------------------------------------------
+               ;; programming languages #1
+                     ("code" (or
+                              (mode . emacs-lisp-mode)
+                              (mode . python-mode)
+                              (mode . ruby-mode)
+                              (mode . coffee-mode)
+                              (mode . js-mode)
+                              (mode . js2-mode)
+                              (mode . actionscript-mode)
+                              (mode . java-mode)
+                              (mode . sh-mode)
+                              (mode . haskell-mode)
+                              (mode . html-mode)
+                              (mode . web-mode)
+                              (mode . haml-mode)
+                              (mode . nxml-mode)
+                              (mode . go-mode)
+                              (mode . css-mode)))
+                     ;; -------------------------------------------------
+                     ;; configuration/data files
+                     ("conf" (or
+                              (mode . json-mode)
+                              (mode . yaml-mode)
+                              (mode . conf-mode)))
+                     ;; -------------------------------------------------
+                     ;; text/notetaking/org
+                     ("org agenda"  (mode . org-agenda-mode))
+                     ("org" (or
+                             (mode . org-mode)
+                             (name . "^\\*Calendar\\*$")
+                             (name . "^diary$")))
+                     ("text misc" (or
+                                   (mode . text-mode)
+                                   (mode . rst-mode)
+                                   (mode . markdown-mode)))
+                     ;; -------------------------------------------------
+                     ;; media
+                     ("media" (or
+                               (mode . image-mode)))
+                     ;; -------------------------------------------------
+                     ;; misc
+                     ("w3m" (mode . w3m-mode))
+                     ("scm" (or
+                             (mode . magit-status-mode)
+                             (mode . magit-log-mode)
+                             (mode . vc-annotate-mode)))
+                     ("dired" (mode . dired-mode))
+                     ("help" (or
+                              (mode . Info-mode)
+                              (mode . help-mode)
+                              (mode . Man-mode)
+                              (name . "^\\*Personal Keybindings\\*$")))
+                     ("Tramp" (or
+                               (name . "^\\*\\(tramp/.*\\)\\*$")))
+                     ;; -------------------------------------------------
+                     ;; *buffer* buffers
+                     ("MORE" (or (mode . magit-log-edit-mode)
+                                 (name . "^\\*\\(traad-server\\|httpd\\|epc con.*\\|tramp/.*\\|Completions\\)\\*$")
+                                 (name . "^\\*Pymacs\\*$")
+                                 (name . "^\\*Compile-log\\*$")
+                                 (name . "^\\*Completions\\*$")
+                                 (name . "^\\*magit-\\(process\\|commit\\)\\*$")
+                                 (name . "^ ")))
+                     ("*buffer*" (name . "\\*.*\\*"))))))
+
+     (add-hook 'ibuffer-mode-hook
+               (lambda ()
+                 (ibuffer-auto-mode 1)
+                 (ibuffer-switch-to-saved-filter-groups "default")))
+
+   ;; Unless you turn this variable on you will be prompted every time
+   ;; you want to delete a buffer, even unmodified ones, which is way
+   ;; too cautious for most people. You’ll still be prompted for
+   ;; confirmation when deleting modified buffers after the option has
+   ;; been turned off.
+   (validate-setq ibuffer-expert t)
+ ))
+ #+END_SRC
 ** ivy-mode, swiper, counsel
-[2015-10-16 Fri 16:28]
-Full docs at http://oremacs.com/swiper/
-#+BEGIN_SRC emacs-lisp
-(use-package swiper
-  :ensure swiper
-  :bind (("C-s" . swiper)
-         ("C-r" . swiper)
-         ("C-c C-r" . ivy-resume)
-         ("<f7>" . ivy-resume))
-  :config
-  (progn
-    ;(ivy-mode 1)
-    (validate-setq ivy-use-virtual-buffers t)
-    ;;advise swiper to recenter on exit
-    (defun bjm-swiper-recenter (&rest args)
-      "recenter display after swiper"
-      (recenter)
-      )
-    (advice-add 'swiper :after #'bjm-swiper-recenter)
-    ))
-#+END_SRC
-counsel is a collection of Ivy enhanced versions of common Emacs
-commands, see https://github.com/abo-abo/swiper
-#+BEGIN_SRC emacs-lisp
-(use-package counsel
-  :ensure t
-  :bind  (("M-y" . counsel-yank-pop)
-          ("M-x" . counsel-M-x)
-          ("C-x C-f" . counsel-find-file)
-          ("<f1> f" . counsel-describe-function)
-          ("<f1> u" . counsel-unicode-char)
-          ("C-c j" . counsel-git-grep)
-           :map ivy-minibuffer-map
-           ("M-y" . ivy-next-line)))
-#+END_SRC
+ [2015-10-16 Fri 16:28]
+ Full docs at http://oremacs.com/swiper/
+ #+BEGIN_SRC emacs-lisp
+ (use-package swiper
+   :ensure swiper
+   :bind (("C-s" . swiper)
+          ("C-r" . swiper)
+          ("C-c C-r" . ivy-resume)
+          ("<f7>" . ivy-resume))
+   :config
+   (progn
+     ;(ivy-mode 1)
+     (validate-setq ivy-use-virtual-buffers t)
+     ;;advise swiper to recenter on exit
+     (defun bjm-swiper-recenter (&rest args)
+       "recenter display after swiper"
+       (recenter)
+       )
+     (advice-add 'swiper :after #'bjm-swiper-recenter)
+     ))
+ #+END_SRC
+ counsel is a collection of Ivy enhanced versions of common Emacs
+ commands, see https://github.com/abo-abo/swiper
+ #+BEGIN_SRC emacs-lisp
+ (use-package counsel
+   :ensure t
+   :bind  (("M-y" . counsel-yank-pop)
+           ("M-x" . counsel-M-x)
+           ("C-x C-f" . counsel-find-file)
+           ("<f1> f" . counsel-describe-function)
+           ("<f1> u" . counsel-unicode-char)
+           ("C-c j" . counsel-git-grep)
+            :map ivy-minibuffer-map
+            ("M-y" . ivy-next-line)))
+ #+END_SRC
 ** icicles
-[[http://article.gmane.org/gmane.emacs.orgmode/4574/match%3Dicicles]["In case you never heard of it, Icicles is to ‘TAB’ completion what
-‘TAB’ completion is to typing things manually every time.”]]
-#+BEGIN_SRC emacs-lisp
-(use-package icicles
-  :ensure icicles
-  :config
-  (icy-mode 1))
-#+END_SRC
-** icomplete
-Incremental mini-buffer completion preview: Type in the minibuffer,
-list of matching commands is echoed
-#+BEGIN_SRC emacs-lisp
-(icomplete-mode 99)
-#+END_SRC
+ [[http://article.gmane.org/gmane.emacs.orgmode/4574/match%3Dicicles]["In case you never heard of it, Icicles is to ‘TAB’ completion what
+ ‘TAB’ completion is to typing things manually every time.”]]
+ #+BEGIN_SRC emacs-lisp
+ (use-package icicles
+   :ensure icicles
+   :config
+   (icy-mode 1))
+ #+END_SRC
+** CANCELLED icomplete                                           :CANCELLED:
+CLOSED: [2017-08-26 Sat 14:44]
+:LOGBOOK:
+- State "CANCELLED"  from              [2017-08-26 Sat 14:44] \\
+  ivy and icomplete dont work together
+:END:
+ Incremental mini-buffer completion preview: Type in the minibuffer,
+ list of matching commands is echoed
+ #+BEGIN_SRC emacs-lisp
+ (icomplete-mode 99)
+ #+END_SRC
 ** iedit
-[2014-05-26 Mon 22:49]
-#+BEGIN_SRC emacs-lisp
-(use-package iedit
-  :ensure iedit
-  :commands (iedit-mode)
-  :defer t
-  :bind (("C-;" . iedit-mode)
-         ("C-," . iedit-mode-toggle-on-function))
-  )
-
-#+END_SRC
+ [2014-05-26 Mon 22:49]
+ #+BEGIN_SRC emacs-lisp
+ (use-package iedit
+   :ensure iedit
+   :commands (iedit-mode)
+   :defer t
+   :bind (("C-;" . iedit-mode)
+          ("C-," . iedit-mode-toggle-on-function))
+   )
+
+ #+END_SRC
 ** info stuff
-[2014-05-20 Tue 23:35]
-#+BEGIN_SRC emacs-lisp
-(use-package info
-  :bind ("C-h C-i" . info-lookup-symbol)
-  :commands info-lookup-symbol
-  :config
-  (progn
-    ;; (defadvice info-setup (after load-info+ activate)
-    ;;   (use-package info+))
-
-    (defadvice Info-exit (after remove-info-window activate)
-      "When info mode is quit, remove the window."
-      (if (> (length (window-list)) 1)
-          (delete-window)))))
-
-(use-package info-look
-  :commands info-lookup-add-help)
-#+END_SRC
+ [2014-05-20 Tue 23:35]
+ #+BEGIN_SRC emacs-lisp
+ (use-package info
+   :bind ("C-h C-i" . info-lookup-symbol)
+   :commands info-lookup-symbol
+   :config
+   (progn
+     ;; (defadvice info-setup (after load-info+ activate)
+     ;;   (use-package info+))
+
+     (defadvice Info-exit (after remove-info-window activate)
+       "When info mode is quit, remove the window."
+       (if (> (length (window-list)) 1)
+           (delete-window)))))
+
+ (use-package info-look
+   :commands info-lookup-add-help)
+ #+END_SRC
 ** ispell
-[2016-11-13 Sun 13:22]
-#+BEGIN_SRC emacs-lisp
-(use-package ispell
-  :defer t
-  :config
-  (progn
-    (validate-setq ispell-personal-dictionary (expand-file-name "~/flydict" jj-cache-dir))
-
-    (validate-setq ispell-dictionary "de_DE")
-    (validate-setq ispell-highlight-face 'flyspell-incorrect)
-    (validate-setq ispell-program-name "hunspell")
-    (add-to-list 'ispell-skip-region-alist '("#\\+BEGIN_SRC" . "#\\+END_SRC"))
-    (add-to-list 'ispell-skip-region-alist '("#\\+BEGIN_EXAMPLE" . "#\\+END_EXAMPLE"))
-    ))
-#+END_SRC
+ [2016-11-13 Sun 13:22]
+ #+BEGIN_SRC emacs-lisp
+ (use-package ispell
+   :defer t
+   :config
+   (progn
+     (validate-setq ispell-personal-dictionary (expand-file-name "~/flydict" jj-cache-dir))
+
+     (validate-setq ispell-dictionary "de_DE")
+     (validate-setq ispell-program-name "hunspell")
+     (add-to-list 'ispell-skip-region-alist '("#\\+BEGIN_SRC" . "#\\+END_SRC"))
+     (add-to-list 'ispell-skip-region-alist '("#\\+BEGIN_EXAMPLE" . "#\\+END_EXAMPLE"))
+     ))
+ #+END_SRC
 ** linum (line number)
-Various modes should have line numbers in front of each line.
-
-But then there are some where it would just be deadly - like org-mode,
-gnus, so we have a list of modes where we don't want to see it.
-#+BEGIN_SRC emacs-lisp
-(use-package linum
-  :diminish linum-mode
-  :config
-  (progn
-    (validate-setq linum-format "%3d ")
-    (setq linum-mode-inhibit-modes-list '(org-mode
-                                          eshell-mode
-                                          shell-mode
-                                          gnus-group-mode
-                                          gnus-summary-mode
-                                          gnus-article-mode))
-
-    (defadvice linum-on (around linum-on-inhibit-for-modes)
-      "Stop the load of linum-mode for some major modes."
-      (unless (member major-mode linum-mode-inhibit-modes-list)
-        ad-do-it))
-
-    (ad-activate 'linum-on)
-
-    (use-package linum-relative
-      :ensure linum-relative
-      :init
-      (progn
-        (validate-setq linum-format 'dynamic)
-        )))
-  :init
-  (global-linum-mode 1))
-(use-package hlinum
-  :ensure t
-  :config
-  (progn
-    (hlinum-activate)))
-#+END_SRC
+ Various modes should have line numbers in front of each line.
+
+ But then there are some where it would just be deadly - like org-mode,
+ gnus, so we have a list of modes where we don't want to see it.
+ #+BEGIN_SRC emacs-lisp
+ (use-package linum
+   :diminish linum-mode
+   :config
+   (progn
+     (validate-setq linum-format "%3d ")
+     (setq linum-mode-inhibit-modes-list '(org-mode
+                                           eshell-mode
+                                           shell-mode
+                                           gnus-group-mode
+                                           gnus-summary-mode
+                                           gnus-article-mode))
+
+     (defadvice linum-on (around linum-on-inhibit-for-modes)
+       "Stop the load of linum-mode for some major modes."
+       (unless (member major-mode linum-mode-inhibit-modes-list)
+         ad-do-it))
+
+     (ad-activate 'linum-on)
+
+     (use-package linum-relative
+       :ensure linum-relative
+       :init
+       (progn
+         (validate-setq linum-format 'dynamic)
+         )))
+   :init
+   (global-linum-mode 1))
+
+ (use-package hlinum
+   :ensure t
+   :config
+   (progn
+     (hlinum-activate)))
+ #+END_SRC
 
 ** lisp editing stuff
 
-[2013-04-21 So 21:00]
-I'm not doing much of it, except for my emacs and gnus configs, but
-then I like it nice too...
-#+BEGIN_SRC emacs-lisp
-(bind-key "TAB" 'lisp-complete-symbol read-expression-map)
-(bind-key "M-." 'find-function-at-point emacs-lisp-mode-map)
-
-(defun remove-elc-on-save ()
-  "If you're saving an elisp file, likely the .elc is no longer valid."
-  (make-local-variable 'after-save-hook)
-  (add-hook 'after-save-hook
-            (lambda ()
-              (if (file-exists-p (concat buffer-file-name "c"))
-                  (delete-file (concat buffer-file-name "c"))))))
-
-(add-hook 'emacs-lisp-mode-hook 'turn-on-eldoc-mode)
-(add-hook 'emacs-lisp-mode-hook 'remove-elc-on-save)
-
-(use-package paredit
-  :ensure paredit
-  :diminish paredit-mode " π")
-
-(setq lisp-coding-hook 'lisp-coding-defaults)
-(setq interactive-lisp-coding-hook 'interactive-lisp-coding-defaults)
-
-(setq prelude-emacs-lisp-mode-hook 'prelude-emacs-lisp-mode-defaults)
-(add-hook 'emacs-lisp-mode-hook (lambda ()
-                                  (run-hooks 'prelude-emacs-lisp-mode-hook)))
-
-
-(after "elisp-slime-nav"
-  '(diminish 'elisp-slime-nav-mode))
-(after "rainbow-mode"
-  '(diminish 'rainbow-mode))
-(after "eldoc"
-  '(diminish 'eldoc-mode))
-#+END_SRC
+ [2013-04-21 So 21:00]
+ I'm not doing much of it, except for my emacs and gnus configs, but
+ then I like it nice too...
+ #+BEGIN_SRC emacs-lisp
+ (bind-key "TAB" 'lisp-complete-symbol read-expression-map)
+ (bind-key "M-." 'find-function-at-point emacs-lisp-mode-map)
+
+ (defun remove-elc-on-save ()
+   "If you're saving an elisp file, likely the .elc is no longer valid."
+   (make-local-variable 'after-save-hook)
+   (add-hook 'after-save-hook
+             (lambda ()
+               (if (file-exists-p (concat buffer-file-name "c"))
+                   (delete-file (concat buffer-file-name "c"))))))
+
+ (add-hook 'emacs-lisp-mode-hook 'turn-on-eldoc-mode)
+ (add-hook 'emacs-lisp-mode-hook 'remove-elc-on-save)
+
+ (use-package paredit
+   :ensure paredit
+   :diminish paredit-mode " π")
+
+ (setq lisp-coding-hook 'lisp-coding-defaults)
+ (setq interactive-lisp-coding-hook 'interactive-lisp-coding-defaults)
+
+ (setq prelude-emacs-lisp-mode-hook 'prelude-emacs-lisp-mode-defaults)
+ (add-hook 'emacs-lisp-mode-hook (lambda ()
+                                   (run-hooks 'prelude-emacs-lisp-mode-hook)))
+
+
+ (after "elisp-slime-nav"
+   '(diminish 'elisp-slime-nav-mode))
+ (after "rainbow-mode"
+   '(diminish 'rainbow-mode))
+ (after "eldoc"
+   '(diminish 'eldoc-mode))
+ #+END_SRC
 ** lua
-[2016-10-27 Thu 17:49]
-Lua editing
-#+BEGIN_SRC emacs-lisp
-(use-package lua-mode
-  :ensure t
-  :commands lua-mode
-  :mode ("\\.lua" . lua-mode))
-#+END_SRC
+ [2016-10-27 Thu 17:49]
+ Lua editing
+ #+BEGIN_SRC emacs-lisp
+ (use-package lua-mode
+   :ensure t
+   :commands lua-mode
+   :mode ("\\.lua" . lua-mode))
+ #+END_SRC
 ** magit
-[2013-04-21 So 20:48]
-magit is a mode for interacting with git.
-#+BEGIN_SRC emacs-lisp
-(use-package magit
-  :ensure magit
-  :commands  (magit-log magit-run-gitk magit-run-git-gui magit-status
-                        magit-git-repo-p magit-list-repos)
-  :defer t
-  :bind (("C-x g" . magit-status)
-         ("C-x G" . magit-status-with-prefix))
-  :config
-  (progn
-    (setq magit-repository-directories '("~/devel"
-                                         "~/git/"
-                                         "/develop/vcs/"
-                                         "/develop/Debian/"
-                                         ))
-    (setq magit-repository-directories-depth 4)
-    (setq magit-log-auto-more t)
-
-    (use-package magit-blame
-      :commands magit-blame-mode
-      :defer t)
-
-    (add-hook 'magit-mode-hook 'hl-line-mode)
-    (defun magit-status-with-prefix ()
-      (interactive)
-      (let ((current-prefix-arg '(4)))
-        (call-interactively 'magit-status)))
-    (setenv "GIT_PAGER" "")
-
-    (unbind-key "M-h" magit-mode-map)
-    (unbind-key "M-s" magit-mode-map)
-    (add-to-list 'magit-no-confirm 'stage-all-changes)
-    (setq magit-push-always-verify nil)
-
-    (add-hook 'magit-log-edit-mode-hook
-              #'(lambda ()
-                  (set-fill-column 72)
-                  (flyspell-mode)))
-
-    (add-hook 'git-rebase-mode-hook
-              #'(lambda ()
-                  (smartscan-mode 0))
-              )
-    (defadvice magit-status (around magit-fullscreen activate)
-      (window-configuration-to-register :magit-fullscreen)
-      ad-do-it
-      (delete-other-windows))
-
-    (defun magit-quit-session ()
-      "Restores the previous window configuration and kills the magit buffer"
-      (interactive)
-      (kill-buffer)
-      (jump-to-register :magit-fullscreen))
-
-    (bind-key "q" 'magit-quit-session magit-status-mode-map)
-
-    (defun magit-rebase-unpushed (commit &optional args)
-      "Start an interactive rebase sequence over all unpushed commits."
-      (interactive (list (magit-get-tracked-branch)
-                         (magit-rebase-arguments)))
-      (if (setq commit (magit-rebase-interactive-assert commit))
-          (magit-run-git-sequencer "rebase" "-i" commit args)
-        (magit-log-select
-         `(lambda (commit)
-            (magit-rebase-interactive (concat commit "^") (list ,@args))))))
-
-    (magit-define-popup-action 'magit-rebase-popup ?l "Rebase unpushed" 'magit-rebase-unpushed)
-    ))
-#+END_SRC
+ [2013-04-21 So 20:48]
+ magit is a mode for interacting with git.
+ #+BEGIN_SRC emacs-lisp
+   (use-package magit
+     :ensure magit
+     :commands  (magit-log magit-run-gitk magit-run-git-gui magit-status
+                           magit-git-repo-p magit-list-repos)
+     :defer t
+     :bind (("C-x g" . magit-status)
+            ("C-x G" . magit-status-with-prefix)
+            :magit-status-mode-map
+            ("q" 'magit-quit-session ))
+      
+     :config
+     (progn
+       (setq magit-repository-directories '("~/devel"
+                                            "~/git/"
+                                            ))
+       (setq magit-repository-directories-depth 4)
+       (setq magit-log-auto-more t)
+
+       (use-package magit-blame
+         :commands magit-blame-mode
+         :defer t)
+
+       (add-hook 'magit-mode-hook 'hl-line-mode)
+       (defun magit-status-with-prefix ()
+         (interactive)
+         (let ((current-prefix-arg '(4)))
+           (call-interactively 'magit-status)))
+       (setenv "GIT_PAGER" "")
+
+       (unbind-key "M-h" magit-mode-map)
+       (unbind-key "M-s" magit-mode-map)
+       (add-to-list 'magit-no-confirm 'stage-all-changes)
+       (setq magit-push-always-verify nil)
+
+       (add-hook 'magit-log-edit-mode-hook
+                 #'(lambda ()
+                     (set-fill-column 72)
+                     (flyspell-mode)))
+
+       (add-hook 'git-rebase-mode-hook
+                 #'(lambda ()
+                     (smartscan-mode 0))
+                 )
+       (defadvice magit-status (around magit-fullscreen activate)
+         (window-configuration-to-register :magit-fullscreen)
+         ad-do-it
+         (delete-other-windows))
+
+       (defun magit-quit-session ()
+         "Restores the previous window configuration and kills the magit buffer"
+         (interactive)
+         (kill-buffer)
+         (jump-to-register :magit-fullscreen))
+
+       (defun magit-rebase-unpushed (commit &optional args)
+         "Start an interactive rebase sequence over all unpushed commits."
+         (interactive (list (magit-get-tracked-branch)
+                            (magit-rebase-arguments)))
+         (if (setq commit (magit-rebase-interactive-assert commit))
+             (magit-run-git-sequencer "rebase" "-i" commit args)
+           (magit-log-select
+            `(lambda (commit)
+               (magit-rebase-interactive (concat commit "^") (list ,@args))))))
+
+       (magit-define-popup-action 'magit-rebase-popup ?l "Rebase unpushed" 'magit-rebase-unpushed)
+       ))
+ #+END_SRC
 ** markdown-mode
-[2014-05-20 Tue 23:04]
-#+BEGIN_SRC emacs-lisp
-(use-package markdown-mode
-  :ensure t
-  :mode (("\\.md\\'" . markdown-mode)
-         ("\\.mdwn\\'" . markdown-mode))
-  :defer t)
-#+END_SRC
+ [2014-05-20 Tue 23:04]
+ #+BEGIN_SRC emacs-lisp
+ (use-package markdown-mode
+   :ensure t
+   :mode (("\\.md\\'" . markdown-mode)
+          ("\\.mdwn\\'" . markdown-mode))
+   :defer t)
+ #+END_SRC
 ** message
-#+BEGIN_SRC emacs-lisp
-(use-package message
-  :config
-  (progn
-    (validate-setq message-kill-buffer-on-exit t)))
-#+END_SRC
-** mingus
-[[https://github.com/pft/mingus][Mingus]] is a nice interface to mpd, the Music Player Daemon.
-
-I want to access it from anywhere using =F6=.
-#+BEGIN_SRC emacs-lisp :tangle no
-(use-package mingus-stays-home
-  :bind ( "<f6>" . mingus)
-  :defer t
-  :config
-  (progn
-    (validate-setq mingus-dired-add-keys t)
-    (validate-setq mingus-mode-always-modeline nil)
-    (validate-setq mingus-mode-line-show-elapsed-percentage nil)
-    (validate-setq mingus-mode-line-show-volume nil)
-    (validate-setq mingus-mpd-config-file "/etc/mpd.conf")
-    (validate-setq mingus-mpd-playlist-dir "/var/lib/mpd/playlists")
-    (validate-setq mingus-mpd-root "/share/music/")))
-#+END_SRC
+ #+BEGIN_SRC emacs-lisp
+ (use-package message
+   :config
+   (progn
+     (validate-setq message-kill-buffer-on-exit t)))
+ #+END_SRC
+** CANCELLED mingus                                              :CANCELLED:
+CLOSED: [2017-08-26 Sat 15:18]
+:LOGBOOK:
+- State "CANCELLED"  from              [2017-08-26 Sat 15:18]
+:END:
+ [[https://github.com/pft/mingus][Mingus]] is a nice interface to mpd, the Music Player Daemon.
+
+ I want to access it from anywhere using =F6=.
+ #+BEGIN_SRC emacs-lisp :tangle no
+ (use-package mingus-stays-home
+   :bind ( "<f6>" . mingus)
+   :defer t
+   :config
+   (progn
+     (validate-setq mingus-dired-add-keys t)
+     (validate-setq mingus-mode-always-modeline nil)
+     (validate-setq mingus-mode-line-show-elapsed-percentage nil)
+     (validate-setq mingus-mode-line-show-volume nil)
+     (validate-setq mingus-mpd-config-file "/etc/mpd.conf")
+     (validate-setq mingus-mpd-playlist-dir "/var/lib/mpd/playlists")
+     (validate-setq mingus-mpd-root "/share/music/")))
+ #+END_SRC
 
 ** miniedit
-Edit minibuffer in a full (text-mode) buffer by pressing *M-C-e*.
-#+BEGIN_SRC emacs-lisp
-(use-package miniedit
-  :ensure miniedit
-  :commands miniedit
-  :config
-  (progn
-    (bind-key "M-C-e" 'miniedit minibuffer-local-map)
-    (bind-key "M-C-e" 'miniedit minibuffer-local-ns-map)
-    (bind-key "M-C-e" 'miniedit minibuffer-local-completion-map)
-    (bind-key "M-C-e" 'miniedit minibuffer-local-must-match-map)
-  ))
-#+END_SRC
+ Edit minibuffer in a full (text-mode) buffer by pressing *M-C-e*.
+ #+BEGIN_SRC emacs-lisp
+ (use-package miniedit
+   :ensure miniedit
+   :commands miniedit
+   :config
+   (progn
+     (bind-key "M-C-e" 'miniedit minibuffer-local-map)
+     (bind-key "M-C-e" 'miniedit minibuffer-local-ns-map)
+     (bind-key "M-C-e" 'miniedit minibuffer-local-completion-map)
+     (bind-key "M-C-e" 'miniedit minibuffer-local-must-match-map)
+   ))
+ #+END_SRC
 
-** mmm-mode
-[2013-05-21 Tue 23:39]
-MMM Mode is a minor mode for Emacs that allows Multiple Major Modes to
-coexist in one buffer.
-#+BEGIN_SRC emacs-lisp :tangle no
-(use-package mmm-auto
-  :ensure mmm-mode
-  :init
-  (progn
-    (validate-setq mmm-global-mode 'buffers-with-submode-classes)
-    (validate-setq mmm-submode-decoration-level 2)
-    (eval-after-load 'mmm-vars
-      '(progn
-         (mmm-add-group
-          'html-css
-          '((css-cdata
-             :submode css-mode
-             :face mmm-code-submode-face
-             :front "<style[^>]*>[ \t\n]*\\(//\\)?<!\\[CDATA\\[[ \t]*\n?"
-             :back "[ \t]*\\(//\\)?]]>[ \t\n]*</style>"
-             :insert ((?j js-tag nil @ "<style type=\"text/css\">"
-                          @ "\n" _ "\n" @ "</script>" @)))
-            (css
-             :submode css-mode
-             :face mmm-code-submode-face
-             :front "<style[^>]*>[ \t]*\n?"
-             :back "[ \t]*</style>"
-             :insert ((?j js-tag nil @ "<style type=\"text/css\">"
-                          @ "\n" _ "\n" @ "</style>" @)))
-            (css-inline
-             :submode css-mode
-             :face mmm-code-submode-face
-             :front "style=\""
-             :back "\"")))
-         (dolist (mode (list 'html-mode 'nxml-mode))
-           (mmm-add-mode-ext-class mode "\\.r?html\\(\\.erb\\)?\\'" 'html-css))
-         (mmm-add-mode-ext-class 'html-mode "\\.php\\'" 'html-php)
-         ))))
-#+END_SRC
+** CANCELLED mmm-mode                                            :CANCELLED:
+CLOSED: [2017-08-26 Sat 15:18]
+:LOGBOOK:
+- State "CANCELLED"  from              [2017-08-26 Sat 15:18]
+:END:
+ [2013-05-21 Tue 23:39]
+ MMM Mode is a minor mode for Emacs that allows Multiple Major Modes to
+ coexist in one buffer.
+ #+BEGIN_SRC emacs-lisp :tangle no
+ (use-package mmm-auto
+   :ensure mmm-mode
+   :init
+   (progn
+     (validate-setq mmm-global-mode 'buffers-with-submode-classes)
+     (validate-setq mmm-submode-decoration-level 2)
+     (eval-after-load 'mmm-vars
+       '(progn
+          (mmm-add-group
+           'html-css
+           '((css-cdata
+              :submode css-mode
+              :face mmm-code-submode-face
+              :front "<style[^>]*>[ \t\n]*\\(//\\)?<!\\[CDATA\\[[ \t]*\n?"
+              :back "[ \t]*\\(//\\)?]]>[ \t\n]*</style>"
+              :insert ((?j js-tag nil @ "<style type=\"text/css\">"
+                           @ "\n" _ "\n" @ "</script>" @)))
+             (css
+              :submode css-mode
+              :face mmm-code-submode-face
+              :front "<style[^>]*>[ \t]*\n?"
+              :back "[ \t]*</style>"
+              :insert ((?j js-tag nil @ "<style type=\"text/css\">"
+                           @ "\n" _ "\n" @ "</style>" @)))
+             (css-inline
+              :submode css-mode
+              :face mmm-code-submode-face
+              :front "style=\""
+              :back "\"")))
+          (dolist (mode (list 'html-mode 'nxml-mode))
+            (mmm-add-mode-ext-class mode "\\.r?html\\(\\.erb\\)?\\'" 'html-css))
+          (mmm-add-mode-ext-class 'html-mode "\\.php\\'" 'html-php)
+          ))))
+ #+END_SRC
 
 ** mo-git-blame
-This is [[https://github.com/mbunkus/mo-git-blame][mo-git-blame -- An interactive, iterative 'git blame' mode for
-Emacs]].
-#+BEGIN_SRC emacs-lisp
-(use-package mo-git-blame
-  :ensure mo-git-blame
-  :commands (mo-git-blame-current
-             mo-git-blame-file)
-  :config
-  (progn
-    (validate-setq mo-git-blame-blame-window-width 25)))
-#+END_SRC
-
-** multiple cursors
-[2013-04-08 Mon 23:57]
-Use multiple cursors mode. See [[http://emacsrocks.com/e13.html][Emacs Rocks! multiple cursors]] and
-[[https://github.com/emacsmirror/multiple-cursors][emacsmirror/multiple-cursors · GitHub]]
-#+BEGIN_SRC emacs-lisp :tangle no
-(use-package multiple-cursors
-  :ensure multiple-cursors
-  :defer t
-  :commands (mc/remove-fake-cursors
-             mc/create-fake-cursor-at-point
-             mc/pop-state-from-overlay
-             mc/maybe-multiple-cursors-mode)
-  :defines (multiple-cursors-mode
-            mc--read-char
-            mc--read-quoted-char
-            rectangular-region-mode)
-  :bind (("C-S-c C-S-c" . mc/edit-lines)
-         ("C->"     . mc/mark-next-like-this)
-         ("C-<"     . mc/mark-previous-like-this)
-         ("C-c C-<" . mc/mark-all-like-this)
-         ("C-c i"   . mc/insert-numbers))
-  :config
-  (progn
-    (bind-key "a" 'mc/mark-all-like-this region-bindings-mode-map)
-    (bind-key "p" 'mc/mark-previous-like-this region-bindings-mode-map)
-    (bind-key "n" 'mc/mark-next-like-this region-bindings-mode-map)
-    (bind-key "l" 'mc/edit-lines region-bindings-mode-map)
-    (bind-key "m" 'mc/mark-more-like-this-extended region-bindings-mode-map)
-    (validate-setq mc/list-file (expand-file-name "mc-cache.el" jj-cache-dir))))
-#+END_SRC
+ This is [[https://github.com/mbunkus/mo-git-blame][mo-git-blame -- An interactive, iterative 'git blame' mode for
+ Emacs]].
+ #+BEGIN_SRC emacs-lisp
+ (use-package mo-git-blame
+   :ensure mo-git-blame
+   :commands (mo-git-blame-current
+              mo-git-blame-file)
+   :config
+   (progn
+     (validate-setq mo-git-blame-blame-window-width 25)))
+ #+END_SRC
+
+** CANCELLED multiple cursors                                    :CANCELLED:
+CLOSED: [2017-08-26 Sat 15:18]
+:LOGBOOK:
+- State "CANCELLED"  from              [2017-08-26 Sat 15:18]
+:END:
+ [2013-04-08 Mon 23:57]
+ Use multiple cursors mode. See [[http://emacsrocks.com/e13.html][Emacs Rocks! multiple cursors]] and
+ [[https://github.com/emacsmirror/multiple-cursors][emacsmirror/multiple-cursors · GitHub]]
+ #+BEGIN_SRC emacs-lisp :tangle no
+ (use-package multiple-cursors
+   :ensure multiple-cursors
+   :defer t
+   :commands (mc/remove-fake-cursors
+              mc/create-fake-cursor-at-point
+              mc/pop-state-from-overlay
+              mc/maybe-multiple-cursors-mode)
+   :defines (multiple-cursors-mode
+             mc--read-char
+             mc--read-quoted-char
+             rectangular-region-mode)
+   :bind (("C-S-c C-S-c" . mc/edit-lines)
+          ("C->"     . mc/mark-next-like-this)
+          ("C-<"     . mc/mark-previous-like-this)
+          ("C-c C-<" . mc/mark-all-like-this)
+          ("C-c i"   . mc/insert-numbers))
+   :config
+   (progn
+     (bind-key "a" 'mc/mark-all-like-this region-bindings-mode-map)
+     (bind-key "p" 'mc/mark-previous-like-this region-bindings-mode-map)
+     (bind-key "n" 'mc/mark-next-like-this region-bindings-mode-map)
+     (bind-key "l" 'mc/edit-lines region-bindings-mode-map)
+     (bind-key "m" 'mc/mark-more-like-this-extended region-bindings-mode-map)
+     (validate-setq mc/list-file (expand-file-name "mc-cache.el" jj-cache-dir))))
+ #+END_SRC
 ** neotree
-[2014-08-27 Wed 17:15]
-A emacs tree plugin
-#+BEGIN_SRC emacs-lisp
-(use-package neotree
-  :ensure neotree
-  :defer t
-  :bind (("<f8>" . neotree-toggle))
-  :commands (neotree-find
-             neotree-toggle
-             neotree)
-  :config
-  (progn
-    (bind-key "^" 'neotree-select-up-node neotree-mode-map)
-    (validate-setq neo-smart-open t)))
-
-#+END_SRC
+ [2014-08-27 Wed 17:15]
+ A emacs tree plugin
+ #+BEGIN_SRC emacs-lisp
+ (use-package neotree
+   :ensure neotree
+   :defer t
+   :bind (("<f8>" . neotree-toggle))
+   :commands (neotree-find
+              neotree-toggle
+              neotree)
+   :config
+   (progn
+     (bind-key "^" 'neotree-select-up-node neotree-mode-map)
+     (validate-setq neo-smart-open t)))
+
+ #+END_SRC
 ** notmuch
-[2016-10-24 Mon 18:18]
-Nice email search
-#+BEGIN_SRC emacs-lisp
-(use-package notmuch
-  :ensure t
-  :defer t
-  :commands (notmuch)
-  :config
-  (progn
-    (validate-setq notmuch-search-oldest-first nil)))
-#+END_SRC
+ [2016-10-24 Mon 18:18]
+ Nice email search
+ #+BEGIN_SRC emacs-lisp
+ (use-package notmuch
+   :ensure t
+   :defer t
+   :commands (notmuch)
+   :config
+   (progn
+     (validate-setq notmuch-search-oldest-first nil)))
+ #+END_SRC
 ** nxml
-[2013-05-22 Wed 22:02]
-nxml-mode is a major mode for editing XML.
-#+BEGIN_SRC emacs-lisp
-  (use-package nxml-mode
-    :mode (("web.config$" . xml-mode)
-           ("\\.xml" . xml-mode)
-           ("\\.xsd" . xml-mode)
-           ("\\.sch" . xml-mode)
-           ("\\.rng" . xml-mode)
-           ("\\.xslt" . xml-mode)
-           ("\\.svg" . xml-mode)
-           ("\\.rss" . xml-mode)
-           ("\\.gpx" . xml-mode)
-           ("\\.tcx" . xml-mode))
-    :defer t
-    :config
-    (progn
-      (setq nxml-child-indent 4)
-      (setq nxml-slash-auto-complete-flag t)
-      ;(add-hook 'nxml-mode-hook (lambda () (emmet-mode t)))
-
-      (fset 'xml-mode 'nxml-mode)
-      (validate-setq nxml-slash-auto-complete-flag t)
-
-      ;; See: http://sinewalker.wordpress.com/2008/06/26/pretty-printing-xml-with-emacs-nxml-mode/
-      (defun pp-xml-region (begin end)
-        "Pretty format XML markup in region. The function inserts
-  linebreaks to separate tags that have nothing but whitespace
-  between them.  It then indents the markup by using nxml's
-  indentation rules."
-        (interactive "r")
-        (save-excursion
-          (nxml-mode)
-          (goto-char begin)
-          (while (search-forward-regexp "\>[ \\t]*\<" nil t)
-            (backward-char) (insert "\n"))
-          (indent-region begin end)))
-
-      ;;----------------------------------------------------------------------------
-      ;; Integration with tidy for html + xml
-      ;;----------------------------------------------------------------------------
-      ;; tidy is autoloaded
-      (eval-after-load 'tidy
-        '(progn
-           (add-hook 'nxml-mode-hook (lambda () (tidy-build-menu nxml-mode-map)))
-           (add-hook 'html-mode-hook (lambda () (tidy-build-menu html-mode-map)))
-           ))))
-
-#+END_SRC
+ [2013-05-22 Wed 22:02]
+ nxml-mode is a major mode for editing XML.
+ #+BEGIN_SRC emacs-lisp
+   (use-package nxml-mode
+     :mode (("web.config$" . xml-mode)
+            ("\\.xml" . xml-mode)
+            ("\\.xsd" . xml-mode)
+            ("\\.sch" . xml-mode)
+            ("\\.rng" . xml-mode)
+            ("\\.xslt" . xml-mode)
+            ("\\.svg" . xml-mode)
+            ("\\.rss" . xml-mode)
+            ("\\.gpx" . xml-mode)
+            ("\\.tcx" . xml-mode))
+     :defer t
+     :config
+     (progn
+       (setq nxml-child-indent 4)
+       (setq nxml-slash-auto-complete-flag t)
+       ;(add-hook 'nxml-mode-hook (lambda () (emmet-mode t)))
+
+       (fset 'xml-mode 'nxml-mode)
+       (validate-setq nxml-slash-auto-complete-flag t)
+
+       ;; See: http://sinewalker.wordpress.com/2008/06/26/pretty-printing-xml-with-emacs-nxml-mode/
+       (defun pp-xml-region (begin end)
+         "Pretty format XML markup in region. The function inserts
+   linebreaks to separate tags that have nothing but whitespace
+   between them.  It then indents the markup by using nxml's
+   indentation rules."
+         (interactive "r")
+         (save-excursion
+           (nxml-mode)
+           (goto-char begin)
+           (while (search-forward-regexp "\>[ \\t]*\<" nil t)
+             (backward-char) (insert "\n"))
+           (indent-region begin end)))
+
+       ;;----------------------------------------------------------------------------
+       ;; Integration with tidy for html + xml
+       ;;----------------------------------------------------------------------------
+       ;; tidy is autoloaded
+       (eval-after-load 'tidy
+         '(progn
+            (add-hook 'nxml-mode-hook (lambda () (tidy-build-menu nxml-mode-map)))
+            (add-hook 'html-mode-hook (lambda () (tidy-build-menu html-mode-map)))
+            ))))
+
+ #+END_SRC
 ** org                                                               :FIXME:
 *** General settings
-[2013-04-28 So 17:06]
+ [2013-04-28 So 17:06]
 
-I use org-mode a lot and, having my config for this based on [[*Bernt%20Hansen][the config of Bernt Hansen]],
-it is quite extensive. Nevertheless, it starts out small, loading it.
-#+BEGIN_SRC emacs-lisp
-(require 'org)
-#+END_SRC
+ I use org-mode a lot and, having my config for this based on [[*Bernt%20Hansen][the config of Bernt Hansen]],
+ it is quite extensive. Nevertheless, it starts out small, loading it.
+ #+BEGIN_SRC emacs-lisp
+ (require 'org)
+ #+END_SRC
 
-My browsers (Conkeror, Iceweasel) can store links in org-mode. For
-that we need org-protocol.
-#+BEGIN_SRC emacs-lisp
-(require 'org-protocol)
-#+END_SRC
+ My browsers (Conkeror, Iceweasel) can store links in org-mode. For
+ that we need org-protocol.
+ #+BEGIN_SRC emacs-lisp
+ (require 'org-protocol)
+ #+END_SRC
 
 *** Agenda
 
-My current =org-agenda-files= variable only includes a set of
-directories.
-#+BEGIN_SRC emacs-lisp
-(setq org-agenda-files (quote ("~/org/"
-                               "~/org/nsb"
-                               )))
-(setq org-default-notes-file "~/org/notes.org")
-#+END_SRC
-=org-mode= manages the =org-agenda-files= variable automatically using
-=C-c [= and =C-c ]= to add and remove files respectively.  However,
-this replaces my directory list with a list of explicit filenames
-instead and is not what I want.  If this occurs then adding a new org
-file to any of the above directories will not contribute to my agenda
-and I will probably miss something important.
-
-I have disabled the =C-c [= and =C-c ]= keys in =org-mode-hook= to
-prevent messing up my list of directories in the =org-agenda-files=
-variable.  I just add and remove directories manually here.  Changing
-the list of directories in =org-agenda-files= happens very rarely
-since new files in existing directories are automatically picked up.
-
-#+BEGIN_SRC emacs-lisp
-;; Keep tasks with dates on the global todo lists
-(setq org-agenda-todo-ignore-with-date nil)
-
-;; Keep tasks with deadlines on the global todo lists
-(setq org-agenda-todo-ignore-deadlines nil)
+ My current =org-agenda-files= variable only includes a set of
+ directories.
+ #+BEGIN_SRC emacs-lisp
+ (setq org-agenda-files (quote ("~/org/"
+                                "~/org/nsb"
+                                )))
+ (setq org-default-notes-file "~/org/notes.org")
+ #+END_SRC
+ =org-mode= manages the =org-agenda-files= variable automatically using
+ =C-c [= and =C-c ]= to add and remove files respectively.  However,
+ this replaces my directory list with a list of explicit filenames
+ instead and is not what I want.  If this occurs then adding a new org
+ file to any of the above directories will not contribute to my agenda
+ and I will probably miss something important.
 
-;; Keep tasks with scheduled dates on the global todo lists
-(setq org-agenda-todo-ignore-scheduled nil)
+ I have disabled the =C-c [= and =C-c ]= keys in =org-mode-hook= to
+ prevent messing up my list of directories in the =org-agenda-files=
+ variable.  I just add and remove directories manually here.  Changing
+ the list of directories in =org-agenda-files= happens very rarely
+ since new files in existing directories are automatically picked up.
 
-;; Keep tasks with timestamps on the global todo lists
-(setq org-agenda-todo-ignore-timestamp nil)
+ #+BEGIN_SRC emacs-lisp
+ ;; Keep tasks with dates on the global todo lists
+ (setq org-agenda-todo-ignore-with-date nil)
 
-;; Remove completed deadline tasks from the agenda view
-(setq org-agenda-skip-deadline-if-done t)
+ ;; Keep tasks with deadlines on the global todo lists
+ (setq org-agenda-todo-ignore-deadlines nil)
 
-;; Remove completed scheduled tasks from the agenda view
-(setq org-agenda-skip-scheduled-if-done t)
+ ;; Keep tasks with scheduled dates on the global todo lists
+ (setq org-agenda-todo-ignore-scheduled nil)
 
-;; Remove completed items from search results
-(setq org-agenda-skip-timestamp-if-done t)
+ ;; Keep tasks with timestamps on the global todo lists
+ (setq org-agenda-todo-ignore-timestamp nil)
 
-;; Include agenda archive files when searching for things
-(setq org-agenda-text-search-extra-files (quote (agenda-archives)))
+ ;; Remove completed deadline tasks from the agenda view
+ (setq org-agenda-skip-deadline-if-done t)
 
-;; Show all future entries for repeating tasks
-(setq org-agenda-repeating-timestamp-show-all t)
+ ;; Remove completed scheduled tasks from the agenda view
+ (setq org-agenda-skip-scheduled-if-done t)
 
-;; Show all agenda dates - even if they are empty
-(setq org-agenda-show-all-dates t)
+ ;; Remove completed items from search results
+ (setq org-agenda-skip-timestamp-if-done t)
 
-;; Sorting order for tasks on the agenda
-(setq org-agenda-sorting-strategy
-      (quote ((agenda habit-down time-up user-defined-up priority-down effort-up category-keep)
-              (todo category-up priority-down effort-up)
-              (tags category-up priority-down effort-up)
-              (search category-up))))
+ ;; Include agenda archive files when searching for things
+ (setq org-agenda-text-search-extra-files (quote (agenda-archives)))
 
-;; Start the weekly agenda on Monday
-(setq org-agenda-start-on-weekday 1)
+ ;; Show all future entries for repeating tasks
+ (setq org-agenda-repeating-timestamp-show-all t)
 
-;; Enable display of the time grid so we can see the marker for the current time
-(setq org-agenda-time-grid (quote ((daily today remove-match)
-                                   #("----------------" 0 16 (org-heading t))
-                                   (0800 1000 1200 1400 1500 1700 1900 2100))))
+ ;; Show all agenda dates - even if they are empty
+ (setq org-agenda-show-all-dates t)
 
-;; Display tags farther right
-(setq org-agenda-tags-column -102)
+ ;; Sorting order for tasks on the agenda
+ (setq org-agenda-sorting-strategy
+       (quote ((agenda habit-down time-up user-defined-up priority-down effort-up category-keep)
+               (todo category-up priority-down effort-up)
+               (tags category-up priority-down effort-up)
+               (search category-up))))
 
-; position the habit graph on the agenda to the right of the default
-(setq org-habit-graph-column 50)
+ ;; Start the weekly agenda on Monday
+ (setq org-agenda-start-on-weekday 1)
 
-; turn habits back on
-(run-at-time "06:00" 86400 '(lambda () (setq org-habit-show-habits t)))
+ ;; Enable display of the time grid so we can see the marker for the current time
+ (setq org-agenda-time-grid (quote ((daily today remove-match)
+                                    #("----------------" 0 16 (org-heading t))
+                                    (0800 1000 1200 1400 1500 1700 1900 2100))))
 
-;;
-;; Agenda sorting functions
-;;
-(setq org-agenda-cmp-user-defined 'bh/agenda-sort)
+ ;; Display tags farther right
+ (setq org-agenda-tags-column -102)
 
+ ; position the habit graph on the agenda to the right of the default
+ (setq org-habit-graph-column 50)
 
-(setq org-deadline-warning-days 30)
+ ; turn habits back on
+ (run-at-time "06:00" 86400 '(lambda () (setq org-habit-show-habits t)))
 
-;; Always hilight the current agenda line
-(add-hook 'org-agenda-mode-hook
-          '(lambda () (hl-line-mode 1))
-          'append)
-#+END_SRC
+ ;;
+ ;; Agenda sorting functions
+ ;;
+ (setq org-agenda-cmp-user-defined 'bh/agenda-sort)
 
-#+BEGIN_SRC emacs-lisp
-(setq org-agenda-persistent-filter t)
-(add-hook 'org-agenda-mode-hook
-          '(lambda () (org-defkey org-agenda-mode-map "W" 'bh/widen))
-          'append)
 
-(add-hook 'org-agenda-mode-hook
-          '(lambda () (org-defkey org-agenda-mode-map "F" 'bh/restrict-to-file-or-follow))
-          'append)
+ (setq org-deadline-warning-days 30)
 
-(add-hook 'org-agenda-mode-hook
-          '(lambda () (org-defkey org-agenda-mode-map "N" 'bh/narrow-to-subtree))
-          'append)
+ ;; Always hilight the current agenda line
+ (add-hook 'org-agenda-mode-hook
+           '(lambda () (hl-line-mode 1))
+           'append)
+ #+END_SRC
 
-(add-hook 'org-agenda-mode-hook
-          '(lambda () (org-defkey org-agenda-mode-map "U" 'bh/narrow-up-one-level))
-          'append)
+ #+BEGIN_SRC emacs-lisp
+ (setq org-agenda-persistent-filter t)
+ (add-hook 'org-agenda-mode-hook
+           '(lambda () (org-defkey org-agenda-mode-map "W" 'bh/widen))
+           'append)
 
-(add-hook 'org-agenda-mode-hook
-          '(lambda () (org-defkey org-agenda-mode-map "P" 'bh/narrow-to-project))
-          'append)
+ (add-hook 'org-agenda-mode-hook
+           '(lambda () (org-defkey org-agenda-mode-map "F" 'bh/restrict-to-file-or-follow))
+           'append)
 
-; Rebuild the reminders everytime the agenda is displayed
-(add-hook 'org-finalize-agenda-hook 'bh/org-agenda-to-appt 'append)
+ (add-hook 'org-agenda-mode-hook
+           '(lambda () (org-defkey org-agenda-mode-map "N" 'bh/narrow-to-subtree))
+           'append)
 
-;(if (file-exists-p "~/org/refile.org")
-;    (add-hook 'after-init-hook 'bh/org-agenda-to-appt))
+ (add-hook 'org-agenda-mode-hook
+           '(lambda () (org-defkey org-agenda-mode-map "U" 'bh/narrow-up-one-level))
+           'append)
 
-; Activate appointments so we get notifications
-(appt-activate t)
+ (add-hook 'org-agenda-mode-hook
+           '(lambda () (org-defkey org-agenda-mode-map "P" 'bh/narrow-to-project))
+           'append)
 
-(setq org-agenda-log-mode-items (quote (closed clock state)))
-(if (> emacs-major-version 23)
-    (setq org-agenda-span 3)
-  (setq org-agenda-ndays 3))
+ ; Rebuild the reminders everytime the agenda is displayed
+ (add-hook 'org-finalize-agenda-hook 'bh/org-agenda-to-appt 'append)
 
-(setq org-agenda-show-all-dates t)
-(setq org-agenda-start-on-weekday nil)
-(setq org-deadline-warning-days 14)
+ ;(if (file-exists-p "~/org/refile.org")
+ ;    (add-hook 'after-init-hook 'bh/org-agenda-to-appt))
 
-#+END_SRC
-*** Global keybindings.
-Start off by defining a series of keybindings.
+ ; Activate appointments so we get notifications
+ (appt-activate t)
 
-Well, first we remove =C-c [= and =C-c ]=, as all agenda directories are
-setup manually, not by org-mode. Also turn off =C-c ;=, which
-comments headlines - a function never used.
-#+BEGIN_SRC emacs-lisp
-(add-hook 'org-mode-hook
-          (lambda ()
-            (org-defkey org-mode-map "\C-c["    'undefined)
-            (org-defkey org-mode-map "\C-c]"    'undefined)
-            (org-defkey org-mode-map "\C-c;"    'undefined))
-          'append)
-#+END_SRC
+ (setq org-agenda-log-mode-items (quote (closed clock state)))
+ (if (> emacs-major-version 23)
+     (setq org-agenda-span 3)
+   (setq org-agenda-ndays 3))
 
-And now a largish set of keybindings...
-#+BEGIN_SRC emacs-lisp
-(bind-key "C-c l" 'org-store-link)
-(bind-key "C-c a" 'org-agenda)
-;(bind-key "C-c b" 'org-iswitchb)
-(define-key mode-specific-map [?a] 'org-agenda)
-
-(bind-key "<f12>"     'org-agenda)
-(bind-key "<f5>"      'bh/org-todo)
-(bind-key "<S-f5>"    'bh/widen)
-;(bind-key "<f7>"      'bh/set-truncate-lines)
-;(bind-key "<f8>"      'org-cycle-agenda-files)
-
-(bind-key "<f9> <f9>" 'bh/show-org-agenda)
-(bind-key "<f9> b"    'bbdb)
-(bind-key "<f9> c"    'calendar)
-(bind-key "<f9> f"    'boxquote-insert-file)
-(bind-key "<f9> h"    'bh/hide-other)
-(bind-key "<f9> n"    'org-narrow-to-subtree)
-(bind-key "<f9> w"    'widen)
-(bind-key "<f9> u"    'bh/narrow-up-one-level)
-(bind-key "<f9> I"    'bh/punch-in)
-(bind-key "<f9> O"    'bh/punch-out)
-(bind-key "<f9> H"    'jj/punch-in-hw)
-(bind-key "<f9> W"    'jj/punch-out-hw)
-(bind-key "<f9> o"    'bh/make-org-scratch)
-(bind-key "<f9> p"    'bh/phone-call)
-(bind-key "<f9> r"    'boxquote-region)
-(bind-key "<f9> s"    'bh/switch-to-scratch)
-(bind-key "<f9> t"    'bh/insert-inactive-timestamp)
-(bind-key "<f9> T"    'tabify)
-(bind-key "<f9> U"    'untabify)
-(bind-key "<f9> v"    'visible-mode)
-(bind-key "<f9> SPC"  'bh/clock-in-last-task)
-(bind-key "C-<f9>"    'previous-buffer)
-(bind-key "C-<f10>"   'next-buffer)
-(bind-key "M-<f9>"    'org-toggle-inline-images)
-;(bind-key "C-x n r"   'narrow-to-region)
-(bind-key "<f11>"     'org-clock-goto)
-(bind-key "C-<f11>"   'org-clock-in)
-(bind-key "C-M-r"     'org-capture)
-(bind-key "C-c r"     'org-capture)
-(bind-key "C-S-<f12>" 'bh/save-then-publish)
-;(bind-key "C-k" 'jj-org-kill-line org-mode-map)
+ (setq org-agenda-show-all-dates t)
+ (setq org-agenda-start-on-weekday nil)
+ (setq org-deadline-warning-days 14)
 
-#+END_SRC
+ #+END_SRC
+*** Global keybindings.
+ Start off by defining a series of keybindings.
+
+ Well, first we remove =C-c [= and =C-c ]=, as all agenda directories are
+ setup manually, not by org-mode. Also turn off =C-c ;=, which
+ comments headlines - a function never used.
+ #+BEGIN_SRC emacs-lisp
+ (add-hook 'org-mode-hook
+           (lambda ()
+             (org-defkey org-mode-map "\C-c["    'undefined)
+             (org-defkey org-mode-map "\C-c]"    'undefined)
+             (org-defkey org-mode-map "\C-c;"    'undefined))
+           'append)
+ #+END_SRC
+
+ And now a largish set of keybindings...
+ #+BEGIN_SRC emacs-lisp
+ (bind-key "C-c l" 'org-store-link)
+ (bind-key "C-c a" 'org-agenda)
+ ;(bind-key "C-c b" 'org-iswitchb)
+ (define-key mode-specific-map [?a] 'org-agenda)
+
+ (bind-key "<f12>"     'org-agenda)
+ (bind-key "<f5>"      'bh/org-todo)
+ (bind-key "<S-f5>"    'bh/widen)
+ ;(bind-key "<f7>"      'bh/set-truncate-lines)
+ ;(bind-key "<f8>"      'org-cycle-agenda-files)
+
+ (bind-key "<f9> <f9>" 'bh/show-org-agenda)
+ (bind-key "<f9> b"    'bbdb)
+ (bind-key "<f9> c"    'calendar)
+ (bind-key "<f9> f"    'boxquote-insert-file)
+ (bind-key "<f9> h"    'bh/hide-other)
+ (bind-key "<f9> n"    'org-narrow-to-subtree)
+ (bind-key "<f9> w"    'widen)
+ (bind-key "<f9> u"    'bh/narrow-up-one-level)
+ (bind-key "<f9> I"    'bh/punch-in)
+ (bind-key "<f9> O"    'bh/punch-out)
+ (bind-key "<f9> H"    'jj/punch-in-hw)
+ (bind-key "<f9> W"    'jj/punch-out-hw)
+ (bind-key "<f9> o"    'bh/make-org-scratch)
+ (bind-key "<f9> p"    'bh/phone-call)
+ (bind-key "<f9> r"    'boxquote-region)
+ (bind-key "<f9> s"    'bh/switch-to-scratch)
+ (bind-key "<f9> t"    'bh/insert-inactive-timestamp)
+ (bind-key "<f9> T"    'tabify)
+ (bind-key "<f9> U"    'untabify)
+ (bind-key "<f9> v"    'visible-mode)
+ (bind-key "<f9> SPC"  'bh/clock-in-last-task)
+ (bind-key "C-<f9>"    'previous-buffer)
+ (bind-key "C-<f10>"   'next-buffer)
+ (bind-key "M-<f9>"    'org-toggle-inline-images)
+ ;(bind-key "C-x n r"   'narrow-to-region)
+ (bind-key "<f11>"     'org-clock-goto)
+ (bind-key "C-<f11>"   'org-clock-in)
+ (bind-key "C-M-r"     'org-capture)
+ (bind-key "C-c r"     'org-capture)
+ (bind-key "C-S-<f12>" 'bh/save-then-publish)
+ ;(bind-key "C-k" 'jj-org-kill-line org-mode-map)
+
+ #+END_SRC
 
 *** Tasks, States, Todo fun
 
-First we define the global todo keywords.
-#+BEGIN_SRC emacs-lisp
-(setq org-todo-keywords
-      (quote ((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d@/!)")
-              (sequence "WAITING(w@/!)" "HOLD(h@/!)" "DELEGATED(g@/!)" "|" "CANCELLED(c@/!)" "PHONE"))))
-
-(setq org-todo-keyword-faces
-      (quote (("TODO" :foreground "red" :weight bold)
-              ("NEXT" :foreground "light blue" :weight bold)
-              ("DONE" :foreground "forest green" :weight bold)
-              ("WAITING" :foreground "orange" :weight bold)
-              ("HOLD" :foreground "orange" :weight bold)
-              ("DELEGATED" :foreground "yellow" :weight bold)
-              ("CANCELLED" :foreground "dark green" :weight bold)
-              ("PHONE" :foreground "dark green" :weight bold))))
-#+END_SRC
+ First we define the global todo keywords.
+ #+BEGIN_SRC emacs-lisp
+ (setq org-todo-keywords
+       (quote ((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d@/!)")
+               (sequence "WAITING(w@/!)" "HOLD(h@/!)" "DELEGATED(g@/!)" "|" "CANCELLED(c@/!)" "PHONE"))))
+
+ (setq org-todo-keyword-faces
+       (quote (("TODO" :foreground "red" :weight bold)
+               ("NEXT" :foreground "light blue" :weight bold)
+               ("DONE" :foreground "forest green" :weight bold)
+               ("WAITING" :foreground "orange" :weight bold)
+               ("HOLD" :foreground "orange" :weight bold)
+               ("DELEGATED" :foreground "yellow" :weight bold)
+               ("CANCELLED" :foreground "dark green" :weight bold)
+               ("PHONE" :foreground "dark green" :weight bold))))
+ #+END_SRC
 
 **** Fast Todo Selection
-Fast todo selection allows changing from any task todo state to any
-other state directly by selecting the appropriate key from the fast
-todo selection key menu.
-#+BEGIN_SRC emacs-lisp
-(setq org-use-fast-todo-selection t)
-#+END_SRC
-Changing a task state is done with =C-c C-t KEY=
-
-where =KEY= is the appropriate fast todo state selection key as defined in =org-todo-keywords=.
-
-The setting
-#+BEGIN_SRC emacs-lisp
-(setq org-treat-S-cursor-todo-selection-as-state-change nil)
-#+END_SRC
-allows changing todo states with S-left and S-right skipping all of
-the normal processing when entering or leaving a todo state.  This
-cycles through the todo states but skips setting timestamps and
-entering notes which is very convenient when all you want to do is fix
-up the status of an entry.
+ Fast todo selection allows changing from any task todo state to any
+ other state directly by selecting the appropriate key from the fast
+ todo selection key menu.
+ #+BEGIN_SRC emacs-lisp
+ (setq org-use-fast-todo-selection t)
+ #+END_SRC
+ Changing a task state is done with =C-c C-t KEY=
+
+ where =KEY= is the appropriate fast todo state selection key as defined in =org-todo-keywords=.
+
+ The setting
+ #+BEGIN_SRC emacs-lisp
+ (setq org-treat-S-cursor-todo-selection-as-state-change nil)
+ #+END_SRC
+ allows changing todo states with S-left and S-right skipping all of
+ the normal processing when entering or leaving a todo state.  This
+ cycles through the todo states but skips setting timestamps and
+ entering notes which is very convenient when all you want to do is fix
+ up the status of an entry.
 
 **** Todo State Triggers
-I have a few triggers that automatically assign tags to tasks based on
-state changes.  If a task moves to =CANCELLED= state then it gets a
-=CANCELLED= tag.  Moving a =CANCELLED= task back to =TODO= removes the
-=CANCELLED= tag.  These are used for filtering tasks in agenda views
-which I'll talk about later.
-
-The triggers break down to the following rules:
-
-- Moving a task to =CANCELLED= adds a =CANCELLED= tag
-- Moving a task to =WAITING= adds a =WAITING= tag
-- Moving a task to =HOLD= adds a =WAITING= tag
-- Moving a task to a done state removes a =WAITING= tag
-- Moving a task to =TODO= removes =WAITING= and =CANCELLED= tags
-- Moving a task to =NEXT= removes a =WAITING= tag
-- Moving a task to =DONE= removes =WAITING= and =CANCELLED= tags
-
-The tags are used to filter tasks in the agenda views conveniently.
-#+BEGIN_SRC emacs-lisp
-(setq org-todo-state-tags-triggers
-      (quote (("CANCELLED" ("CANCELLED" . t))
-              ("WAITING" ("WAITING" . t))
-              ("HOLD" ("WAITING" . t) ("HOLD" . t))
-              (done ("WAITING") ("HOLD"))
-              ("TODO" ("WAITING") ("CANCELLED") ("HOLD"))
-              ("NEXT" ("WAITING") ("CANCELLED") ("HOLD"))
-              ("DONE" ("WAITING") ("CANCELLED") ("HOLD")))))
-#+END_SRC
+ I have a few triggers that automatically assign tags to tasks based on
+ state changes.  If a task moves to =CANCELLED= state then it gets a
+ =CANCELLED= tag.  Moving a =CANCELLED= task back to =TODO= removes the
+ =CANCELLED= tag.  These are used for filtering tasks in agenda views
+ which I'll talk about later.
+
+ The triggers break down to the following rules:
+
+ - Moving a task to =CANCELLED= adds a =CANCELLED= tag
+ - Moving a task to =WAITING= adds a =WAITING= tag
+ - Moving a task to =HOLD= adds a =WAITING= tag
+ - Moving a task to a done state removes a =WAITING= tag
+ - Moving a task to =TODO= removes =WAITING= and =CANCELLED= tags
+ - Moving a task to =NEXT= removes a =WAITING= tag
+ - Moving a task to =DONE= removes =WAITING= and =CANCELLED= tags
+
+ The tags are used to filter tasks in the agenda views conveniently.
+ #+BEGIN_SRC emacs-lisp
+ (setq org-todo-state-tags-triggers
+       (quote (("CANCELLED" ("CANCELLED" . t))
+               ("WAITING" ("WAITING" . t))
+               ("HOLD" ("WAITING" . t) ("HOLD" . t))
+               (done ("WAITING") ("HOLD"))
+               ("TODO" ("WAITING") ("CANCELLED") ("HOLD"))
+               ("NEXT" ("WAITING") ("CANCELLED") ("HOLD"))
+               ("DONE" ("WAITING") ("CANCELLED") ("HOLD")))))
+ #+END_SRC
 
 *** Capturing new tasks
-Org capture replaces the old remember mode.
-#+BEGIN_SRC emacs-lisp
-(setq org-directory "~/org")
-(setq org-default-notes-file "~/org/refile.org")
-
-;; Capture templates for: TODO tasks, Notes, appointments, phone calls, and org-protocol
-;; see http://orgmode.org/manual/Template-elements.html
-(setq org-capture-templates
-      (quote (("t" "todo" entry (file "~/org/refile.org")
-               "* TODO %?\nAdded: %U\n"
-               :clock-in t :clock-resume t)
-              ("l" "linktodo" entry (file "~/org/refile.org")
-               "* TODO %?\nAdded: %U\n%a\n"
-               :clock-in t :clock-resume t)
-              ("r" "respond" entry (file "~/org/refile.org")
-               "* TODO Respond to %:from on %:subject\nSCHEDULED: %t\nAdded: %U\n%a\n"
-               :clock-in t :clock-resume t :immediate-finish t)
-              ("n" "note" entry (file "~/org/refile.org")
-               "* %? :NOTE:\nAdded: %U\n%a\n"
-               :clock-in t :clock-resume t)
-              ("d" "Delegated" entry (file "~/org/refile.org")
-               "* DELEGATED %?\nAdded: %U\n%a\n"
-               :clock-in t :clock-resume t)
-              ("j" "Journal" entry (file+datetree "~/org/diary.org")
-               "* %?\nAdded: %U\n"
-               :clock-in t :clock-resume t)
-              ("w" "org-protocol" entry (file "~/org/refile.org")
-               "* TODO Review %c\nAdded: %U\n"
-               :immediate-finish t)
-              ("p" "Phone call" entry (file "~/org/refile.org")
-               "* PHONE %? :PHONE:\nAdded: %U"
-               :clock-in t :clock-resume t)
-              ("x" "Bookmark link" entry (file "~/org/refile.org")
-               "* Bookmark: %c\n%i\nAdded: %U\n"
-               :immediate-finish t)
-              ("h" "Habit" entry (file "~/org/refile.org")
-               "* NEXT %?\n:PROPERTIES:\n:STYLE: habit\n:REPEAT_TO_STATE: NEXT\n:END:\nAdded: %U\nSCHEDULED: %(format-time-string \"<%Y-%m-%d %a .+1d/3d>\")\n")
-              )))
-#+END_SRC
-
-Capture mode now handles automatically clocking in and out of a
-capture task.  This all works out of the box now without special hooks.
-When I start a capture mode task the task is clocked in as specified
-by =:clock-in t= and when the task is filed with =C-c C-c= the clock
-resumes on the original clocking task.
-
-The quick clocking in and out of capture mode tasks (often it takes
-less than a minute to capture some new task details) can leave
-empty clock drawers in my tasks which aren't really useful.
-The following prevents this.
-#+BEGIN_SRC emacs-lisp :tangle no
-(add-hook 'org-clock-out-hook 'bh/remove-empty-drawer-on-clock-out 'append)
-#+END_SRC
+ Org capture replaces the old remember mode.
+ #+BEGIN_SRC emacs-lisp
+ (setq org-directory "~/org")
+ (setq org-default-notes-file "~/org/refile.org")
+
+ ;; Capture templates for: TODO tasks, Notes, appointments, phone calls, and org-protocol
+ ;; see http://orgmode.org/manual/Template-elements.html
+ (setq org-capture-templates
+       (quote (("t" "todo" entry (file "~/org/refile.org")
+                "* TODO %?\nAdded: %U\n"
+                :clock-in t :clock-resume t)
+               ("l" "linktodo" entry (file "~/org/refile.org")
+                "* TODO %?\nAdded: %U\n%a\n"
+                :clock-in t :clock-resume t)
+               ("r" "respond" entry (file "~/org/refile.org")
+                "* TODO Respond to %:from on %:subject\nSCHEDULED: %t\nAdded: %U\n%a\n"
+                :clock-in t :clock-resume t :immediate-finish t)
+               ("n" "note" entry (file "~/org/refile.org")
+                "* %? :NOTE:\nAdded: %U\n%a\n"
+                :clock-in t :clock-resume t)
+               ("d" "Delegated" entry (file "~/org/refile.org")
+                "* DELEGATED %?\nAdded: %U\n%a\n"
+                :clock-in t :clock-resume t)
+               ("j" "Journal" entry (file+datetree "~/org/diary.org")
+                "* %?\nAdded: %U\n"
+                :clock-in t :clock-resume t)
+               ("w" "org-protocol" entry (file "~/org/refile.org")
+                "* TODO Review %c\nAdded: %U\n"
+                :immediate-finish t)
+               ("p" "Phone call" entry (file "~/org/refile.org")
+                "* PHONE %? :PHONE:\nAdded: %U"
+                :clock-in t :clock-resume t)
+               ("x" "Bookmark link" entry (file "~/org/refile.org")
+                "* Bookmark: %c\n%i\nAdded: %U\n"
+                :immediate-finish t)
+               ("h" "Habit" entry (file "~/org/refile.org")
+                "* NEXT %?\n:PROPERTIES:\n:STYLE: habit\n:REPEAT_TO_STATE: NEXT\n:END:\nAdded: %U\nSCHEDULED: %(format-time-string \"<%Y-%m-%d %a .+1d/3d>\")\n")
+               )))
+ #+END_SRC
+
+ Capture mode now handles automatically clocking in and out of a
+ capture task.  This all works out of the box now without special hooks.
+ When I start a capture mode task the task is clocked in as specified
+ by =:clock-in t= and when the task is filed with =C-c C-c= the clock
+ resumes on the original clocking task.
+
+ The quick clocking in and out of capture mode tasks (often it takes
+ less than a minute to capture some new task details) can leave
+ empty clock drawers in my tasks which aren't really useful.
+ The following prevents this.
+ #+BEGIN_SRC emacs-lisp :tangle no
+ (add-hook 'org-clock-out-hook 'bh/remove-empty-drawer-on-clock-out 'append)
+ #+END_SRC
 
 *** Refiling
-All my newly captured entries end up in =refile.org= and want to be
-moved over to the right place. The following is the setup for it.
-#+BEGIN_SRC emacs-lisp
-; Targets include this file and any file contributing to the agenda - up to 9 levels deep
-(setq org-refile-targets (quote ((nil :maxlevel . 9)
-                                 (org-agenda-files :maxlevel . 9))))
-
-; Use full outline paths for refile targets - we file directly with IDO
-(setq org-refile-use-outline-path t)
-
-; Targets complete directly with IDO
-(setq org-outline-path-complete-in-steps nil)
-
-; Allow refile to create parent tasks with confirmation
-(setq org-refile-allow-creating-parent-nodes (quote confirm))
-
-; Use IDO for both buffer and file completion and ido-everywhere to t
-(setq org-completion-use-ido t)
-(setq org-completion-use-iswitchb nil)
-:; Use IDO for both buffer and file completion and ido-everywhere to t
-;(setq ido-everywhere t)
-;(setq ido-max-directory-size 100000)
-;(ido-mode (quote both))
-; Use the current window when visiting files and buffers with ido
-(setq ido-default-file-method 'selected-window)
-(setq ido-default-buffer-method 'selected-window)
-
-;;;; Refile settings
-(setq org-refile-target-verify-function 'bh/verify-refile-target)
-#+END_SRC
-
-*** Custom agenda
-Agenda view is the central place for org-mode interaction...
-#+BEGIN_SRC emacs-lisp
-;; Do not dim blocked tasks
-(setq org-agenda-dim-blocked-tasks nil)
-;; Compact the block agenda view
-(setq org-agenda-compact-blocks t)
-
-;; Custom agenda command definitions
-(setq org-agenda-custom-commands
-      (quote (("N" "Notes" tags "NOTE"
-               ((org-agenda-overriding-header "Notes")
-                (org-tags-match-list-sublevels t)))
-              ("h" "Habits" tags-todo "STYLE=\"habit\""
-               ((org-agenda-overriding-header "Habits")
-                (org-agenda-sorting-strategy
-                 '(todo-state-down effort-up category-keep))))
-              (" " "Agenda"
-               ((agenda "" nil)
-                (tags "REFILE"
-                      ((org-agenda-overriding-header "Tasks to Refile")
-                       (org-tags-match-list-sublevels nil)))
-                (tags-todo "-HOLD-CANCELLED/!"
-                           ((org-agenda-overriding-header "Projects")
-                            (org-agenda-skip-function 'bh/skip-non-projects)
-                            (org-agenda-sorting-strategy
-                             '(category-keep))))
-                (tags-todo "-CANCELLED/!"
-                           ((org-agenda-overriding-header "Stuck Projects")
-                            (org-agenda-skip-function 'bh/skip-non-stuck-projects)))
-                (tags-todo "-WAITING-CANCELLED/!NEXT"
-                           ((org-agenda-overriding-header "Next Tasks")
-                            (org-agenda-skip-function 'bh/skip-projects-and-habits-and-single-tasks)
-                            (org-agenda-todo-ignore-scheduled t)
-                            (org-agenda-todo-ignore-deadlines t)
-                            (org-agenda-todo-ignore-with-date t)
-                            (org-tags-match-list-sublevels t)
-                            (org-agenda-sorting-strategy
-                             '(todo-state-down effort-up category-keep))))
-                (tags-todo "-REFILE-CANCELLED/!-HOLD-WAITING"
-                           ((org-agenda-overriding-header "Tasks")
-                            (org-agenda-skip-function 'bh/skip-project-tasks-maybe)
-                            (org-agenda-todo-ignore-scheduled t)
-                            (org-agenda-todo-ignore-deadlines t)
-                            (org-agenda-todo-ignore-with-date t)
-                            (org-agenda-sorting-strategy
-                             '(category-keep))))
-                (tags-todo "-CANCELLED+WAITING/!"
-                           ((org-agenda-overriding-header "Waiting and Postponed Tasks")
-                            (org-agenda-skip-function 'bh/skip-stuck-projects)
-                            (org-tags-match-list-sublevels nil)
-                            (org-agenda-todo-ignore-scheduled 'future)
-                            (org-agenda-todo-ignore-deadlines 'future)))
-                (tags "-REFILE/"
-                      ((org-agenda-overriding-header "Tasks to Archive")
-                       (org-agenda-skip-function 'bh/skip-non-archivable-tasks)
-                       (org-tags-match-list-sublevels nil))))
-               nil)
-              ("r" "Tasks to Refile" tags "REFILE"
-               ((org-agenda-overriding-header "Tasks to Refile")
-                (org-tags-match-list-sublevels nil)))
-              ("#" "Stuck Projects" tags-todo "-CANCELLED/!"
-               ((org-agenda-overriding-header "Stuck Projects")
-                (org-agenda-skip-function 'bh/skip-non-stuck-projects)))
-              ("n" "Next Tasks" tags-todo "-WAITING-CANCELLED/!NEXT"
-               ((org-agenda-overriding-header "Next Tasks")
-                (org-agenda-skip-function 'bh/skip-projects-and-habits-and-single-tasks)
-                (org-agenda-todo-ignore-scheduled t)
-                (org-agenda-todo-ignore-deadlines t)
-                (org-agenda-todo-ignore-with-date t)
-                (org-tags-match-list-sublevels t)
-                (org-agenda-sorting-strategy
-                 '(todo-state-down effort-up category-keep))))
-              ("R" "Tasks" tags-todo "-REFILE-CANCELLED/!-HOLD-WAITING"
-               ((org-agenda-overriding-header "Tasks")
-                (org-agenda-skip-function 'bh/skip-project-tasks-maybe)
-                (org-agenda-sorting-strategy
-                 '(category-keep))))
-              ("p" "Projects" tags-todo "-HOLD-CANCELLED/!"
-               ((org-agenda-overriding-header "Projects")
-                (org-agenda-skip-function 'bh/skip-non-projects)
-                (org-agenda-sorting-strategy
-                 '(category-keep))))
-              ("w" "Waiting Tasks" tags-todo "-CANCELLED+WAITING/!"
-               ((org-agenda-overriding-header "Waiting and Postponed tasks"))
-               (org-tags-match-list-sublevels nil))
-              ("A" "Tasks to Archive" tags "-REFILE/"
-               ((org-agenda-overriding-header "Tasks to Archive")
-                (org-agenda-skip-function 'bh/skip-non-archivable-tasks)
-                (org-tags-match-list-sublevels nil))))))
-
-; Overwrite the current window with the agenda
-(setq org-agenda-window-setup 'current-window)
-
-#+END_SRC
-
-*** Time
-#+BEGIN_SRC emacs-lisp
-;;
-;; Resume clocking task when emacs is restarted
-(org-clock-persistence-insinuate)
-;;
-;; Show lot sof clocking history so it's easy to pick items off the C-F11 list
-(setq org-clock-history-length 36)
-;; Resume clocking task on clock-in if the clock is open
-(setq org-clock-in-resume t)
-;; Change tasks to NEXT when clocking in
-(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)
-;; 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 (quote ("DONE" "WAITING" "DELEGATED" "CANCELLED")))
-;; 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)
-
-; use discrete minute intervals (no rounding) increments
-(setq org-time-stamp-rounding-minutes (quote (1 1)))
-
-(add-hook 'org-clock-out-hook 'bh/clock-out-maybe 'append)
-
-(setq bh/keep-clock-running nil)
-
-(setq org-agenda-clock-consistency-checks
-      (quote (:max-duration "4:00"
-              :min-duration 0
-              :max-gap 0
-              :gap-ok-around ("4:00"))))
-
-#+END_SRC
-
-**** Setting a default clock task
-Per default the =** Organization= task in my tasks.org file receives
-misc clock time. This is the task I clock in on when I punch in at the
-start of my work day with =F9-I=.  Punching-in anywhere clocks in this
-Organization task as the default task.
-
-If I want to change the default clocking task I just visit the
-new task in any org buffer and clock it in with =C-u C-u C-c C-x
-C-i=.  Now this new task that collects miscellaneous clock
-minutes when the clock would normally stop.
-
-You can quickly clock in the default clocking task with =C-u C-c
-C-x C-i d=.  Another option is to repeatedly clock out so the
-clock moves up the project tree until you clock out the
-top-level task and the clock moves to the default task.
-
-**** Reporting
-#+BEGIN_SRC emacs-lisp
-;; Agenda clock report parameters
-(setq org-agenda-clockreport-parameter-plist
-      (quote (:link t :maxlevel 5 :fileskip0 t :compact t :narrow 80)))
-
-;; Agenda log mode items to display (closed and state changes by default)
-(setq org-agenda-log-mode-items (quote (closed state)))
-#+END_SRC
-**** Task estimates, column view
-Setup column view globally with the following headlines
-#+BEGIN_SRC emacs-lisp
-; Set default column view headings: Task Effort Clock_Summary
-(setq org-columns-default-format "%80ITEM(Task) %10Effort(Effort){:} %10CLOCKSUM")
-#+END_SRC
-Setup the estimate for effort values.
-#+BEGIN_SRC emacs-lisp
-; global Effort estimate values
-; global STYLE property values for completion
-(setq org-global-properties (quote (("Effort_ALL" . "0:15 0:30 0:45 1:00 2:00 3:00 4:00 5:00 6:00 0:00")
-                                    ("STYLE_ALL" . "habit"))))
-#+END_SRC
-
-*** Tags
-Tags are mostly used for filtering inside the agenda.
-#+BEGIN_SRC emacs-lisp
-; Tags with fast selection keys
-(setq org-tag-alist (quote ((:startgroup)
-                            ("@errand" . ?e)
-                            ("@office" . ?o)
-                            ("@home" . ?H)
-                            (:endgroup)
-                            ("PHONE" . ?p)
-                            ("WAITING" . ?w)
-                            ("HOLD" . ?h)
-                            ("PERSONAL" . ?P)
-                            ("WORK" . ?W)
-                            ("ORG" . ?O)
-                            ("PRIVATE" . ?N)
-                            ("crypt" . ?E)
-                            ("MARK" . ?M)
-                            ("NOTE" . ?n)
-                            ("CANCELLED" . ?c)
-                            ("FLAGGED" . ??))))
-
-; Allow setting single tags without the menu
-(setq org-fast-tag-selection-single-key (quote expert))
-
-; For tag searches ignore tasks with scheduled and deadline dates
-(setq org-agenda-tags-todo-honor-ignore-options t)
-#+END_SRC
-
-*** Archiving
-#+BEGIN_SRC emacs-lisp
-(setq org-archive-mark-done nil)
-(setq org-archive-location "%s_archive::* Archived Tasks")
-#+END_SRC
-
-*** org-babel
-#+BEGIN_SRC emacs-lisp
-(setq org-ditaa-jar-path "~/java/ditaa0_6b.jar")
-(setq org-plantuml-jar-path "~/java/plantuml.jar")
-
-(add-hook 'org-babel-after-execute-hook 'bh/display-inline-images 'append)
-
-; Make babel results blocks lowercase
-(setq org-babel-results-keyword "results")
-
-(org-babel-do-load-languages
- (quote org-babel-load-languages)
- (quote ((emacs-lisp . t)
-         (awk . t)
-         (css . t)
-         (makefile . t)
-         (perl . t)
-         (ruby . t)
-         (dot . t)
-         (ditaa . t)
-         (R . t)
-         (python . t)
-         (ruby . t)
-         (gnuplot . t)
-         (clojure . t)
-         (sh . t)
-         (ledger . t)
-         (org . t)
-         (plantuml . t)
-         (latex . t))))
-
-; Do not prompt to confirm evaluation
-; This may be dangerous - make sure you understand the consequences
-; of setting this -- see the docstring for details
-(setq org-confirm-babel-evaluate nil)
-
-; Use fundamental mode when editing plantuml blocks with C-c '
-(add-to-list 'org-src-lang-modes (quote ("plantuml" . fundamental)))
-#+END_SRC
-
-#+BEGIN_SRC emacs-lisp
-;; Don't have images visible on startup, breaks on console
-(setq org-startup-with-inline-images nil)
-#+END_SRC
-
-#+BEGIN_SRC emacs-lisp
-(add-to-list 'org-structure-template-alist
-             '("n" "#+BEGIN_COMMENT\n?\n#+END_COMMENT"
-               "<comment>\n?\n</comment>"))
-#+END_SRC
-**** ditaa, graphviz, etc
-Those are all nice tools. Look at
-http://doc.norang.ca/org-mode.html#playingwithditaa for a nice intro
-to them.
-
-*** Publishing and exporting
-
-
-Org-mode can export to a variety of publishing formats including (but not limited to)
-
-- ASCII
-  (plain text - but not the original org-mode file)
-- HTML
-- LaTeX
-- Docbook
-  which enables getting to lots of other formats like ODF, XML, etc
-- PDF
-  via LaTeX or Docbook
-- iCal
-
-A new exporter created by Nicolas Goaziou was introduced in org 8.0.
-
-#+BEGIN_SRC emacs-lisp
-;; Explicitly load required exporters
-(require 'ox-html)
-(require 'ox-latex)
-(require 'ox-ascii)
-;(require 'ox-reveal)
-;; FIXME, check the following two
-;(require 'ox-icalendar)
-;(require 'ox-odt)
-
-; experimenting with docbook exports - not finished
-(setq org-export-docbook-xsl-fo-proc-command "fop %s %s")
-(setq org-export-docbook-xslt-proc-command "xsltproc --output %s /usr/share/xml/docbook/stylesheet/nwalsh/fo/docbook.xsl %s")
-
-(setq org-reveal-root "file:///home/joerg/devel/ganeticon2015/reveal.js/reveal.js")
-
-;; define categories that should be excluded
-(setq org-export-exclude-category (list "google" "google"))
-(setq org-icalendar-use-scheduled '(todo-start event-if-todo))
-
-; define how the date strings look
-(setq org-export-date-timestamp-format "%Y-%m-%d")
-; Inline images in HTML instead of producting links to the image
-(setq org-html-inline-images t)
-; Do not use sub or superscripts - I currently don't need this functionality in my documents
-(setq org-export-with-sub-superscripts nil)
-
-(setq org-html-head-extra (concat
-                           "<link rel=\"stylesheet\" href=\"https://ganneff.de/stylesheet.css\" type=\"text/css\" />\n"
-                           ))
-(setq org-html-head-include-default-style nil)
-; Do not generate internal css formatting for HTML exports
-(setq org-export-htmlize-output-type (quote css))
-; Export with LaTeX fragments
-(setq org-export-with-LaTeX-fragments t)
-; Increase default number of headings to export
-(setq org-export-headline-levels 6)
-
-
-(setq org-publish-project-alist
-      '(
-        ("config-notes"
-         :base-directory "~/.emacs.d/"
-         :base-extension "org"
-         :exclude "elisp"
-         :publishing-directory "/develop/www/emacs"
-         :recursive t
-         :publishing-function org-html-publish-to-html
-         :headline-levels 4             ; Just the default for this project.
-         :auto-preamble t
-         :auto-sitemap t
-         :makeindex t
-         )
-        ("config-static"
-         :base-directory "~/.emacs.d/"
-         :base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|swf"
-         :publishing-directory "/develop/www/emacs"
-         :exclude "elisp\\|elpa\\|elpa.off\\|auto-save-list\\|cache\\|eshell\\|image-dired\\|themes\\|url"
-         :recursive t
-         :publishing-function org-publish-attachment
-         )
-        ("inherit-org-info-js"
-         :base-directory "/develop/vcs/org-info-js/"
-         :recursive t
-         :base-extension "js"
-         :publishing-directory "/develop/www/"
-         :publishing-function org-publish-attachment
-         )
-        ("config" :components ("inherit-org-info-js" "config-notes" "config-static")
-         )
-        )
-      )
-
-(setq org-export-with-timestamps nil)
-#+END_SRC
-
-**** Latex export
-
-#+BEGIN_SRC emacs-lisp
-(setq org-latex-to-pdf-process
-      '("xelatex -interaction nonstopmode %f"
-        "xelatex -interaction nonstopmode %f")) ;; for multiple passes
-(setq org-export-latex-listings 'minted)
-(setq org-latex-listings t)
-
-;; Originally taken from Bruno Tavernier: http://thread.gmane.org/gmane.emacs.orgmode/31150/focus=31432
-;; but adapted to use latexmk 4.20 or higher.
-(defun my-auto-tex-cmd ()
-  "When exporting from .org with latex, automatically run latex,
-     pdflatex, or xelatex as appropriate, using latexmk."
-  (let ((texcmd)))
-  ;; default command: oldstyle latex via dvi
-  (setq texcmd "latexmk -dvi -pdfps -quiet %f")
-  ;; pdflatex -> .pdf
-  (if (string-match "LATEX_CMD: pdflatex" (buffer-string))
-      (setq texcmd "latexmk -pdf -quiet %f"))
-  ;; xelatex -> .pdf
-  (if (string-match "LATEX_CMD: xelatex" (buffer-string))
-      (setq texcmd "latexmk -pdflatex='xelatex -shell-escape' -pdf -quiet %f"))
-  ;; LaTeX compilation command
-  (setq org-latex-to-pdf-process (list texcmd)))
-
-(add-hook 'org-export-latex-after-initial-vars-hook 'my-auto-tex-cmd)
-
-;; Specify default packages to be included in every tex file, whether pdflatex or xelatex
-(setq org-export-latex-packages-alist
-      '(("" "graphicx" t)
-        ("" "longtable" nil)
-        ("" "float" nil)
-        ("" "minted" nil)
-        ))
-
-(defun my-auto-tex-parameters ()
-      "Automatically select the tex packages to include."
-      ;; default packages for ordinary latex or pdflatex export
-      (setq org-export-latex-default-packages-alist
-            '(("AUTO" "inputenc" t)
-              ("T1"   "fontenc"   t)
-              (""     "fixltx2e"  nil)
-              (""     "wrapfig"   nil)
-              (""     "soul"      t)
-              (""     "textcomp"  t)
-              (""     "marvosym"  t)
-              (""     "wasysym"   t)
-              (""     "latexsym"  t)
-              (""     "amssymb"   t)
-              (""     "hyperref"  nil)))
-
-      ;; Packages to include when xelatex is used
-      (if (string-match "LATEX_CMD: xelatex" (buffer-string))
-          (setq org-export-latex-default-packages-alist
-                '(("" "fontspec" t)
-                  ("" "xunicode" t)
-                  ("" "url" t)
-                  ("" "rotating" t)
-                  ("german" "babel" t)
-                  ("babel" "csquotes" t)
-                  ("" "soul" t)
-                  ("xetex" "hyperref" nil)
-                  )))
-
-      (if (string-match "#+LATEX_CMD: xelatex" (buffer-string))
-          (setq org-export-latex-classes
-                (cons '("scrartcl"
-                        "\\documentclass[11pt,DIV=13,oneside]{scrartcl}"
-                        ("\\section{%s}" . "\\section*{%s}")
-                        ("\\subsection{%s}" . "\\subsection*{%s}")
-                        ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
-                        ("\\paragraph{%s}" . "\\paragraph*{%s}")
-                        ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
-                      org-export-latex-classes))))
-
-(add-hook 'org-export-latex-after-initial-vars-hook 'my-auto-tex-parameters)
-#+END_SRC
-
-*** Prevent editing invisible text
-The following setting prevents accidentally editing hidden text when
-the point is inside a folded region.  This can happen if you are in
-the body of a heading and globally fold the org-file with =S-TAB=
-
-I find invisible edits (and undo's) hard to deal with so now I can't
-edit invisible text.  =C-c C-r= (org-reveal) will display where the
-point is if it is buried in invisible text to allow editing again.
-
-#+BEGIN_SRC emacs-lisp
-(setq org-catch-invisible-edits 'error)
-#+END_SRC
-
-*** Whatever
-#+BEGIN_SRC emacs-lisp
-;; disable the default org-mode stuck projects agenda view
-(setq org-stuck-projects (quote ("" nil nil "")))
-
-; force showing the next headline.
-(setq org-show-entry-below (quote ((default))))
-
-(setq org-show-following-heading t)
-(setq org-show-hierarchy-above t)
-(setq org-show-siblings (quote ((default))))
-
-(setq org-special-ctrl-a/e t)
-(setq org-special-ctrl-k t)
-(setq org-yank-adjusted-subtrees t)
-
-(setq org-table-export-default-format "orgtbl-to-csv")
-
-#+END_SRC
-
-The following setting adds alphabetical lists like
-  ,a. item one
-  ,b. item two
-
-#+BEGIN_SRC emacs-lisp
-(if (> emacs-major-version 23)
-    (setq org-list-allow-alphabetical t)
-  (setq org-alphabetical-lists t))
-#+END_SRC
-
-#+BEGIN_SRC emacs-lisp
-(setq org-remove-highlights-with-change nil)
-
-(setq org-list-demote-modify-bullet (quote (("+" . "-")
-    ("*" . "-")
-    ("1." . "-")
-    ("1)" . "-"))))
-
-
-
-(add-hook 'org-insert-heading-hook 'bh/insert-heading-inactive-timestamp 'append)
-
-
-; If we leave Emacs running overnight - reset the appointments one minute after midnight
-(run-at-time "24:01" nil 'bh/org-agenda-to-appt)
-
-#+END_SRC
+ All my newly captured entries end up in =refile.org= and want to be
+ moved over to the right place. The following is the setup for it.
+ #+BEGIN_SRC emacs-lisp
+ ; Targets include this file and any file contributing to the agenda - up to 9 levels deep
+ (setq org-refile-targets (quote ((nil :maxlevel . 9)
+                                  (org-agenda-files :maxlevel . 9))))
+
+ ; Use full outline paths for refile targets - we file directly with IDO
+ (setq org-refile-use-outline-path t)
+
+ ; Targets complete directly with IDO
+ (setq org-outline-path-complete-in-steps nil)
+
+ ; Allow refile to create parent tasks with confirmation
+ (setq org-refile-allow-creating-parent-nodes (quote confirm))
+
+ ; Use IDO for both buffer and file completion and ido-everywhere to t
+ (setq org-completion-use-ido t)
+ (setq org-completion-use-iswitchb nil)
+ :; Use IDO for both buffer and file completion and ido-everywhere to t
+ ;(setq ido-everywhere t)
+ ;(setq ido-max-directory-size 100000)
+ ;(ido-mode (quote both))
+ ; Use the current window when visiting files and buffers with ido
+ (setq ido-default-file-method 'selected-window)
+ (setq ido-default-buffer-method 'selected-window)
+
+ ;;;; Refile settings
+ (setq org-refile-target-verify-function 'bh/verify-refile-target)
+ #+END_SRC
 
+*** Custom agenda
+ Agenda view is the central place for org-mode interaction...
+ #+BEGIN_SRC emacs-lisp
+ ;; Do not dim blocked tasks
+ (setq org-agenda-dim-blocked-tasks nil)
+ ;; Compact the block agenda view
+ (setq org-agenda-compact-blocks t)
+
+ ;; Custom agenda command definitions
+ (setq org-agenda-custom-commands
+       (quote (("N" "Notes" tags "NOTE"
+                ((org-agenda-overriding-header "Notes")
+                 (org-tags-match-list-sublevels t)))
+               ("h" "Habits" tags-todo "STYLE=\"habit\""
+                ((org-agenda-overriding-header "Habits")
+                 (org-agenda-sorting-strategy
+                  '(todo-state-down effort-up category-keep))))
+               (" " "Agenda"
+                ((agenda "" nil)
+                 (tags "REFILE"
+                       ((org-agenda-overriding-header "Tasks to Refile")
+                        (org-tags-match-list-sublevels nil)))
+                 (tags-todo "-HOLD-CANCELLED/!"
+                            ((org-agenda-overriding-header "Projects")
+                             (org-agenda-skip-function 'bh/skip-non-projects)
+                             (org-agenda-sorting-strategy
+                              '(category-keep))))
+                 (tags-todo "-CANCELLED/!"
+                            ((org-agenda-overriding-header "Stuck Projects")
+                             (org-agenda-skip-function 'bh/skip-non-stuck-projects)))
+                 (tags-todo "-WAITING-CANCELLED/!NEXT"
+                            ((org-agenda-overriding-header "Next Tasks")
+                             (org-agenda-skip-function 'bh/skip-projects-and-habits-and-single-tasks)
+                             (org-agenda-todo-ignore-scheduled t)
+                             (org-agenda-todo-ignore-deadlines t)
+                             (org-agenda-todo-ignore-with-date t)
+                             (org-tags-match-list-sublevels t)
+                             (org-agenda-sorting-strategy
+                              '(todo-state-down effort-up category-keep))))
+                 (tags-todo "-REFILE-CANCELLED/!-HOLD-WAITING"
+                            ((org-agenda-overriding-header "Tasks")
+                             (org-agenda-skip-function 'bh/skip-project-tasks-maybe)
+                             (org-agenda-todo-ignore-scheduled t)
+                             (org-agenda-todo-ignore-deadlines t)
+                             (org-agenda-todo-ignore-with-date t)
+                             (org-agenda-sorting-strategy
+                              '(category-keep))))
+                 (tags-todo "-CANCELLED+WAITING/!"
+                            ((org-agenda-overriding-header "Waiting and Postponed Tasks")
+                             (org-agenda-skip-function 'bh/skip-stuck-projects)
+                             (org-tags-match-list-sublevels nil)
+                             (org-agenda-todo-ignore-scheduled 'future)
+                             (org-agenda-todo-ignore-deadlines 'future)))
+                 (tags "-REFILE/"
+                       ((org-agenda-overriding-header "Tasks to Archive")
+                        (org-agenda-skip-function 'bh/skip-non-archivable-tasks)
+                        (org-tags-match-list-sublevels nil))))
+                nil)
+               ("r" "Tasks to Refile" tags "REFILE"
+                ((org-agenda-overriding-header "Tasks to Refile")
+                 (org-tags-match-list-sublevels nil)))
+               ("#" "Stuck Projects" tags-todo "-CANCELLED/!"
+                ((org-agenda-overriding-header "Stuck Projects")
+                 (org-agenda-skip-function 'bh/skip-non-stuck-projects)))
+               ("n" "Next Tasks" tags-todo "-WAITING-CANCELLED/!NEXT"
+                ((org-agenda-overriding-header "Next Tasks")
+                 (org-agenda-skip-function 'bh/skip-projects-and-habits-and-single-tasks)
+                 (org-agenda-todo-ignore-scheduled t)
+                 (org-agenda-todo-ignore-deadlines t)
+                 (org-agenda-todo-ignore-with-date t)
+                 (org-tags-match-list-sublevels t)
+                 (org-agenda-sorting-strategy
+                  '(todo-state-down effort-up category-keep))))
+               ("R" "Tasks" tags-todo "-REFILE-CANCELLED/!-HOLD-WAITING"
+                ((org-agenda-overriding-header "Tasks")
+                 (org-agenda-skip-function 'bh/skip-project-tasks-maybe)
+                 (org-agenda-sorting-strategy
+                  '(category-keep))))
+               ("p" "Projects" tags-todo "-HOLD-CANCELLED/!"
+                ((org-agenda-overriding-header "Projects")
+                 (org-agenda-skip-function 'bh/skip-non-projects)
+                 (org-agenda-sorting-strategy
+                  '(category-keep))))
+               ("w" "Waiting Tasks" tags-todo "-CANCELLED+WAITING/!"
+                ((org-agenda-overriding-header "Waiting and Postponed tasks"))
+                (org-tags-match-list-sublevels nil))
+               ("A" "Tasks to Archive" tags "-REFILE/"
+                ((org-agenda-overriding-header "Tasks to Archive")
+                 (org-agenda-skip-function 'bh/skip-non-archivable-tasks)
+                 (org-tags-match-list-sublevels nil))))))
+
+ ; Overwrite the current window with the agenda
+ (setq org-agenda-window-setup 'current-window)
+
+ #+END_SRC
 
-#+BEGIN_SRC emacs-lisp
-;; Enable abbrev-mode
-(add-hook 'org-mode-hook (lambda () (abbrev-mode 1)))
-(setq org-startup-indented t)
-(setq org-startup-folded t)
-(setq org-cycle-separator-lines 0)
-#+END_SRC
+*** Time
+ #+BEGIN_SRC emacs-lisp
+ ;;
+ ;; Resume clocking task when emacs is restarted
+ (org-clock-persistence-insinuate)
+ ;;
+ ;; Show lot sof clocking history so it's easy to pick items off the C-F11 list
+ (setq org-clock-history-length 36)
+ ;; Resume clocking task on clock-in if the clock is open
+ (setq org-clock-in-resume t)
+ ;; Change tasks to NEXT when clocking in
+ (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)
+ ;; 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 (quote ("DONE" "WAITING" "DELEGATED" "CANCELLED")))
+ ;; 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)
+
+ ; use discrete minute intervals (no rounding) increments
+ (setq org-time-stamp-rounding-minutes (quote (1 1)))
+
+ (add-hook 'org-clock-out-hook 'bh/clock-out-maybe 'append)
+
+ (setq bh/keep-clock-running nil)
+
+ (setq org-agenda-clock-consistency-checks
+       (quote (:max-duration "4:00"
+               :min-duration 0
+               :max-gap 0
+               :gap-ok-around ("4:00"))))
+
+ #+END_SRC
 
-I find extra blank lines in lists and headings a bit of a nuisance.
-To get a body after a list you need to include a blank line between
-the list entry and the body -- and indent the body appropriately.
-Most of my lists have no body detail so I like the look of collapsed
-lists with no blank lines better.
+**** Setting a default clock task
+ Per default the =** Organization= task in my tasks.org file receives
+ misc clock time. This is the task I clock in on when I punch in at the
+ start of my work day with =F9-I=.  Punching-in anywhere clocks in this
+ Organization task as the default task.
 
-The following setting prevents creating blank lines before headings
-but allows list items to adapt to existing blank lines around the items:
-#+BEGIN_SRC emacs-lisp
-(setq org-blank-before-new-entry (quote ((heading)
-                                         (plain-list-item . auto))))
-#+END_SRC
+ If I want to change the default clocking task I just visit the
+ new task in any org buffer and clock it in with =C-u C-u C-c C-x
+ C-i=.  Now this new task that collects miscellaneous clock
+ minutes when the clock would normally stop.
 
-#+BEGIN_SRC emacs-lisp
-(setq org-reverse-note-order nil)
-(setq org-default-notes-file "~/notes.org")
-#+END_SRC
+ You can quickly clock in the default clocking task with =C-u C-c
+ C-x C-i d=.  Another option is to repeatedly clock out so the
+ clock moves up the project tree until you clock out the
+ top-level task and the clock moves to the default task.
 
-Enforce task blocking. Tasks can't go done when there is any subtask
-still open. Unless they have a property of =NOBLOCKING: t=
-#+BEGIN_SRC emacs-lisp
-(setq org-enforce-todo-checkbox-dependencies t)
-(setq org-enforce-todo-dependencies t)
-#+END_SRC
+**** Reporting
+ #+BEGIN_SRC emacs-lisp
+ ;; Agenda clock report parameters
+ (setq org-agenda-clockreport-parameter-plist
+       (quote (:link t :maxlevel 5 :fileskip0 t :compact t :narrow 80)))
+
+ ;; Agenda log mode items to display (closed and state changes by default)
+ (setq org-agenda-log-mode-items (quote (closed state)))
+ #+END_SRC
+**** Task estimates, column view
+ Setup column view globally with the following headlines
+ #+BEGIN_SRC emacs-lisp
+ ; Set default column view headings: Task Effort Clock_Summary
+ (setq org-columns-default-format "%80ITEM(Task) %10Effort(Effort){:} %10CLOCKSUM")
+ #+END_SRC
+ Setup the estimate for effort values.
+ #+BEGIN_SRC emacs-lisp
+ ; global Effort estimate values
+ ; global STYLE property values for completion
+ (setq org-global-properties (quote (("Effort_ALL" . "0:15 0:30 0:45 1:00 2:00 3:00 4:00 5:00 6:00 0:00")
+                                     ("STYLE_ALL" . "habit"))))
+ #+END_SRC
 
-#+BEGIN_SRC emacs-lisp
-(setq org-fast-tag-selection-single-key (quote expert))
-(setq org-footnote-auto-adjust t)
-(setq org-hide-block-startup t)
-(setq org-icalendar-alarm-time 15)
-(setq org-icalendar-combined-description "Ganneffs Org-mode calendar entries")
-(setq org-icalendar-combined-name "\"Ganneffs OrgMode\"")
-(setq org-icalendar-honor-noexport-tag t)
-(setq org-icalendar-include-bbdb-anniversaries nil)
-(setq org-icalendar-include-body 200)
-(setq org-icalendar-include-todo nil)
-(setq org-icalendar-store-UID t)
-(setq org-icalendar-timezone "Europe/Berlin")
-(setq org-insert-mode-line-in-empty-file t)
-(setq org-log-done (quote note))
-(setq org-log-into-drawer t)
-(setq org-log-state-notes-insert-after-drawers nil)
-(setq org-log-reschedule (quote time))
-(setq org-log-states-order-reversed t)
-(setq org-mobile-agendas (quote all))
-(setq org-mobile-directory "/scpx:joerg@garibaldi.ganneff.de:/srv/www2.ganneff.de/htdocs/org/")
-(setq org-mobile-inbox-for-pull "~/org/refile.org")
-(setq org-remember-store-without-prompt t)
-(setq org-return-follows-link t)
-(setq org-reverse-note-order t)
-
-; regularly save our org-mode buffers
-(run-at-time "00:59" 3600 'org-save-all-org-buffers)
-
-(setq org-log-done t)
-
-(setq org-enable-priority-commands t)
-(setq org-default-priority ?E)
-(setq org-lowest-priority ?E)
+*** Tags
+ Tags are mostly used for filtering inside the agenda.
+ #+BEGIN_SRC emacs-lisp
+ ; Tags with fast selection keys
+ (setq org-tag-alist (quote ((:startgroup)
+                             ("@errand" . ?e)
+                             ("@office" . ?o)
+                             ("@home" . ?H)
+                             (:endgroup)
+                             ("PHONE" . ?p)
+                             ("WAITING" . ?w)
+                             ("HOLD" . ?h)
+                             ("PERSONAL" . ?P)
+                             ("WORK" . ?W)
+                             ("ORG" . ?O)
+                             ("PRIVATE" . ?N)
+                             ("crypt" . ?E)
+                             ("MARK" . ?M)
+                             ("NOTE" . ?n)
+                             ("CANCELLED" . ?c)
+                             ("FLAGGED" . ??))))
+
+ ; Allow setting single tags without the menu
+ (setq org-fast-tag-selection-single-key (quote expert))
+
+ ; For tag searches ignore tasks with scheduled and deadline dates
+ (setq org-agenda-tags-todo-honor-ignore-options t)
+ #+END_SRC
 
+*** Archiving
+ #+BEGIN_SRC emacs-lisp
+ (setq org-archive-mark-done nil)
+ (setq org-archive-location "%s_archive::* Archived Tasks")
+ #+END_SRC
 
-#+END_SRC
+*** org-babel
+ #+BEGIN_SRC emacs-lisp
+ (setq org-ditaa-jar-path "~/java/ditaa0_6b.jar")
+ (setq org-plantuml-jar-path "~/java/plantuml.jar")
+
+ (add-hook 'org-babel-after-execute-hook 'bh/display-inline-images 'append)
+
+ ; Make babel results blocks lowercase
+ (setq org-babel-results-keyword "results")
+
+ (org-babel-do-load-languages
+  (quote org-babel-load-languages)
+  (quote ((emacs-lisp . t)
+          (awk . t)
+          (css . t)
+          (makefile . t)
+          (perl . t)
+          (ruby . t)
+          (dot . t)
+          (ditaa . t)
+          (R . t)
+          (python . t)
+          (ruby . t)
+          (gnuplot . t)
+          (clojure . t)
+          (shell . t)
+          (ledger . t)
+          (org . t)
+          (plantuml . t)
+          (latex . t))))
+
+ ; Do not prompt to confirm evaluation
+ ; This may be dangerous - make sure you understand the consequences
+ ; of setting this -- see the docstring for details
+ (setq org-confirm-babel-evaluate nil)
+
+ ; Use fundamental mode when editing plantuml blocks with C-c '
+ (add-to-list 'org-src-lang-modes (quote ("plantuml" . fundamental)))
+ #+END_SRC
+
+ #+BEGIN_SRC emacs-lisp
+ ;; Don't have images visible on startup, breaks on console
+ (setq org-startup-with-inline-images nil)
+ #+END_SRC
+
+ #+BEGIN_SRC emacs-lisp
+ (add-to-list 'org-structure-template-alist
+              '("n" "#+BEGIN_COMMENT\n?\n#+END_COMMENT"
+                "<comment>\n?\n</comment>"))
+ #+END_SRC
+**** ditaa, graphviz, etc
+ Those are all nice tools. Look at
+ http://doc.norang.ca/org-mode.html#playingwithditaa for a nice intro
+ to them.
 
-Speed commands enable single-letter commands in Org-mode files when
-the point is at the beginning of a headline, or at the beginning of a
-code block.
+*** Publishing and exporting
 
-See the `=org-speed-commands-default=' variable for a list of the keys
-and commands enabled at the beginning of headlines.  All code blocks
-are available at the beginning of a code block, the following key
-sequence =C-c C-v h= (bound to `=org-babel-describe-bindings=') will
-display a list of the code blocks commands and their related keys.
 
-#+BEGIN_SRC emacs-lisp
-(setq org-use-speed-commands nil)
-(setq org-speed-commands-user (quote (("0" . ignore)
-                                      ("1" . ignore)
-                                      ("2" . ignore)
-                                      ("3" . ignore)
-                                      ("4" . ignore)
-                                      ("5" . ignore)
-                                      ("6" . ignore)
-                                      ("7" . ignore)
-                                      ("8" . ignore)
-                                      ("9" . ignore)
-
-                                      ("a" . ignore)
-                                      ("d" . ignore)
-                                      ("h" . bh/hide-other)
-                                      ("i" progn
-                                       (forward-char 1)
-                                       (call-interactively 'org-insert-heading-respect-content))
-                                      ("k" . org-kill-note-or-show-branches)
-                                      ("l" . ignore)
-                                      ("m" . ignore)
-                                      ("q" . bh/show-org-agenda)
-                                      ("r" . ignore)
-                                      ("s" . org-save-all-org-buffers)
-                                      ("w" . org-refile)
-                                      ("x" . ignore)
-                                      ("y" . ignore)
-                                      ("z" . org-add-note)
-
-                                      ("A" . ignore)
-                                      ("B" . ignore)
-                                      ("E" . ignore)
-                                      ("F" . bh/restrict-to-file-or-follow)
-                                      ("G" . ignore)
-                                      ("H" . ignore)
-                                      ("J" . org-clock-goto)
-                                      ("K" . ignore)
-                                      ("L" . ignore)
-                                      ("M" . ignore)
-                                      ("N" . bh/narrow-to-org-subtree)
-                                      ("P" . bh/narrow-to-org-project)
-                                      ("Q" . ignore)
-                                      ("R" . ignore)
-                                      ("S" . ignore)
-                                      ("T" . bh/org-todo)
-                                      ("U" . bh/narrow-up-one-org-level)
-                                      ("V" . ignore)
-                                      ("W" . bh/widen)
-                                      ("X" . ignore)
-                                      ("Y" . ignore)
-                                      ("Z" . ignore))))
-
-(add-hook 'org-agenda-mode-hook
-          (lambda ()
-            (define-key org-agenda-mode-map "q" 'bury-buffer))
-          'append)
+ Org-mode can export to a variety of publishing formats including (but not limited to)
+
+ - ASCII
+   (plain text - but not the original org-mode file)
+ - HTML
+ - LaTeX
+ - Docbook
+   which enables getting to lots of other formats like ODF, XML, etc
+ - PDF
+   via LaTeX or Docbook
+ - iCal
+
+ A new exporter created by Nicolas Goaziou was introduced in org 8.0.
+
+ #+BEGIN_SRC emacs-lisp
+ ;; Explicitly load required exporters
+ (require 'ox-html)
+ (require 'ox-latex)
+ (require 'ox-ascii)
+ ;(require 'ox-reveal)
+ ;; FIXME, check the following two
+ ;(require 'ox-icalendar)
+ ;(require 'ox-odt)
+
+ ; experimenting with docbook exports - not finished
+ (setq org-export-docbook-xsl-fo-proc-command "fop %s %s")
+ (setq org-export-docbook-xslt-proc-command "xsltproc --output %s /usr/share/xml/docbook/stylesheet/nwalsh/fo/docbook.xsl %s")
+
+ (setq org-reveal-root "file:///home/joerg/devel/ganeticon2015/reveal.js/reveal.js")
+
+ ;; define categories that should be excluded
+ (setq org-export-exclude-category (list "google" "google"))
+ (setq org-icalendar-use-scheduled '(todo-start event-if-todo))
+
+ ; define how the date strings look
+ (setq org-export-date-timestamp-format "%Y-%m-%d")
+ ; Inline images in HTML instead of producting links to the image
+ (setq org-html-inline-images t)
+ ; Do not use sub or superscripts - I currently don't need this functionality in my documents
+ (setq org-export-with-sub-superscripts nil)
+
+ (setq org-html-head-extra (concat
+                            "<link rel=\"stylesheet\" href=\"https://ganneff.de/stylesheet.css\" type=\"text/css\" />\n"
+                            ))
+ (setq org-html-head-include-default-style nil)
+ ; Do not generate internal css formatting for HTML exports
+ (setq org-export-htmlize-output-type (quote css))
+ ; Export with LaTeX fragments
+ (setq org-export-with-LaTeX-fragments t)
+ ; Increase default number of headings to export
+ (setq org-export-headline-levels 6)
+
+
+ (setq org-publish-project-alist
+       '(
+         ("config-notes"
+          :base-directory "~/.emacs.d/"
+          :base-extension "org"
+          :exclude "elisp"
+          :publishing-directory "/develop/www/emacs"
+          :recursive t
+          :publishing-function org-html-publish-to-html
+          :headline-levels 4             ; Just the default for this project.
+          :auto-preamble t
+          :auto-sitemap t
+          :makeindex t
+          )
+         ("config-static"
+          :base-directory "~/.emacs.d/"
+          :base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|swf"
+          :publishing-directory "/develop/www/emacs"
+          :exclude "elisp\\|elpa\\|elpa.off\\|auto-save-list\\|cache\\|eshell\\|image-dired\\|themes\\|url"
+          :recursive t
+          :publishing-function org-publish-attachment
+          )
+         ("inherit-org-info-js"
+          :base-directory "/develop/vcs/org-info-js/"
+          :recursive t
+          :base-extension "js"
+          :publishing-directory "/develop/www/"
+          :publishing-function org-publish-attachment
+          )
+         ("config" :components ("inherit-org-info-js" "config-notes" "config-static")
+          )
+         )
+       )
 
-(defvar bh/current-view-project nil)
-(add-hook 'org-agenda-mode-hook
-          '(lambda () (org-defkey org-agenda-mode-map "V" 'bh/view-next-project))
-          'append)
-#+END_SRC
+ (setq org-export-with-timestamps nil)
+ #+END_SRC
 
+**** Latex export
 
-The following displays the contents of code blocks in Org-mode files
-using the major-mode of the code.  It also changes the behavior of
-=TAB= to as if it were used in the appropriate major mode.  This means
-that reading and editing code form inside of your Org-mode files is
-much more like reading and editing of code using its major mode.
+ #+BEGIN_SRC emacs-lisp
+ (setq org-latex-to-pdf-process
+       '("xelatex -interaction nonstopmode %f"
+         "xelatex -interaction nonstopmode %f")) ;; for multiple passes
+ (setq org-export-latex-listings 'minted)
+ (setq org-latex-listings t)
+
+ ;; Originally taken from Bruno Tavernier: http://thread.gmane.org/gmane.emacs.orgmode/31150/focus=31432
+ ;; but adapted to use latexmk 4.20 or higher.
+ (defun my-auto-tex-cmd ()
+   "When exporting from .org with latex, automatically run latex,
+      pdflatex, or xelatex as appropriate, using latexmk."
+   (let ((texcmd)))
+   ;; default command: oldstyle latex via dvi
+   (setq texcmd "latexmk -dvi -pdfps -quiet %f")
+   ;; pdflatex -> .pdf
+   (if (string-match "LATEX_CMD: pdflatex" (buffer-string))
+       (setq texcmd "latexmk -pdf -quiet %f"))
+   ;; xelatex -> .pdf
+   (if (string-match "LATEX_CMD: xelatex" (buffer-string))
+       (setq texcmd "latexmk -pdflatex='xelatex -shell-escape' -pdf -quiet %f"))
+   ;; LaTeX compilation command
+   (setq org-latex-to-pdf-process (list texcmd)))
+
+ (add-hook 'org-export-latex-after-initial-vars-hook 'my-auto-tex-cmd)
+
+ ;; Specify default packages to be included in every tex file, whether pdflatex or xelatex
+ (setq org-export-latex-packages-alist
+       '(("" "graphicx" t)
+         ("" "longtable" nil)
+         ("" "float" nil)
+         ("" "minted" nil)
+         ))
+
+ (defun my-auto-tex-parameters ()
+       "Automatically select the tex packages to include."
+       ;; default packages for ordinary latex or pdflatex export
+       (setq org-export-latex-default-packages-alist
+             '(("AUTO" "inputenc" t)
+               ("T1"   "fontenc"   t)
+               (""     "fixltx2e"  nil)
+               (""     "wrapfig"   nil)
+               (""     "soul"      t)
+               (""     "textcomp"  t)
+               (""     "marvosym"  t)
+               (""     "wasysym"   t)
+               (""     "latexsym"  t)
+               (""     "amssymb"   t)
+               (""     "hyperref"  nil)))
+
+       ;; Packages to include when xelatex is used
+       (if (string-match "LATEX_CMD: xelatex" (buffer-string))
+           (setq org-export-latex-default-packages-alist
+                 '(("" "fontspec" t)
+                   ("" "xunicode" t)
+                   ("" "url" t)
+                   ("" "rotating" t)
+                   ("german" "babel" t)
+                   ("babel" "csquotes" t)
+                   ("" "soul" t)
+                   ("xetex" "hyperref" nil)
+                   )))
+
+       (if (string-match "#+LATEX_CMD: xelatex" (buffer-string))
+           (setq org-export-latex-classes
+                 (cons '("scrartcl"
+                         "\\documentclass[11pt,DIV=13,oneside]{scrartcl}"
+                         ("\\section{%s}" . "\\section*{%s}")
+                         ("\\subsection{%s}" . "\\subsection*{%s}")
+                         ("\\subsubsection{%s}" . "\\subsubsection*{%s}")
+                         ("\\paragraph{%s}" . "\\paragraph*{%s}")
+                         ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
+                       org-export-latex-classes))))
+
+ (add-hook 'org-export-latex-after-initial-vars-hook 'my-auto-tex-parameters)
+ #+END_SRC
 
-#+BEGIN_SRC emacs-lisp
-(setq org-src-fontify-natively t)
-(setq org-src-tab-acts-natively t)
-#+END_SRC
+*** Prevent editing invisible text
+ The following setting prevents accidentally editing hidden text when
+ the point is inside a folded region.  This can happen if you are in
+ the body of a heading and globally fold the org-file with =S-TAB=
 
-#+BEGIN_SRC emacs-lisp
-(setq org-src-preserve-indentation nil)
-(setq org-edit-src-content-indentation 0)
-#+END_SRC
+ I find invisible edits (and undo's) hard to deal with so now I can't
+ edit invisible text.  =C-c C-r= (org-reveal) will display where the
+ point is if it is buried in invisible text to allow editing again.
 
+ #+BEGIN_SRC emacs-lisp
+ (setq org-catch-invisible-edits 'error)
+ #+END_SRC
 
-#+BEGIN_SRC emacs-lisp
-(setq org-attach-directory "~/org/data/")
-#+END_SRC
-#+BEGIN_SRC emacs-lisp
-(setq org-agenda-sticky t)
-#+END_SRC
+*** Whatever
+ #+BEGIN_SRC emacs-lisp
+ ;; disable the default org-mode stuck projects agenda view
+ (setq org-stuck-projects (quote ("" nil nil "")))
+
+ ; force showing the next headline.
+ (setq org-show-entry-below (quote ((default))))
+
+ (setq org-show-following-heading t)
+ (setq org-show-hierarchy-above t)
+ (setq org-show-siblings (quote ((default))))
+
+ (setq org-special-ctrl-a/e t)
+ (setq org-special-ctrl-k t)
+ (setq org-yank-adjusted-subtrees t)
+
+ (setq org-table-export-default-format "orgtbl-to-csv")
+
+ #+END_SRC
+
+ The following setting adds alphabetical lists like
+   ,a. item one
+   ,b. item two
+
+ #+BEGIN_SRC emacs-lisp
+ (if (> emacs-major-version 23)
+     (setq org-list-allow-alphabetical t)
+   (setq org-alphabetical-lists t))
+ #+END_SRC
+
+ #+BEGIN_SRC emacs-lisp
+ (setq org-remove-highlights-with-change nil)
+
+ (setq org-list-demote-modify-bullet (quote (("+" . "-")
+     ("*" . "-")
+     ("1." . "-")
+     ("1)" . "-"))))
+
+
+
+ (add-hook 'org-insert-heading-hook 'bh/insert-heading-inactive-timestamp 'append)
+
+
+ ; If we leave Emacs running overnight - reset the appointments one minute after midnight
+ (run-at-time "24:01" nil 'bh/org-agenda-to-appt)
+
+ #+END_SRC
+
+
+ #+BEGIN_SRC emacs-lisp
+ ;; Enable abbrev-mode
+ (add-hook 'org-mode-hook (lambda () (abbrev-mode 1)))
+ (setq org-startup-indented t)
+ (setq org-startup-folded t)
+ (setq org-cycle-separator-lines 0)
+ #+END_SRC
+
+ I find extra blank lines in lists and headings a bit of a nuisance.
+ To get a body after a list you need to include a blank line between
+ the list entry and the body -- and indent the body appropriately.
+ Most of my lists have no body detail so I like the look of collapsed
+ lists with no blank lines better.
+
+ The following setting prevents creating blank lines before headings
+ but allows list items to adapt to existing blank lines around the items:
+ #+BEGIN_SRC emacs-lisp
+ (setq org-blank-before-new-entry (quote ((heading)
+                                          (plain-list-item . auto))))
+ #+END_SRC
+
+ #+BEGIN_SRC emacs-lisp
+ (setq org-reverse-note-order nil)
+ (setq org-default-notes-file "~/notes.org")
+ #+END_SRC
+
+ Enforce task blocking. Tasks can't go done when there is any subtask
+ still open. Unless they have a property of =NOBLOCKING: t=
+ #+BEGIN_SRC emacs-lisp
+ (setq org-enforce-todo-checkbox-dependencies t)
+ (setq org-enforce-todo-dependencies t)
+ #+END_SRC
+
+ #+BEGIN_SRC emacs-lisp
+ (setq org-fast-tag-selection-single-key (quote expert))
+ (setq org-footnote-auto-adjust t)
+ (setq org-hide-block-startup t)
+ (setq org-icalendar-alarm-time 15)
+ (setq org-icalendar-combined-description "Ganneffs Org-mode calendar entries")
+ (setq org-icalendar-combined-name "\"Ganneffs OrgMode\"")
+ (setq org-icalendar-honor-noexport-tag t)
+ (setq org-icalendar-include-bbdb-anniversaries nil)
+ (setq org-icalendar-include-body 200)
+ (setq org-icalendar-include-todo nil)
+ (setq org-icalendar-store-UID t)
+ (setq org-icalendar-timezone "Europe/Berlin")
+ (setq org-insert-mode-line-in-empty-file t)
+ (setq org-log-done (quote note))
+ (setq org-log-into-drawer t)
+ (setq org-log-state-notes-insert-after-drawers nil)
+ (setq org-log-reschedule (quote time))
+ (setq org-log-states-order-reversed t)
+ (setq org-mobile-agendas (quote all))
+ (setq org-mobile-directory "/scpx:joerg@garibaldi.ganneff.de:/srv/www2.ganneff.de/htdocs/org/")
+ (setq org-mobile-inbox-for-pull "~/org/refile.org")
+ (setq org-remember-store-without-prompt t)
+ (setq org-return-follows-link t)
+ (setq org-reverse-note-order t)
+
+ ; regularly save our org-mode buffers
+ (run-at-time "00:59" 3600 'org-save-all-org-buffers)
+
+ (setq org-log-done t)
+
+ (setq org-enable-priority-commands t)
+ (setq org-default-priority ?E)
+ (setq org-lowest-priority ?E)
+
+
+ #+END_SRC
+
+ Speed commands enable single-letter commands in Org-mode files when
+ the point is at the beginning of a headline, or at the beginning of a
+ code block.
+
+ See the `=org-speed-commands-default=' variable for a list of the keys
+ and commands enabled at the beginning of headlines.  All code blocks
+ are available at the beginning of a code block, the following key
+ sequence =C-c C-v h= (bound to `=org-babel-describe-bindings=') will
+ display a list of the code blocks commands and their related keys.
+
+ #+BEGIN_SRC emacs-lisp
+ (setq org-use-speed-commands nil)
+ (setq org-speed-commands-user (quote (("0" . ignore)
+                                       ("1" . ignore)
+                                       ("2" . ignore)
+                                       ("3" . ignore)
+                                       ("4" . ignore)
+                                       ("5" . ignore)
+                                       ("6" . ignore)
+                                       ("7" . ignore)
+                                       ("8" . ignore)
+                                       ("9" . ignore)
+
+                                       ("a" . ignore)
+                                       ("d" . ignore)
+                                       ("h" . bh/hide-other)
+                                       ("i" progn
+                                        (forward-char 1)
+                                        (call-interactively 'org-insert-heading-respect-content))
+                                       ("k" . org-kill-note-or-show-branches)
+                                       ("l" . ignore)
+                                       ("m" . ignore)
+                                       ("q" . bh/show-org-agenda)
+                                       ("r" . ignore)
+                                       ("s" . org-save-all-org-buffers)
+                                       ("w" . org-refile)
+                                       ("x" . ignore)
+                                       ("y" . ignore)
+                                       ("z" . org-add-note)
+
+                                       ("A" . ignore)
+                                       ("B" . ignore)
+                                       ("E" . ignore)
+                                       ("F" . bh/restrict-to-file-or-follow)
+                                       ("G" . ignore)
+                                       ("H" . ignore)
+                                       ("J" . org-clock-goto)
+                                       ("K" . ignore)
+                                       ("L" . ignore)
+                                       ("M" . ignore)
+                                       ("N" . bh/narrow-to-org-subtree)
+                                       ("P" . bh/narrow-to-org-project)
+                                       ("Q" . ignore)
+                                       ("R" . ignore)
+                                       ("S" . ignore)
+                                       ("T" . bh/org-todo)
+                                       ("U" . bh/narrow-up-one-org-level)
+                                       ("V" . ignore)
+                                       ("W" . bh/widen)
+                                       ("X" . ignore)
+                                       ("Y" . ignore)
+                                       ("Z" . ignore))))
+
+ (add-hook 'org-agenda-mode-hook
+           (lambda ()
+             (define-key org-agenda-mode-map "q" 'bury-buffer))
+           'append)
+
+ (defvar bh/current-view-project nil)
+ (add-hook 'org-agenda-mode-hook
+           '(lambda () (org-defkey org-agenda-mode-map "V" 'bh/view-next-project))
+           'append)
+ #+END_SRC
+
+
+ The following displays the contents of code blocks in Org-mode files
+ using the major-mode of the code.  It also changes the behavior of
+ =TAB= to as if it were used in the appropriate major mode.  This means
+ that reading and editing code form inside of your Org-mode files is
+ much more like reading and editing of code using its major mode.
+
+ #+BEGIN_SRC emacs-lisp
+ (setq org-src-fontify-natively t)
+ (setq org-src-tab-acts-natively t)
+ #+END_SRC
+
+ #+BEGIN_SRC emacs-lisp
+ (setq org-src-preserve-indentation nil)
+ (setq org-edit-src-content-indentation 0)
+ #+END_SRC
+
+
+ #+BEGIN_SRC emacs-lisp
+ (setq org-attach-directory "~/org/data/")
+ #+END_SRC
+ #+BEGIN_SRC emacs-lisp
+ (setq org-agenda-sticky t)
+ #+END_SRC
 
 **** Checklist handling
-[2013-05-11 Sat 22:15]
+ [2013-05-11 Sat 22:15]
 
-#+BEGIN_SRC emacs-lisp
-(require 'org-checklist)
-#+END_SRC
+ #+BEGIN_SRC emacs-lisp
+ (require 'org-checklist)
+ #+END_SRC
 ** perl / cperl
-I like /cperl-mode/ a bit more than the default /perl-mode/, so set it
-up here to be used.
-#+BEGIN_SRC emacs-lisp
-(use-package cperl-mode
-  :commands cperl-mode
-  :config
-  (progn
-    (defalias 'perl-mode 'cperl-mode)
-    (add-auto-mode 'cperl-mode "\\.\\([pP][Llm]\\|al\\)\\'")
-    (add-auto-mode 'pod-mode   "\\.pod$")
-    (add-auto-mode 'tt-mode    "\\.tt$")
-    (add-to-list 'interpreter-mode-alist '("perl" . cperl-mode))
-    (add-to-list 'interpreter-mode-alist '("perl5" . cperl-mode))
-    (add-to-list 'interpreter-mode-alist '("miniperl" . cperl-mode))
-    (setq cperl-invalid-face nil)
-    (validate-setq cperl-close-paren-offset -4
-          cperl-continued-statement-offset 0
-          cperl-indent-level 4
-          cperl-indent-parens-as-block t
-          cperl-hairy t
-          cperl-electric-keywords t
-          cperl-electric-lbrace-space t
-          cperl-electric-parens nil
-          cperl-highlight-variables-indiscriminately t
-          cperl-imenu-addback t
-          cperl-invalid-face (quote underline)
-          cperl-lazy-help-time 5
-          cperl-scan-files-regexp "\\.\\([pP][Llm]\\|xs\\|cgi\\)$"
-          cperl-syntaxify-by-font-lock t
-          cperl-use-syntax-table-text-property-for-tags t)
-
-    ;; And have cperl mode give ElDoc a useful string
-    (defun my-cperl-eldoc-documentation-function ()
-      "Return meaningful doc string for `eldoc-mode'."
-      (car
-       (let ((cperl-message-on-help-error nil))
-         (cperl-get-help))))
-    (add-hook 'cperl-mode-hook
-              (lambda ()
-                (set (make-local-variable 'eldoc-documentation-function)
-                     'my-cperl-eldoc-documentation-function)
-                (eldoc-mode))))
-  )
-#+END_SRC
+ I like /cperl-mode/ a bit more than the default /perl-mode/, so set it
+ up here to be used.
+ #+BEGIN_SRC emacs-lisp
+ (use-package cperl-mode
+   :commands cperl-mode
+   :config
+   (progn
+     (defalias 'perl-mode 'cperl-mode)
+     (add-auto-mode 'cperl-mode "\\.\\([pP][Llm]\\|al\\)\\'")
+     (add-auto-mode 'pod-mode   "\\.pod$")
+     (add-auto-mode 'tt-mode    "\\.tt$")
+     (add-to-list 'interpreter-mode-alist '("perl" . cperl-mode))
+     (add-to-list 'interpreter-mode-alist '("perl5" . cperl-mode))
+     (add-to-list 'interpreter-mode-alist '("miniperl" . cperl-mode))
+     (setq cperl-invalid-face nil)
+     (validate-setq cperl-close-paren-offset -4
+           cperl-continued-statement-offset 0
+           cperl-indent-level 4
+           cperl-indent-parens-as-block t
+           cperl-hairy t
+           cperl-electric-keywords t
+           cperl-electric-lbrace-space t
+           cperl-electric-parens nil
+           cperl-highlight-variables-indiscriminately t
+           cperl-imenu-addback t
+           cperl-invalid-face (quote underline)
+           cperl-lazy-help-time 5
+           cperl-scan-files-regexp "\\.\\([pP][Llm]\\|xs\\|cgi\\)$"
+           cperl-syntaxify-by-font-lock t
+           cperl-use-syntax-table-text-property-for-tags t)
+
+     ;; And have cperl mode give ElDoc a useful string
+     (defun my-cperl-eldoc-documentation-function ()
+       "Return meaningful doc string for `eldoc-mode'."
+       (car
+        (let ((cperl-message-on-help-error nil))
+          (cperl-get-help))))
+     (add-hook 'cperl-mode-hook
+               (lambda ()
+                 (set (make-local-variable 'eldoc-documentation-function)
+                      'my-cperl-eldoc-documentation-function)
+                 (eldoc-mode))))
+   )
+ #+END_SRC
 ** proced
-[2016-11-01 Tue 17:57]
-#+BEGIN_SRC emacs-lisp
-(setq-default proced-auto-update-flag t)
-(setq-default proced-auto-update-interval 5)
-#+END_SRC
+ [2016-11-01 Tue 17:57]
+ #+BEGIN_SRC emacs-lisp
+ (setq-default proced-auto-update-flag t)
+ (setq-default proced-auto-update-interval 5)
+ #+END_SRC
 ** project explorer
 [2017-04-01 Sat 23:12]
-"s"        Change directory
-"j"        Next line
-"k"        Previous line
-"g"        Refresh
-"+"        Create file or directory (if the name ends with a slash)
-"-" & "d"  Delete file or directory
-"c"        Copy file or directory
-"r"        Rename file or directory
-"q"        Hide sidebar
-"u"        Go to parent directory
-"["        Previous sibling
-"]"        Next sibling
-"TAB"      Toggle folding. Unfold descendants with C-U
-"S-TAB"    Fold all. Unfold with C-U
-"RET"      Toggle folding of visit file. Specify window with C-U
-"f"        Visit file or directory. Specify window with C-U
-"w"        Show the path of file at point, and copy it to clipboard
-"M-k"      Launch ack-and-a-half, from the closest directory
-"M-l"      Filter using a regular expression. Call with C-u to disable
-"M-o"      Toggle omission of hidden and temporary files
-
-#+BEGIN_SRC emacs-lisp :tangle yes
-(use-package project-explorer
-  :ensure t
-  :bind ( "M-e" . project-explorer-toggle)
-  :config
-  (progn
-    (setq pe/cache-enabled t)
-    ))
-#+END_SRC
+ "s"        Change directory
+ "j"        Next line
+ "k"        Previous line
+ "g"        Refresh
+ "+"        Create file or directory (if the name ends with a slash)
+ "-" & "d"  Delete file or directory
+ "c"        Copy file or directory
+ "r"        Rename file or directory
+ "q"        Hide sidebar
+ "u"        Go to parent directory
+ "["        Previous sibling
+ "]"        Next sibling
+ "TAB"      Toggle folding. Unfold descendants with C-U
+ "S-TAB"    Fold all. Unfold with C-U
+ "RET"      Toggle folding of visit file. Specify window with C-U
+ "f"        Visit file or directory. Specify window with C-U
+ "w"        Show the path of file at point, and copy it to clipboard
+ "M-k"      Launch ack-and-a-half, from the closest directory
+ "M-l"      Filter using a regular expression. Call with C-u to disable
+ "M-o"      Toggle omission of hidden and temporary files
+
+ #+BEGIN_SRC emacs-lisp :tangle yes
+ (use-package project-explorer
+   :ensure t
+   :bind ( "M-e" . project-explorer-toggle)
+   :config
+   (progn
+     (setq pe/cache-enabled t)
+     ))
+ #+END_SRC
 ** projectile
-[2017-04-04 Di 10:44]
-Powerful project helper. See https://github.com/bbatsov/projectile/blob/master/doc/usage.md
-#+BEGIN_SRC emacs-lisp :tangle yes
-(use-package projectile
-  :ensure projectile
-  :commands (projectile-find-file projectile-switch-project)
-  :config
-  (progn
-    (projectile-mode)
-    (setq projectile-enable-caching t)
-    (use-package flx-ido
-      :ensure flx-ido
-      :config
-      (progn
-        (flx-ido-mode 1)
-        (setq ido-enable-flex-matching t)
-        (setq ido-use-faces nil)
-        ))
-    // See https://github.com/ericdanan/counsel-projectile
-    (use-package counsel-projectile
-      :ensure t
-      :config
-      (progn
-        (counsel-projectile-on))
-      )
-    )
-  )
-#+END_SRC
+ [2017-04-04 Di 10:44]
+ Powerful project helper. See https://github.com/bbatsov/projectile/blob/master/doc/usage.md
+ #+BEGIN_SRC emacs-lisp
+ (use-package projectile
+   :ensure projectile
+   :commands (projectile-find-file projectile-switch-project)
+   :config
+   (progn
+     (projectile-mode)
+     (setq projectile-enable-caching t)
+     (use-package flx-ido
+       :ensure flx-ido
+       :config
+       (progn
+         (flx-ido-mode 1)
+         (setq ido-enable-flex-matching t)
+         (setq ido-use-faces nil)
+         ))
+     ; See https://github.com/ericdanan/counsel-projectile
+     (use-package counsel-projectile
+       :ensure t
+       :config
+       (progn
+         (counsel-projectile-on))
+       )
+     )
+   )
+ #+END_SRC
 ** puppet
-[2014-05-22 Thu 00:05]
-#+BEGIN_SRC emacs-lisp
-(use-package puppet-mode
-  :ensure t
-  :mode ("\\.pp\\'" . puppet-mode)
-  :bind (:map puppet-mode-map
-              ("C-c C-a" . puppet-align-block)
-              ("C-c '" . puppet-toggle-string-quotes)
-              ("C-c <delete>" . puppet-clear-string)
-              ("C-c C-j" . imenu)
-              ("C-c M-a" . puppet-set-anchor)
-              ("C-c C-r" . puppet-create-require)
-