updates
[emacs.git] / .emacs.d / config / emacs.org
index 125d2fe..61d5706 100644 (file)
@@ -82,13 +82,15 @@ The Emacs Lisp Package Archive contains things I want.
 (when (> emacs-major-version 23)
   (require 'package)
   (setq package-user-dir (expand-file-name "elpa" jj-elisp-dir))
-  (dolist (source '(("melpa" . "http://melpa.milkbox.net/packages/")
-                    ("melpa-stable" . "http://melpa-stable.milkbox.net/packages/")
+  (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://tromey.com/elpa/")))
+                    ("elpa" . "http://elpa.gnu.org/packages/")
+))
     (add-to-list 'package-archives source t))
-  (package-initialize))
+  (package-initialize)
+)
 #+END_SRC
 
 ** Path settings
@@ -97,6 +99,9 @@ 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
 jj-elisp-dir and add them.
+
+Additionally I also ensure that files in there are recompiled, when
+neccessary.
 #+BEGIN_SRC emacs-lisp :tangle yes
 (dolist
     (project (directory-files jj-elisp-dir t "\\w+"))
@@ -104,26 +109,28 @@ jj-elisp-dir and add them.
     (if (string= project "emacs23")
         (when (version< emacs-version "24")
           (add-to-list 'load-path project))
-      (add-to-list 'load-path project))))
+      (add-to-list 'load-path project))
+    ;(byte-recompile-directory project 0)
+   ))
 #+END_SRC
 
 *** Info path
 Help emacs to find the info files
 #+BEGIN_SRC emacs-lisp :tangle no
-(setq Info-directory-list '("~/emacs/info"
-                            "/usr/local/share/info/"
-                            "/usr/local/info/"
-                            "/usr/local/gnu/info/"
-                            "/usr/local/gnu/lib/info/"
-                            "/usr/local/gnu/lib/emacs/info/"
-                            "/usr/local/emacs/info/"
-                            "/usr/local/lib/info/"
-                            "/usr/local/lib/emacs/info/"
-                            "/usr/share/info/emacs-23"
-                            "/usr/share/info/"
-                            "/usr/share/info/"))
+(setq Info-directory-list (cons jj-info-dir
+                                '("/usr/local/share/info/"
+                                  "/usr/local/info/"
+                                  "/usr/local/gnu/info/"
+                                  "/usr/local/gnu/lib/info/"
+                                  "/usr/local/gnu/lib/emacs/info/"
+                                  "/usr/local/emacs/info/"
+                                  "/usr/local/lib/info/"
+                                  "/usr/local/lib/emacs/info/"
+                                  "/usr/share/info/emacs-23"
+                                  "/usr/share/info/"
+                                  "/usr/share/info/")))
 (setq Info-default-directory-list
-      (cons "~/emacs/info" Info-default-directory-list))
+      (cons jj-info-dir Info-default-directory-list))
 #+END_SRC
 
 ** Interface related
@@ -304,12 +311,14 @@ Size indication lets me know how far I am in a buffer.
 And modeline-posn is great. It will hilight the column number in the
 modeline in red as soon as you are over the defined limit.
 
+
 #+BEGIN_SRC emacs-lisp :tangle yes
 (line-number-mode 1)
 (column-number-mode 1)
 (size-indication-mode 1)
 (display-time-mode 1)
 (setq display-time-day-and-date nil)
+(setq display-time-default-load-average nil)
 (setq display-time-24hr-format t)
 (setq modelinepos-column-limit 72)
 
@@ -347,7 +356,8 @@ character(s).
       (org-mode . "Ω")
       (org-indent-mode . "")
       (sh-mode . " Σ")
-      (nxhtml-mode . "nx"))
+      (nxhtml-mode . "nx")
+      (subword-mode . ""))
 
     "Alist for `clean-mode-line'.
 
@@ -399,7 +409,7 @@ Shell. zsh in my case.
 
 *** Emacs shell
 Basic settings for emacs integrated shell
-#+BEGIN_SRC emacs-lisp :tangle yes
+#+BEGIN_SRC emacs-lisp :tangle no
 (use-package eshell
   :defer t
   :init
@@ -419,7 +429,6 @@ Basic settings for emacs integrated shell
            (unintern 'eshell/su)
            (unintern 'eshell/sudo))))
     (add-hook 'eshell-first-time-mode-hook 'eshell-initialize)
-
     )
   :config
   (progn
@@ -529,25 +538,17 @@ In this day and age, UTF-8 is the way to go.
 (prefer-coding-system 'utf-8)
 (set-charset-priority 'unicode)
 (setq default-process-coding-system '(utf-8-unix . utf-8-unix))
+(when (display-graphic-p)
+  (setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING)))
 #+END_SRC
 
 *** Hilight matching parentheses
 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 :tangle yes
-(unless
-    (use-package mic-paren
-      :init
-      (paren-activate))
-
-  (use-package paren
-    :init
-    (progn
-      (show-paren-mode +1)
-      (setq show-paren-style 'parenthesis)
-      )
-    )
-  )
+(use-package mic-paren
+  :init
+  (paren-activate))
 #+END_SRC
 *** Kill other buffers
 While many editors allow you to close "all the other files, not the one
@@ -572,13 +573,11 @@ jump half-windows?
 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 :tangle yes
-(setq x-select-enable-primary t)
-(setq x-select-enable-clipboard t        ;; copy-paste should work ...
-  interprogram-paste-function            ;; ...with...
-  'x-cut-buffer-or-selection-value)      ;; ...other X clients
-
+(setq select-enable-primary t)
+(setq select-enable-clipboard nil)
+(setq interprogram-paste-function 'x-cut-buffer-or-selection-value)
+(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 :tangle yes
@@ -586,12 +585,36 @@ Disable /suspend_frame/ function, I dislike it.
 (unbind-key "C-x C-z")
 #+END_SRC
 
+http://endlessparentheses.com/kill-entire-line-with-prefix-argument.html?source=rss
+#+BEGIN_SRC emacs-lisp :tangle yes
+(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 yes
+#+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)
@@ -599,14 +622,13 @@ me. Lazyness++.
   (kill-line)
   (back-to-indentation))
 
-(unbind-key "C-z")
 (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 yes
+#+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")
@@ -805,6 +827,16 @@ Clean all whitespace stuff
 #+BEGIN_SRC emacs-lisp :tangle yes
 (bind-key "H-w" 'whitespace-cleanup)
 #+END_SRC
+
+Comment/Uncomment
+#+BEGIN_SRC emacs-lisp :tangle yes
+(bind-key "H-c" 'comment-dwim)
+#+END_SRC
+
+Show keystrokes in progress
+#+BEGIN_SRC emacs-lisp :tangle yes
+(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
@@ -814,11 +846,64 @@ disabling that.
 (unbind-key "<kp-insert>")
 #+END_SRC
 
-** Miscellaneous stuff
-Weeks start on Monday, not sunday.
+*** Easily navigate sillyCased words
+#+BEGIN_SRC emacs-lisp :tangle yes
+(global-subword-mode 1)
+#+END_SRC
+*** Delete file of current buffer, then kill buffer
+[2014-06-14 Sat 23:03]
 #+BEGIN_SRC emacs-lisp :tangle yes
-(setq calendar-week-start-day 1)
+(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 :tangle yes
+(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 :tangle yes
+(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 :tangle yes
+(bind-key "M-s o" 'occur-dwim)
 #+END_SRC
+** Miscellaneous stuff
 
 Searches and matches should ignore case.
 #+BEGIN_SRC emacs-lisp :tangle yes
@@ -937,7 +1022,6 @@ Restore removed var alias, used by ruby-electric-brace and others
 (unless (boundp 'last-command-char)
   (defvaralias 'last-command-char 'last-command-event))
 #+END_SRC
-
 * Customized variables
 :PROPERTIES:
 :ID: 0102208d-fdf6-4928-9e40-7e341bd3aa3a
@@ -979,7 +1063,6 @@ ways.
                 (add-hook 'expand-expand-hook 'indent-according-to-mode)
                 (add-hook 'expand-jump-hook 'indent-according-to-mode)))))
 #+END_SRC
-
 ** ace-jump-mode
 [2013-04-28 So 11:26]
 Quickly move around in buffers.
@@ -998,13 +1081,37 @@ Use H-w to switch windows
   :commands ace-window
   :bind ("H-w" . ace-window))
 #+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 yes
+(use-package aggressive-indent
+  :ensure aggressive-indent
+  :commands (aggressive-indent-mode global-aggressive-indent-mode)
+  :config
+  (progn
+    (global-aggressive-indent-mode 0)
+    (setq aggressive-indent-comments-too 0)
+    (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
+information in the mode-line in various search modes.
 #+BEGIN_SRC emacs-lisp :tangle yes
 (use-package anzu
   :ensure anzu
   :diminish anzu-mode
-  :init
+  :defer t
+  :idle
   (progn
     (global-anzu-mode 1))
   :config
@@ -1016,11 +1123,13 @@ Use H-w to switch windows
 [2014-05-21 Wed 00:33]
 #+BEGIN_SRC emacs-lisp :tangle yes
 (use-package ascii
-  :commands (ascii-on ascii-display ascii-toggle)
+  :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)))
@@ -1034,7 +1143,6 @@ Use H-w to switch windows
 (setq TeX-parse-self t)
 (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
@@ -1042,46 +1150,72 @@ 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 :tangle yes
-(use-package auto-complete
+(use-package auto-complete-config
   :ensure auto-complete
-  :init
-  (progn
-    (global-auto-complete-mode t)
-    )
+  :idle
+  (ac-config-default)
   :config
   (progn
-    (setq ac-comphist-file (expand-file-name "ac-comphist.dat" jj-cache-dir))
-
-    (setq ac-expand-on-auto-complete nil)
-    (setq ac-dwim t)
-    (setq ac-auto-start t)
-
-    ;;----------------------------------------------------------------------------
-    ;; Use Emacs' built-in TAB completion hooks to trigger AC (Emacs >= 23.2)
-    ;;----------------------------------------------------------------------------
-    (setq tab-always-indent 'complete)  ;; use 't when auto-complete is disabled
-    (add-to-list 'completion-styles 'initials t)
-
     ;; 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)
+
+    ;; custom keybindings to use tab, enter and up and down arrows
+    (bind-key "\t" 'ac-expand ac-complete-mode-map)
+    (bind-key "\r" 'ac-complete ac-complete-mode-map)
+    (bind-key "M-n" 'ac-next ac-complete-mode-map)
+    (bind-key "M-p" 'ac-previous ac-complete-mode-map)
+    (bind-key "C-s" 'ac-isearch ac-completing-map)
+    (bind-key "M-TAB" 'auto-complete ac-mode-map)
+
+    (setq ac-comphist-file (expand-file-name "ac-comphist.dat" jj-cache-dir))
+    (setq ac-use-comphist t)
+    (setq ac-expand-on-auto-complete nil)
+    (setq ac-dwim t)
+    (setq ac-auto-start 3)
+    (setq ac-delay 0.3)
+    (setq ac-menu-height 15)
+    (setq ac-quick-help-delay 0.5)
+    (setq ac-use-fuzzy t)
+
+    (ac-flyspell-workaround)
+
+    ;; use 't when auto-complete is disabled
+    (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)
 
-    ;(require 'ac-dabbrev)
+    ;; 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))
+    ;               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
@@ -1090,28 +1224,11 @@ already had typed.
                                         js3-mode css-mode less-css-mode sql-mode ielm-mode))
       (add-to-list 'ac-modes mode))
 
-;; Exclude very large buffers from dabbrev
-    (defun sanityinc/dabbrev-friend-buffer (other-buffer)
-      (< (buffer-size other-buffer) (* 1 1024 1024)))
-
-    (setq dabbrev-friend-buffer-function 'sanityinc/dabbrev-friend-buffer)
-
-
-;; custom keybindings to use tab, enter and up and down arrows
-(bind-key "\t" 'ac-expand ac-complete-mode-map)
-(bind-key "\r" 'ac-complete ac-complete-mode-map)
-(bind-key "M-n" 'ac-next ac-complete-mode-map)
-(bind-key "M-p" 'ac-previous ac-complete-mode-map)
-(bind-key "M-TAB" 'auto-complete ac-mode-map)
+    (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)))
 
-(setq auto-completion-syntax-alist (quote (global accept . word))) ;; Use space and punctuation to accept the current the most likely completion.
-(setq auto-completion-min-chars (quote (global . 3))) ;; Avoid completion for short trivial words.
-(setq completion-use-dynamic t)
-
-(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
@@ -1121,7 +1238,7 @@ with it. Not to have to revert buffers myself
 (use-package autorevert
   :commands auto-revert-mode
   :diminish auto-revert-mode
-  :init
+  :idle
   (progn
     (setq global-auto-revert-mode t)
     (setq global-auto-revert-non-file-buffers t)
@@ -1143,10 +1260,10 @@ where =temporary-file-directory= is not inside my home).
   :init
   (progn
     (setq backup-directory jj-backup-directory)
-    (setq tramp-backup-directory (concat jj-backup-directory "/tramp"))
-    (if (not (file-exists-p tramp-backup-directory))
-        (make-directory tramp-backup-directory))
-    (setq tramp-backup-directory-alist `((".*" . ,tramp-backup-directory)))
+    ;(setq tramp-backup-directory (concat jj-backup-directory "/tramp"))
+    ;(if (not (file-exists-p tramp-backup-directory))
+    ;    (make-directory tramp-backup-directory))
+    ;(setq tramp-backup-directory-alist `((".*" . ,tramp-backup-directory)))
     (setq backup-directory-alist `(("." . ,jj-backup-directory)))
     (setq auto-save-list-file-prefix (concat jj-backup-directory ".auto-saves-"))
     (setq auto-save-file-name-transforms `((".*" ,jj-backup-directory t)))
@@ -1193,6 +1310,43 @@ are saved automatically when they are killed"
                       (member method '("su" "sudo"))))))))))
 
 #+END_SRC
+** browse-kill-ring
+[2014-12-11 Thu 11:31]
+#+BEGIN_SRC emacs-lisp :tangle yes
+(use-package browse-kill-ring
+  :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 yes
+(use-package cal
+  :commands (cal/insert)
+  :bind ("C-c c" . cal/insert)
+  :config
+  (progn
+    ; Weeks start on Monday, not sunday.
+    (setq calendar-week-start-day 1)
+
+    ; 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)
+    (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)
+    (setq calendar-intermonth-header
+          (propertize "Wk"                  ; or e.g. "KW" in Germany
+                      'font-lock-face 'calendar-iso-week-header-face))))
+
+#+END_SRC
+
 ** crontab-mode
 [2013-05-21 Tue 23:18]
 #+BEGIN_SRC emacs-lisp :tangle yes
@@ -1266,15 +1420,14 @@ movement keys.
 
 
 ** dired & co
-I like dired and work a lot with it, but it tends to leave lots of
-windows around.
-dired-single to the rescue.
 #+BEGIN_SRC emacs-lisp :tangle yes
 (use-package dired
   :commands (dired dired-other-window dired-other-frame dired-noselect
                    dired-mode dired-jump)
+  :defines (dired-omit-regexp-orig)
   :init
-  (progn)
+  (progn
+    (setq diredp-hide-details-initially-flag nil))
   :config
   (progn
     (setq dired-auto-revert-buffer (quote dired-directory-changed-p))
@@ -1282,6 +1435,7 @@ dired-single to the rescue.
     (setq dired-listing-switches "-alh")
     (setq dired-recursive-copies (quote top))
     (setq dired-recursive-deletes (quote top))
+    (bind-key "F" 'find-name-dired dired-mode-map)
 
     (defvar mark-files-cache (make-hash-table :test #'equal))
 
@@ -1298,10 +1452,18 @@ dired-single to the rescue.
       (dired-mark-sexp '(mark-similar-versions name)))
 
     (use-package dired+
-      :ensure dired+
-      :init
-      (progn
-        (setq diredp-hide-details-initially-flag nil)))
+      :ensure dired+)
+
+    (use-package dired-x)
+    (setq dired-guess-shell-alist-user
+          '(("\\.pdf\\'" "mupdf" "evince")
+            ("\\.\\(?: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
@@ -1311,7 +1473,7 @@ dired-single to the rescue.
         (bind-key "<mouse-1>" 'dired-single-buffer-mouse dired-mode-map)
         (bind-key "^"
                   (function
-                   (lambda nil (interactive) (dired-single-buffer ".."))) dired-mode-map )))
+           (lambda nil (interactive) (dired-single-buffer ".."))) dired-mode-map )))
 
     (use-package wdired
       :ensure wdired
@@ -1394,7 +1556,23 @@ dired-single to the rescue.
                                   nil nil "/")))
       (dired first-dir)
       (dired-other-window second-dir))
-    (bind-key "C-c J" 'dired-double-jump)))
+    (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
@@ -1403,6 +1581,7 @@ Discover key bindings and their meaning for the current Emacs major mode.
 #+BEGIN_SRC emacs-lisp :tangle yes
 (use-package discover-my-major
   :ensure discover-my-major
+  :commands discover-my-major
   :bind ("C-h C-m" . discover-my-major))
 #+END_SRC
 ** easypg
@@ -1430,14 +1609,13 @@ Bookmark: [[http://www.emacswiki.org/emacs/EasyPG][EmacsWiki: Easy PG]]
 ** ediff
 [2013-04-21 So 20:36]
 ediff - don't start another frame
-#+BEGIN_SRC elisp
+#+BEGIN_SRC emacs-lisp :tangle yes
 (use-package ediff
   :pre-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)
@@ -1449,7 +1627,12 @@ ediff - don't start another frame
          ("C-. = p" . ediff-patch-file)
          ("C-. = P" . ediff-patch-buffer)
          ("C-. = l" . ediff-regions-linewise)
-         ("C-. = w" . ediff-regions-wordwise)))
+         ("C-. = w" . ediff-regions-wordwise))
+  :config (progn
+            (setq ediff-window-setup-function 'ediff-setup-windows-plain)
+            (setq ediff-split-window-function 'split-window-horizontally)
+            )
+)
 #+END_SRC
 ** emms
 EMMS is the Emacs Multimedia System.
@@ -1626,7 +1809,8 @@ Proper whitespace handling
 #+BEGIN_SRC emacs-lisp :tangle yes
 (use-package expand-region
   :ensure expand-region
-  :bind ("C-M-+" . er/expand-region))
+  :bind ("C-M-+" . er/expand-region)
+  :commands er/expand-region)
 #+END_SRC
 ** filladapt
 [2013-05-02 Thu 00:04]
@@ -1636,7 +1820,7 @@ bullet points like “1.” or “*”.
 #+BEGIN_SRC emacs-lisp :tangle yes
 (use-package filladapt
   :diminish filladapt-mode
-  :init
+  :idle
   (setq-default filladapt-mode t))
 #+END_SRC
 ** flycheck
@@ -1650,7 +1834,7 @@ understand for me.
   :diminish flycheck-mode
   :bind (("M-n" . next-error)
          ("M-p" . previous-error))
-  :init
+  :idle
   (progn
     (add-hook 'find-file-hook
           (lambda ()
@@ -1703,7 +1887,7 @@ And I want to have it everywhere.
          ("C-x s" . git-gutter+-stage-hunks)
          ("C-x c" . git-gutter+-commit)
          )
-  :init
+  :idle
   (progn
     (setq git-gutter+-disabled-modes '(org-mode))
     (global-git-gutter+-mode 1))
@@ -1718,6 +1902,29 @@ And I want to have it everywhere.
         ))))
 
 #+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 :tangle yes
+(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-commit-mode)
+    (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 :tangle yes
+(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.
@@ -1727,6 +1934,59 @@ what I want every emacs to know.
   (jj-init-theme)
 )
 #+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 :tangle yes
+(use-package golden-ratio
+  :ensure golden-ratio
+  :diminish golden-ratio-mode
+  :init
+  (progn
+    (golden-ratio-mode 1)
+    (setq golden-ratio-exclude-buffer-names '("*LV*" "*guide-key*"))
+    (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 :tangle yes
+(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 :tangle yes
+(use-package guide-key
+  :ensure guide-key
+  :diminish guide-key-mode
+  :init
+  (progn
+    (setq guide-key/guide-key-sequence '("C-x" "C-c" "M-g"))
+    (guide-key-mode 1)
+    (setq guide-key/recursive-key-sequence-flag t)
+    (setq guide-key/popup-window-position 'bottom)
+    (setq guide-key/idle-delay 0.5)))
+
+#+END_SRC
 
 ** highlight mode
 [2014-05-21 Wed 23:51]
@@ -1746,6 +2006,7 @@ tries to expand it in various ways.
 #+BEGIN_SRC emacs-lisp :tangle yes
 (use-package hippie-exp
   :bind ("M-/" . hippie-expand)
+  :commands hippie-expand
   :config
   (progn
     (setq hippie-expand-try-functions-list '(try-expand-dabbrev
@@ -1768,7 +2029,82 @@ Replaced by web-mode [[*web-mode][web-mode]]
 (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 :tangle yes
+(use-package hydra
+  :ensure hydra
+  :init
+  (progn
+    (setq hydra-is-helpful t)
+    (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-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 :tangle yes
@@ -1779,8 +2115,19 @@ Replaced by web-mode [[*web-mode][web-mode]]
          ("<XF86WebCam>" . ibuffer)
          )
   :commands (ibuffer)
-  :init
+  :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 " • ")
+    (setq ibuffer-filter-group-name-face 'variable-pitch
+          ibuffer-use-header-line t
+          ibuffer-old-time 12)
+    (unbind-key "M-o" ibuffer-mode-map)
+    (bind-key "s" 'isearch-forward-regexp ibuffer-mode-map)
+    (bind-key "." 'ibuffer-invert-sorting ibuffer-mode-map)
+
     (use-package ibuffer-vc
       :ensure t
       :commands
@@ -1797,16 +2144,7 @@ Replaced by web-mode [[*web-mode][web-mode]]
         ad-do-it
         (ibuffer-update nil t)
         (unless (string= recent-buffer-name "*Ibuffer*")
-          (ibuffer-jump-to-buffer recent-buffer-name)))))
-  :config
-  (progn
-    (defvar my-ibufffer-separator " • ")
-    (setq ibuffer-filter-group-name-face 'variable-pitch
-          ibuffer-use-header-line t
-          ibuffer-old-time 12)
-    (unbind-key "M-o" ibuffer-mode-map)
-    (bind-key "s" 'isearch-forward-regexp ibuffer-mode-map)
-    (bind-key "." 'ibuffer-invert-sorting ibuffer-mode-map)
+          (ibuffer-jump-to-buffer recent-buffer-name))))
 
     (defun ibuffer-magit-status ()
       (interactive)
@@ -1831,7 +2169,7 @@ Replaced by web-mode [[*web-mode][web-mode]]
            (-flatten
             (--map
              (list
-              (cons  (f-slash (f-expand (cdr it))) er-separator)
+              (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/")
@@ -2093,7 +2431,7 @@ list of matching commands is echoed
 #+BEGIN_SRC emacs-lisp :tangle yes
 (use-package info
   :bind ("C-h C-i" . info-lookup-symbol)
-
+  :commands info-lookup-symbol
   :config
   (progn
     ;; (defadvice info-setup (after load-info+ activate)
@@ -2130,12 +2468,20 @@ gnus, so we have a list of modes where we don't want to see it.
       (unless (member major-mode linum-mode-inhibit-modes-list)
         ad-do-it))
 
-    (ad-activate 'linum-on))
+    (ad-activate 'linum-on)
+
+    (use-package linum-relative
+      :ensure linum-relative
+      :init
+      (progn
+        (setq linum-format 'dynamic)
+        )))
   :init
   (global-linum-mode 1))
 #+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...
@@ -2173,7 +2519,6 @@ then I like it nice too...
 (after "eldoc"
   '(diminish 'eldoc-mode))
 #+END_SRC
-
 ** magit
 [2013-04-21 So 20:48]
 magit is a mode for interacting with git.
@@ -2194,13 +2539,16 @@ magit is a mode for interacting with git.
                             )
           magit-repo-dirs-depth 4
           magit-log-auto-more t)
+
     (use-package magit-blame
-      :commands magit-blame-mode)
+      :commands magit-blame-mode
+      :defer t)
 
     (use-package magit-svn
       :ensure magit-svn
       :commands (magit-svn-mode
-                 turn-on-magit-svn))
+                 turn-on-magit-svn)
+      :defer t)
 
     (add-hook 'magit-mode-hook 'hl-line-mode)
     (defun magit-status-with-prefix ()
@@ -2227,6 +2575,19 @@ magit is a mode for interacting with git.
               #'(lambda ()
                   (set-fill-column 72)
                   (flyspell-mode)))
+
+    (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)
     ))
 #+END_SRC
 ** markdown-mode
@@ -2239,8 +2600,10 @@ magit is a mode for interacting with git.
 #+END_SRC
 ** message
 #+BEGIN_SRC emacs-lisp :tangle yes
-(require 'message)
-(setq message-kill-buffer-on-exit t)
+(use-package message
+  :idle
+  (progn
+    (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.
@@ -2266,6 +2629,7 @@ Edit minibuffer in a full (text-mode) buffer by pressing *M-C-e*.
 #+BEGIN_SRC emacs-lisp :tangle yes
 (use-package miniedit
   :ensure miniedit
+  :commands miniedit
   :config
   (progn
     (bind-key "M-C-e" 'miniedit minibuffer-local-map)
@@ -2275,11 +2639,12 @@ Edit minibuffer in a full (text-mode) buffer by pressing *M-C-e*.
   ))
 #+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 yes
+#+BEGIN_SRC emacs-lisp :tangle no
 (use-package mmm-auto
   :ensure mmm-mode
   :init
@@ -2318,7 +2683,6 @@ coexist in one buffer.
 ** 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 :tangle yes
 (use-package mo-git-blame
   :ensure mo-git-blame
@@ -2341,10 +2705,15 @@ Use multiple cursors mode. See [[http://emacsrocks.com/e13.html][Emacs Rocks! mu
              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 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)
@@ -2354,6 +2723,24 @@ Use multiple cursors mode. See [[http://emacsrocks.com/e13.html][Emacs Rocks! mu
     (bind-key "m" 'mc/mark-more-like-this-extended region-bindings-mode-map)
     (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 :tangle yes
+(use-package neotree
+  :ensure neotree
+  :defer t
+  :bind (("<f8>" . neotree-toggle))
+  :commands (neotree-find
+             neotree-toggle
+             neotree)
+  :idle
+  (progn
+    (setq neo-smart-open t))
+  :config
+  (progn
+    (bind-key "^" 'neotree-select-up-node neotree-mode-map)))
+#+END_SRC
 ** nxml
 [2013-05-22 Wed 22:02]
 nxml-mode is a major mode for editing XML.
@@ -2572,7 +2959,7 @@ And now a largish set of keybindings...
 (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 "<f8>"      'org-cycle-agenda-files)
 
 (bind-key "<f9> <f9>" 'bh/show-org-agenda)
 (bind-key "<f9> b"    'bbdb)
@@ -2604,7 +2991,7 @@ And now a largish set of keybindings...
 (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)
+;(bind-key "C-k" 'jj-org-kill-line org-mode-map)
 
 #+END_SRC
 
@@ -3346,7 +3733,7 @@ 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 :tangle yes :tangle yes
-(setq org-use-speed-commands t)
+(setq org-use-speed-commands nil)
 (setq org-speed-commands-user (quote (("0" . ignore)
                                       ("1" . ignore)
                                       ("2" . ignore)
@@ -3409,6 +3796,7 @@ display a list of the code blocks commands and their related keys.
           '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
@@ -3446,7 +3834,7 @@ up here to be used.
 #+BEGIN_SRC emacs-lisp :tangle yes
 (use-package cperl-mode
   :commands cperl-mode
-  :init
+  :idle
   (progn
     (defalias 'perl-mode 'cperl-mode)
     (add-auto-mode 'cperl-mode "\\.\\([pP][Llm]\\|al\\)\\'")
@@ -3493,15 +3881,19 @@ up here to be used.
 #+BEGIN_SRC emacs-lisp :tangle yes
 (use-package puppet-mode
   :mode ("\\.pp\\'" . puppet-mode)
-  :config
-  (use-package puppet-ext
-  :init
+  :commands puppet-mode
+  :idle
   (progn
-    (bind-key "C-x ?" 'puppet-set-anchor puppet-mode-map)
-    (bind-key "C-c C-r" 'puppet-create-require puppet-mode-map)
     (defun my-puppet-mode-hook ()
       (setq require-final-newline nil))
-    (add-hook 'puppet-mode-hook 'my-puppet-mode-hook))))
+    (add-hook 'puppet-mode-hook 'my-puppet-mode-hook))
+  :config
+  (progn
+    (use-package puppet-ext
+      :init
+      (progn
+        (bind-key "C-x ?" 'puppet-set-anchor puppet-mode-map)
+        (bind-key "C-c C-r" 'puppet-create-require puppet-mode-map)))))
 #+END_SRC
 
 ** python
@@ -3510,7 +3902,7 @@ various variables. Elpy author may like them, but I'm not him...
 #+BEGIN_SRC emacs-lisp :tangle yes
 (use-package elpy
   :defer t
-  :mode ("\.py" . elpy-mode)
+  :mode ("\.py" . python-mode)
   :init
   (progn
     (safe-load (concat jj-elisp-dir "/elpy/elpy-autoloads.el"))
@@ -3550,6 +3942,11 @@ various variables. Elpy author may like them, but I'm not him...
     ;; is disabled, which can cause some confusion.
     (add-hook 'python-mode-hook 'elpy-initialize-local-variables)
 
+    (defun my-python-mode-hook ()
+      (setq require-final-newline nil)
+      (setq mode-require-final-newline))
+    (add-hook 'python-mode-hook 'my-python-mode-hook)
+
     ;; Flymake support using flake8, including warning faces.
     (when (and (executable-find "flake8")
                (not (executable-find python-check-command)))
@@ -3661,13 +4058,15 @@ and tell which statements are at the same depth.
 #+BEGIN_SRC emacs-lisp :tangle yes
 (use-package rainbow-delimiters
   :ensure rainbow-delimiters
+  :commands rainbow-delimiters-mode
   :init
-  (global-rainbow-delimiters-mode))
+  (add-hook 'prog-mode-hook #'rainbow-delimiters-mode))
 #+END_SRC
 ** rainbow-mode
 #+BEGIN_SRC emacs-lisp :tangle yes
 (use-package rainbow-mode
   :ensure rainbow-mode
+  :defer t
   :diminish rainbow-mode)
 #+END_SRC
 
@@ -3675,7 +4074,7 @@ and tell which statements are at the same depth.
 Saner regex syntax
 #+BEGIN_SRC emacs-lisp :tangle yes
 (use-package re-builder
-  :command re-builder
+  :commands re-builder
   :defer t
   :config
   (setq reb-re-syntax 'string))
@@ -3884,7 +4283,18 @@ Store at which point I have been in files.
 (require 'saveplace)
 (setq save-place-file (expand-file-name "saved-places" jj-cache-dir))
 #+END_SRC
-
+** simple-httpd
+[2014-06-10 Tue 22:05]
+#+BEGIN_SRC emacs-lisp :tangle yes
+(use-package simple-httpd
+  :ensure simple-httpd
+  :commands (httpd-start httpd-stop)
+  :config
+  (progn
+    (setq httpd-root "/srv/www")
+    )
+)
+#+END_SRC
 ** sh
 Settings for shell scripts
 #+BEGIN_SRC emacs-lisp :tangle yes
@@ -3909,6 +4319,15 @@ Settings for shell scripts
 (use-package sh-toggle
   :bind ("C-. C-z" . shell-toggle))
 #+END_SRC
+** smartscan
+[2015-02-24 Tue 23:35]
+Make =M-n= and =M-p= go forward/backword to the symbol at point.
+#+BEGIN_SRC emacs-lisp :tangle yes
+(use-package smartscan
+  :ensure smartscan
+  :defer t
+  :idle (global-smartscan-mode t))
+#+END_SRC
 ** timestamp
 By default, Emacs can update the time stamp for the following two
 formats if one exists in the first 8 lines of the file.
@@ -3917,7 +4336,7 @@ formats if one exists in the first 8 lines of the file.
 #+BEGIN_SRC emacs-lisp :tangle yes
 (use-package time-stamp
   :commands time-stamp
-  :init
+  :idle
   (progn
     (add-hook 'write-file-hooks 'time-stamp)
     (setq time-stamp-active t))
@@ -3959,8 +4378,7 @@ Transparent Remote (file) Access, Multiple Protocol, remote file editing.
   (progn
     (setq tramp-persistency-file-name (expand-file-name "tramp" jj-cache-dir))
     (setq shell-prompt-pattern "^[^a-zA-Z].*[#$%>] *")
-    (add-to-list 'tramp-default-method-alist '("\\`localhost\\'" "\\`root\\'" "su")
-                 )
+    (add-to-list 'tramp-default-method-alist '("\\`localhost\\'" "\\`root\\'" "su"))
     (setq tramp-debug-buffer nil)
     (setq tramp-default-method "sshx")
     (tramp-set-completion-function "ssh"
@@ -3975,6 +4393,9 @@ For some reason I prefer this mode more than the way without. I want to
 see the marked region.
 #+BEGIN_SRC emacs-lisp :tangle yes
 (transient-mark-mode 1)
+(make-variable-buffer-local 'transient-mark-mode)
+(put 'transient-mark-mode 'permanent-local t)
+(setq-default transient-mark-mode t)
 #+END_SRC
 ** undo-tree
 [2013-04-21 So 11:07]
@@ -3986,26 +4407,23 @@ keeping the full power of emacs undo/redo.
 #+BEGIN_SRC emacs-lisp :tangle yes
 (use-package undo-tree
   :ensure undo-tree
+  :diminish undo-tree-mode
   :init
-  (global-undo-tree-mode)
-  :diminish undo-tree-mode)
-#+END_SRC
-
-Additionally I would like to keep the region active should I undo
-while I have one.
-
-#+BEGIN_SRC emacs-lisp :tangle yes
-;; Keep region when undoing in region
-(defadvice undo-tree-undo (around keep-region activate)
-  (if (use-region-p)
-      (let ((m (set-marker (make-marker) (mark)))
-            (p (set-marker (make-marker) (point))))
-        ad-do-it
-        (goto-char p)
-        (set-mark m)
-        (set-marker p nil)
-        (set-marker m nil))
-    ad-do-it))
+  (progn
+    (global-undo-tree-mode)
+    (setq undo-tree-visualizer-timestamps t)
+    (setq undo-tree-visualizer-diff t)
+    ;; Keep region when undoing in region
+    (defadvice undo-tree-undo (around keep-region activate)
+      (if (use-region-p)
+          (let ((m (set-marker (make-marker) (mark)))
+                (p (set-marker (make-marker) (point))))
+            ad-do-it
+            (goto-char p)
+            (set-mark m)
+            (set-marker p nil)
+            (set-marker m nil))
+        ad-do-it))))
 #+END_SRC
 ** uniquify
 Always have unique buffernames. See [[http://www.gnu.org/software/emacs/manual/html_node/emacs/Uniquify.html][Uniquify - GNU Emacs Manual]]
@@ -4047,10 +4465,22 @@ your operation actually changed in the buffer.
 #+BEGIN_SRC emacs-lisp :tangle yes
 (use-package volatile-highlights
   :ensure volatile-highlights
-  :init
+  :idle
   (volatile-highlights-mode t)
   :diminish volatile-highlights-mode)
 #+END_SRC
+** winner mode - undo and redo window configuration
+[2015-02-24 Tue 23:11]
+=winner-mode= lets you use =C-c <left>= and =C-c <right>= to switch between
+window configurations. This is handy when something has popped up a
+buffer that you want to look at briefly before returning to whatever
+you were working on. When you're done, press =C-c <left>=.
+#+BEGIN_SRC emacs-lisp :tangle yes
+(use-package winner
+  :ensure t
+  :defer t
+  :idle (winner-mode 1))
+#+END_SRC
 ** writegood
 This highlights some /weaselwords/, a mode to /aid in finding common
 writing problems/...
@@ -4067,6 +4497,7 @@ writing problems/...
 #+BEGIN_SRC emacs-lisp :tangle yes
 (use-package web-mode
   :ensure web-mode
+  :defer t
   :mode (("\\.phtml\\'" . web-mode)
          ("\\.tpl\\.php\\'" . web-mode)
          ("\\.jsp\\'" . web-mode)
@@ -4085,7 +4516,18 @@ writing problems/...
                 (setq web-mode-code-indent-offset 2)
                 (setq web-mode-enable-css-colorization t)
                 (setq web-mode-enable-comment-keywords t)
-                (setq web-mode-enable-current-element-highlight t)))))
+                (setq web-mode-enable-current-element-highlight t))))
+  :config
+  (progn
+    (setq web-mode-enable-current-element-highlight t)
+    (setq web-mode-ac-sources-alist
+          '(("css" . (ac-source-css-property))
+            ("html" . (ac-source-words-in-buffer ac-source-abbrev))))
+    (use-package impatient-mode
+      :ensure impatient-mode
+      :defer t
+      :commands impatient-mode))
+  )
 
 #+END_SRC
 ** yafolding
@@ -4106,7 +4548,6 @@ readable/editable without getting a big headache.
 #+BEGIN_SRC emacs-lisp :tangle yes
 (use-package yaml-mode
   :ensure yaml-mode
-
   :mode ("\\.ya?ml\\'" . yaml-mode)
   :config
     (bind-key "C-m" 'newline-and-indent yaml-mode-map ))
@@ -4120,12 +4561,17 @@ whatever the snippet holds.
 (setq yas-snippet-dirs (expand-file-name "yasnippet/snippets" jj-elisp-dir))
 (use-package yasnippet
   :ensure yasnippet
-  :init
+  :defer t
+  :diminish yas-minor-mode
+  :commands yas-global-mode
+  :idle
   (progn
-    (yas-global-mode 1)
     ;; Integrate hippie-expand with ya-snippet
     (add-to-list 'hippie-expand-try-functions-list
                  'yas-hippie-try-expand)
+    (yas-global-mode 1)
+    (setq yas-expand-only-for-last-commands '(self-insert-command))
+    (bind-key "\t" 'hippie-expand yas-minor-mode-map)
     ))
 #+END_SRC
 * Thats it