mmm-mode, crontab-mode, various
[emacs.git] / .emacs.d / config / emacs.org
index dc2865d..e2aeb09 100644 (file)
@@ -15,7 +15,7 @@ them first.
 
 safe-load does not break emacs initialization, should a file be
 unreadable while emacs boots up.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
   (defvar safe-load-error-list ""
           "*List of files that reported errors when loaded via safe-load")
   
@@ -39,7 +39,7 @@ unreadable while emacs boots up.
 #+END_SRC
 
 match-paren will either jump to the "other" paren or simply insert %
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (defun match-paren (arg)
   "Go to the matching parenthesis if on parenthesis otherwise insert %."
   (interactive "p")
@@ -51,14 +51,14 @@ match-paren will either jump to the "other" paren or simply insert %
 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (load-file (concat jj-elisp-dir "/tiny/loaddefs.el"))
 (load-file (concat jj-elisp-local-dir "/loaddefs.el"))
 #+END_SRC
 
 
 Always ensure to have a scratch buffer around.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (save-excursion
     (set-buffer (get-buffer-create "*scratch*"))
     (lisp-interaction-mode)
@@ -66,8 +66,17 @@ Always ensure to have a scratch buffer around.
     (add-hook 'kill-buffer-query-functions 'kill-scratch-buffer))
 #+END_SRC
 
+Handier way to add modes to auto-mode-alist
+#+BEGIN_SRC emacs-lisp tangle:yes
+(defun add-auto-mode (mode &rest patterns)
+  "Add entries to `auto-mode-alist' to use `MODE' for all given file `PATTERNS'."
+  (dolist (pattern patterns)
+    (add-to-list 'auto-mode-alist (cons pattern mode))))
+#+END_SRC
+
+
 Helpers for the config
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (require 'use-package)
 (require 'bind-key)
 #+END_SRC
@@ -80,10 +89,10 @@ that is already done in =init.el=.
 
 I also disliked the repeated /add-to-list/ lines, so I now just have
 one variable and go over that in a loop.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (defvar jj-elisp-subdirs '(local gnus icicle org/contrib tiny mo-git-blame cedet
                            cedet/eieio ecb jdee/lisp sunrise multiple-cursors
-                           auto-complete yasnippet magit)
+                           auto-complete yasnippet magit mmm)
   "List of subdirectories in jj-elisp-dir to add to load-path")
 
 (let (dirval)
@@ -100,7 +109,7 @@ one variable and go over that in a loop.
 
 *** Info path
 Help emacs to find the info files
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq Info-directory-list '("~/emacs/info"
                             "/usr/local/share/info/"
                             "/usr/local/info/"
@@ -123,34 +132,34 @@ Help emacs to find the info files
 :ID: 0a1560d9-7e55-47ab-be52-b3a8b8eea4aa
 :END:
 I dislike the startup message
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq inhibit-splash-screen t)
 (setq inhibit-startup-message t)
 #+END_SRC
 
 Usually I want the lines to break at 72 characters.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (if (> emacs-major-version 22)
     (setq fill-column 72)
   (setq default-fill-column 72))
 #+END_SRC
 
 And it is nice to have a final newline in files.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq require-final-newline t)
 #+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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq auto-save-interval 300)
 (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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq user-full-name "Joerg Jaspert")
 (setq user-mail-address "joerg@ganneff.de")
 (setq mail-user-agent (quote gnus-user-agent))
@@ -159,19 +168,19 @@ it later. Also, I am using gnus.
 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq smtpmail-default-smtp-server "localhost")
 (setq smtpmail-smtp-server "localhost")
 #+END_SRC
 
 Enable automatic handling of compressed files.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (put 'narrow-to-region 'disabled nil)
 (put 'narrow-to-page 'disabled nil)
 (put 'narrow-to-defun 'disabled nil)
@@ -182,7 +191,7 @@ for new users. Enable them.
 *** 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (if (> emacs-major-version 22)
     (set-frame-font "Inconsolata-14")
   (set-default-font "Inconsolata-14"))
@@ -190,7 +199,7 @@ most for my shells, in Emacs Inconsolata clearly wins.
 
 I always use dark backgrounds, so tell Emacs about it. No need to
 guess around.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq-default frame-background-mode 'dark)
 #+END_SRC
 
@@ -199,7 +208,7 @@ 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (if (boundp 'custom-theme-load-path)
     (progn
       (defun jj-init-theme ()
@@ -218,20 +227,24 @@ shell. Consistent look is great.
 #+END_SRC
 
 Make the fringe (gutter) smaller, the argument is a width in pixels (the default is 8)
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (if (fboundp 'fringe-mode)
     (fringe-mode 4))
 #+END_SRC
 
+A bit more spacing between buffer lines
+#+BEGIN_SRC emacs-lisp tangle:yes
+(setq-default line-spacing 0.1)
+#+END_SRC
 *** Cursor changes
 [2013-04-21 So 20:54]
 I do not want my cursor to blink.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (blink-cursor-mode -1)
 #+END_SRC
 *** Menu, Tool and Scrollbar
 I don't want to see the menu-bar, tool-bar or scrollbar.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (when window-system
   (menu-bar-mode -1)
   (tool-bar-mode -1)
@@ -248,7 +261,7 @@ menu/tool/scrollbar settings. Sucks.
 For them to work even then, we have to do two things.
 1. We have to set the frame alist. We simple set both,
    =initial-frame-alist= and =default-frame-alist= to the same value here.
-   #+BEGIN_SRC emacs-lisp
+   #+BEGIN_SRC emacs-lisp tangle:yes
   (setq initial-frame-alist '(
                               (horizontal-scroll-bars . nil)
                               (vertical-scroll-bars . nil)
@@ -261,12 +274,12 @@ For them to work even then, we have to do two things.
 
 *** Hilight current line in buffer
 As it says, it does a hilight of the current line.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (global-hl-line-mode +1)
 #+END_SRC
 *** Allow recursive minibuffers
 This allows (additional) minibuffer commands while in the minibuffer.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq enable-recursive-minibuffers 't)
 #+END_SRC
 
@@ -277,7 +290,7 @@ 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (line-number-mode 1)
 (column-number-mode 1)
 (size-indication-mode 1)
@@ -297,7 +310,7 @@ see. So lets hide those. There are two ways, one of them uses diminish
 to get entirely rid of some modes, the other is a function taken from
 "Mastering Emacs" which replaces the modes text with an own (set of)
 character(s).
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
   (require 'diminish)
   (diminish 'auto-fill-function)
   (defvar mode-line-cleaner-alist
@@ -341,7 +354,7 @@ 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (if (> emacs-major-version 22)
   (setq major-mode 'org-mode)
   (setq default-major-mode 'org-mode))
@@ -351,7 +364,7 @@ read in emacs.
 *** Shell
 [2013-04-23 Tue 16:43]
 Shell. zsh in my case.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq shell-file-name "zsh")
 (setq shell-command-switch "-c")
 (setq explicit-shell-file-name shell-file-name)
@@ -368,7 +381,7 @@ Shell. zsh in my case.
 
 *** Emacs shell
 Basic settings for emacs integrated shell
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq eshell-cmpl-cycle-completions nil
       eshell-save-history-on-exit t
       eshell-cmpl-dir-ignore "\\`\\(\\.\\.?\\|CVS\\|\\.svn\\|\\.git\\)/\\'")
@@ -401,7 +414,7 @@ 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (define-key isearch-mode-map (kbd "C-x") 'sacha/isearch-yank-current-word)
 (global-set-key '[M-up] 'sacha/search-word-backward)
 (global-set-key '[M-down] 'sacha/search-word-forward)
@@ -410,7 +423,7 @@ jump to the next/previous occurence of it.
 *** 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq frame-title-format "%b (%i)")
 #+END_SRC
 
@@ -418,7 +431,7 @@ frame title.
 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.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (require 'keep-buffers)
 (keep-buffers-mode 1)
 (push '("\\`*scratch" . erase) keep-buffers-protected-alist)
@@ -429,13 +442,13 @@ In the past I had a long function that just recreated them, but the
 *** yes-or-no-p
 Emas usually wants you to type /yes/ or /no/ fully. What a mess, I am
 lazy.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (set-language-environment 'utf-8)
 (set-default-coding-systems 'utf-8)
 (set-terminal-coding-system 'utf-8)
@@ -449,7 +462,7 @@ In this day and age, UTF-8 is the way to go.
 *** 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (require 'paren)
 (setq show-paren-style 'parenthesis)
 (show-paren-mode +1)
@@ -457,13 +470,13 @@ hilighting them makes it obvious where they are.
 *** 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.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (global-set-key (kbd "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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq scroll-margin 0)
 (setq scroll-conservatively 100000)
 (setq scroll-up-aggressively 0.0)
@@ -475,7 +488,7 @@ jump half-windows?
 [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
+#+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...
@@ -485,7 +498,7 @@ changed in emacs24. I am used to the old way, so get it back.
 
 *** Global keyboard changes not directly related to a mode
 Disable /suspend_frame/ function, I dislike it.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (global-unset-key [(control z)])
 (global-unset-key [(control x) (control z)])
 #+END_SRC
@@ -495,7 +508,7 @@ Default of *C-k* is to kill from the point to the end of line. If
 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (defun kill-entire-line ()
   "Kill this entire line (including newline), regardless of where point is within the line."
   (interactive)
@@ -510,7 +523,7 @@ me. Lazyness++.
 
 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (defun jj-org-kill-line (&optional arg)
   "Kill the entire line, regardless of where point is within the line, org-mode-version"
   (interactive "P")
@@ -523,12 +536,12 @@ And the same is true when I'm in org-mode, which has an own kill function...
 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (global-set-key "\M-5" 'match-paren)
 #+END_SRC
 
@@ -563,13 +576,13 @@ Rgrep is infinitely useful in multi-file projects.
 
 Easy way to move a line up - or down. Simpler than dealing with C-x C-t
 AKA transpose lines.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (global-set-key [(meta shift up)]  'move-line-up)
 (global-set-key [(meta shift down)]  'move-line-down)
 #+END_SRC
 
 "Pull" lines up, join them
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (global-set-key (kbd "M-j")
                 (lambda ()
                   (interactive)
@@ -577,24 +590,24 @@ AKA transpose lines.
 #+END_SRC
 
 When I press Enter I almost always want to go to the right indentation on the next line.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (global-set-key (kbd "RET") 'newline-and-indent)
 #+END_SRC
 
 Easier undo, and i don't need suspend-frame
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (global-set-key (kbd "C-z") 'undo)
 #+END_SRC
 
 Window switching, go backwards. (C-x o goes to the next window)
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (global-set-key (kbd "C-x O") (lambda ()
                                 (interactive)
                                 (other-window -1)))
 #+END_SRC
 
 Edit file as root
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (global-set-key (kbd "C-x C-r") 'prelude-sudo-edit)
 #+END_SRC
 
@@ -603,12 +616,12 @@ 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (global-set-key (kbd "M-SPC") 'just-one-space-with-newline)
 #+END_SRC
 
 Count which commands I use how often.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (defvar keyfreq-file
   (expand-file-name "keyfreq" jj-cache-dir)
   "Keyfreq cache file")
@@ -620,9 +633,25 @@ Count which commands I use how often.
 (keyfreq-autosave-mode 1)
 #+END_SRC
 
+Duplicate current line
+#+BEGIN_SRC emacs-lisp tangle:yes
+(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))))
+
+(global-set-key (kbd "C-c p") 'duplicate-line)
+#+END_SRC
+
 **** ace-jump-mode
 [2013-04-28 So 11:26]
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (autoload 'ace-jump-mode "ace-jump-mode" "Emacs quick move minor mode" t)
 (define-key global-map (kbd "H-SPC") 'ace-jump-mode)
 ;; enable a more powerful jump back function from ace jump mode
@@ -634,7 +663,7 @@ Count which commands I use how often.
 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (global-unset-key [insert])
 (global-unset-key [kp-insert])
 #+END_SRC
@@ -644,7 +673,7 @@ 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq backup-directory-alist `(("." . ,jj-backup-directory)))
 (setq auto-save-file-name-transforms `((".*" ,jj-backup-directory t)))
 
@@ -670,17 +699,17 @@ where =temporary-file-directory= is not inside my home).
 #+END_SRC
 
 Weeks start on Monday, not sunday.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq calendar-week-start-day 1)
 #+END_SRC
 
 Searches and matches should ignore case.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq-default case-fold-search t)
 #+END_SRC
 
 Which buffers to get rid off at midnight.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq clean-buffer-list-kill-buffer-names (quote ("*Help*" "*Apropos*"
                                                   "*Man " "*Buffer List*"
                                                   "*Compile-Log*"
@@ -692,30 +721,30 @@ Which buffers to get rid off at midnight.
 #+END_SRC
 
 Don't display a cursor in non-selected windows.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq-default cursor-in-non-selected-windows nil)
 #+END_SRC
 
 What should be displayed in the mode-line for files with those types
 of line endings.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq eol-mnemonic-dos "(DOS)")
 (setq eol-mnemonic-mac "(Mac)")
 #+END_SRC
 
 Much larger threshold for garbage collection prevents it to run too often.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq gc-cons-threshold 48000000)
 #+END_SRC
 
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq max-lisp-eval-depth 1000)
 (setq max-specpdl-size 3000)
 #+END_SRC
 
 Unfill paragraph
 From https://raw.github.com/qdot/conf_emacs/master/emacs_conf.org
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (defun unfill-paragraph ()
   "Takes a multi-line paragraph and makes it into a single line of text."
   (interactive)
@@ -723,23 +752,25 @@ From https://raw.github.com/qdot/conf_emacs/master/emacs_conf.org
     (fill-paragraph nil)))
 #+END_SRC
 
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq-default indicate-empty-lines t)
 #+END_SRC
 *** Browser
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq browse-url-browser-function (quote browse-url-generic))
 (setq browse-url-generic-program "/usr/bin/x-www-browser")
 #+END_SRC
 
 *** When saving a script - make it executable
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (add-hook 'after-save-hook 'executable-make-buffer-file-executable-if-script-p)
 #+END_SRC
 
 *** Emacs Server
-#+BEGIN_SRC emacs-lisp
-(server-start)
+#+BEGIN_SRC emacs-lisp tangle:yes
+(require 'server)
+(unless (server-running-p)
+  (server-start))
 #+END_SRC
 
 ** Customized variables
@@ -747,7 +778,7 @@ From https://raw.github.com/qdot/conf_emacs/master/emacs_conf.org
 The following contains a set of variables i may reasonably want to
 change on other systems - which don't affect the init file loading
 process. So I *can* use the customization interface for it...
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
   (defgroup ganneff nil
     "Modify ganneffs settings"
     :group 'environment)
@@ -773,6 +804,14 @@ process. So I *can* use the customization interface for it...
 #+END_SRC
 
 
+** Compatibility
+[2013-05-21 Tue 23:22]
+Restore removed var alias, used by ruby-electric-brace and others
+#+BEGIN_SRC emacs-lisp tangle:yes
+(unless (boundp 'last-command-char)
+  (defvaralias 'last-command-char 'last-command-event))
+#+END_SRC
+
 * Customized variables
 :PROPERTIES:
 :ID: 0102208d-fdf6-4928-9e40-7e341bd3aa3a
@@ -782,7 +821,7 @@ 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq custom-file jj-custom-file)
 (safe-load custom-file)
 #+END_SRC
@@ -798,7 +837,7 @@ I only list modes here where I don't have any other special
 configuration.
 
 - Some extras for ruby, used with ruby on rails for example
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (add-to-list 'auto-mode-alist '("\\.rxml$" . ruby-mode))
 (add-to-list 'auto-mode-alist '("\\.rjs$" . ruby-mode))
 (add-to-list 'auto-mode-alist '("\\.rake$" . ruby-mode))
@@ -807,17 +846,17 @@ configuration.
 #+END_SRC
 
 - Markdown syntax
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (add-to-list 'auto-mode-alist '("\\.mdwn$" . markdown-mode))
 #+END_SRC
 
 - diff
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (add-to-list 'auto-mode-alist '("COMMIT_EDITMSG$" . diff-mode))
 #+END_SRC
 
 - perl
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (add-to-list 'auto-mode-alist '("\\.\\([pP][Llm]\\|al\\)\\'" . cperl-mode))
 (add-to-list 'auto-mode-alist '("\\.pod$" . pod-mode))
 (add-to-list 'auto-mode-alist '("\\.tt$" . tt-mode))
@@ -827,7 +866,7 @@ configuration.
 #+END_SRC
 
 - python
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode))
 (add-to-list 'auto-mode-alist '("\\.py$" . python-mode))
 (add-to-list 'interpreter-mode-alist '("python" . python-mode))
@@ -838,13 +877,13 @@ configuration.
 This mode allows to have keybindings that are only alive when the
 region is active. Helpful for things that only do any useful action
 then, like for example the [[*multiple%20cursors][multiple cursors]] mode I load later.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (require 'region-bindings-mode)
 (region-bindings-mode-enable)
 #+END_SRC
 ** tramp
 Transparent Remote (file) Access, Multiple Protocol, remote file editing.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (require 'tramp)
 (setq tramp-default-method "ssh")
 (setq tramp-persistency-file-name (expand-file-name "tramp" jj-cache-dir))
@@ -861,7 +900,7 @@ Transparent Remote (file) Access, Multiple Protocol, remote file editing.
 We configure only a bit of the tiny-tools to load when I should need
 them. I don't need much actually, but these things are nice to have.
 
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (autoload 'turn-on-tinyperl-mode "tinyperl" "" t)
 (add-hook 'perl-mode-hook  'turn-on-tinyperl-mode)
 (add-hook 'cperl-mode-hook 'turn-on-tinyperl-mode)
@@ -877,7 +916,7 @@ them. I don't need much actually, but these things are nice to have.
 (autoload 'tinyeat-kill-buffer-lines-point-min "tinyeat" "" t)
 #+END_SRC
 *** Keyboard changes for tiny-tools
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (global-set-key  "\M-;" 'tinycomment-indent-for-comment)
 
 (global-set-key (kbd "ESC C-k")       'tinyeat-kill-line-backward)
@@ -892,7 +931,7 @@ them. I don't need much actually, but these things are nice to have.
 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (autoload 'dired-single-buffer "dired-single" "" t)
 (autoload 'dired-single-buffer-mouse "dired-single" "" t)
 (autoload 'dired-single-magic-buffer "dired-single" "" t)
@@ -902,7 +941,7 @@ dired-single to the rescue.
 We want some extra key bindings loaded. In case we haven't loaded dired
 yet, there won't be a keymap to add to, so add our setup function to the
 load hook only. Otherwise just bind the keys.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (if (boundp 'dired-mode-map)
     ;; we're good to go; just add our bindings
     (my-dired-init)
@@ -911,7 +950,7 @@ load hook only. Otherwise just bind the keys.
 #+END_SRC
 
 A few settings
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq dired-auto-revert-buffer (quote dired-directory-changed-p))
 (setq dired-dwim-target t)
 (setq dired-listing-switches "-alh")
@@ -920,12 +959,12 @@ A few settings
 #+END_SRC
 
 wdired
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq wdired-allow-to-change-permissions t)
 #+END_SRC
 ** filladapt
 [2013-05-02 Thu 00:04]
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (require 'filladapt)
 (eval-after-load "filladapt" '(diminish 'filladapt-mode))
 (setq-default filladapt-mode t)
@@ -934,19 +973,19 @@ wdired
 [2013-05-03 Fri 16:09]
 Replace default find-file with find-file-at-point, which tries to
 guess the default file/URL from text around the point.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (ffap-bindings)
 #+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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (require 'icicles)
 (icy-mode 1)
 #+END_SRC
 ** uniquify
 Always have unique buffernames. See [[http://www.gnu.org/software/emacs/manual/html_node/emacs/Uniquify.html][Uniquify - GNU Emacs Manual]]
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (require 'uniquify)
 (setq uniquify-buffer-name-style 'post-forward)
 (setq uniquify-after-kill-buffer-p t)
@@ -957,7 +996,7 @@ Always have unique buffernames. See [[http://www.gnu.org/software/emacs/manual/h
 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq save-abbrevs 'silently)
 (setq abbrev-file-name (expand-file-name "abbrev_defs" jj-cache-dir))
 (if (file-exists-p abbrev-file-name)
@@ -969,14 +1008,14 @@ ways.
 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (require 'font-lock)
 (global-font-lock-mode 1)
 (setq font-lock-maximum-decoration t)
 #+END_SRC
 ** miniedit
 Edit minibuffer in a full (text-mode) buffer by pressing *M-C-e*.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (require 'miniedit)
 (miniedit-install)
 #+END_SRC
@@ -986,7 +1025,7 @@ By default, Emacs can update the time stamp for the following two
 formats if one exists in the first 8 lines of the file.
 - Time-stamp: <>
 - Time-stamp: " "
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (require 'time-stamp)
 (setq time-stamp-active t)
 (setq time-stamp-format "%02H:%02M:%02S (%z) - %02d.%02m.%:y from %u (%U) on %s")
@@ -998,7 +1037,7 @@ formats if one exists in the first 8 lines of the file.
 ** 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (autoload 'cperl-mode "cperl-mode" )
 (defalias 'perl-mode 'cperl-mode)
 (setq cperl-hairy t)
@@ -1016,7 +1055,7 @@ up here to be used.
 #+END_SRC
 
 And have cperl mode give ElDoc a useful string
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (defun my-cperl-eldoc-documentation-function ()
   "Return meaningful doc string for `eldoc-mode'."
   (car
@@ -1030,7 +1069,7 @@ And have cperl mode give ElDoc a useful string
 #+END_SRC
 
 ** python
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
   (autoload 'python-mode "python-mode" "Python Mode." t)
   (add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode))
   (add-to-list 'interpreter-mode-alist '("python" . python-mode))
@@ -1064,7 +1103,7 @@ And have cperl mode give ElDoc a useful string
 
 If an =ipython= executable is on the path, then assume that IPython is
 the preferred method python evaluation.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (when (executable-find "ipython")
   (require 'ipython)
   (setq org-babel-python-mode 'python-mode))
@@ -1083,14 +1122,14 @@ the preferred method python evaluation.
 
 ** sh
 I prefer comments to be indented too
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq sh-indent-comment t)
 #+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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (require 'autorevert)
 (setq global-auto-revert-mode t)
 (global-auto-revert-mode)
@@ -1101,7 +1140,7 @@ 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
+#+BEGIN_SRC emacs-lisp tangle:yes
   (require 'linum)
   (setq linum-format "%3d ")
   (setq linum-mode-inhibit-modes-list '(org-mode
@@ -1121,14 +1160,64 @@ gnus, so we have a list of modes where we don't want to see it.
 #+END_SRC
 
 ** css
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (autoload 'css-mode "css-mode")
-(setq auto-mode-alist (cons '("\\.css\\'" . css-mode) auto-mode-alist))
+(add-auto-mode 'css-mode "\\.css")
+;;; CSS flymake
+(require 'flymake-css)
+(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
+
+** 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
+(require 'mmm-auto)
+(setq mmm-global-mode 'buffers-with-submode-classes)
+(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
 
 ** html-helper
 Instead of default /html-mode/ I use /html-helper-mode/.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t)
 (setq auto-mode-alist (cons '("\\.html$" . html-helper-mode) auto-mode-alist))
 (setq auto-mode-alist (cons '("\\.asp$" . html-helper-mode) auto-mode-alist))
@@ -1137,7 +1226,7 @@ Instead of default /html-mode/ I use /html-helper-mode/.
 #+END_SRC
 
 ** auctex
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq auto-mode-alist (cons '("\\.tex\\'" . latex-mode) auto-mode-alist))
 (setq TeX-auto-save t)
 (setq TeX-parse-self t)
@@ -1145,7 +1234,7 @@ Instead of default /html-mode/ I use /html-helper-mode/.
 #+END_SRC
 
 ** Debian related
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (require 'dpkg-dev-el-loaddefs nil 'noerror)
 (require 'debian-el-loaddefs nil 'noerror)
 
@@ -1159,13 +1248,13 @@ Instead of default /html-mode/ I use /html-helper-mode/.
 
 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 tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (require 'org)
 #+END_SRC
 
 My browsers (Conkeror, Iceweasel) can store links in org-mode. For
 that we need org-protocol.
-#+BEGIN_SRC emacs-lisp tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (require 'org-protocol)
 #+END_SRC
 
@@ -1173,7 +1262,7 @@ that we need org-protocol.
 
 My current =org-agenda-files= variable only includes a set of
 directories.
-#+BEGIN_SRC emacs-lisp tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (setq org-agenda-files (quote ("~/org/"
                                "~/org/debian"
                                "~/org/debconf"
@@ -1195,7 +1284,7 @@ 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 tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 ;; Keep tasks with dates on the global todo lists
 (setq org-agenda-todo-ignore-with-date nil)
 
@@ -1264,7 +1353,7 @@ since new files in existing directories are automatically picked up.
           'append)
 #+END_SRC
 
-#+BEGIN_SRC emacs-lisp tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (setq org-agenda-persistent-filter t)
 (add-hook 'org-agenda-mode-hook
           '(lambda () (org-defkey org-agenda-mode-map "W" 'bh/widen))
@@ -1311,7 +1400,7 @@ 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 tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (add-hook 'org-mode-hook
           (lambda ()
             (org-defkey org-mode-map "\C-c["    'undefined)
@@ -1321,7 +1410,7 @@ comments headlines - a function never used.
 #+END_SRC
 
 And now a largish set of keybindings...
-#+BEGIN_SRC emacs-lisp tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (global-set-key "\C-cl" 'org-store-link)
 (global-set-key "\C-ca" 'org-agenda)
 (global-set-key "\C-cb" 'org-iswitchb)
@@ -1368,7 +1457,7 @@ And now a largish set of keybindings...
 *** Tasks, States, Todo fun
 
 First we define the global todo keywords.
-#+BEGIN_SRC emacs-lisp tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (setq org-todo-keywords
       (quote ((sequence "TODO(t)" "NEXT(n)" "|" "DONE(d@/!)")
               (sequence "WAITING(w@/!)" "HOLD(h@/!)" "DELEGATED(g@/!)" "|" "CANCELLED(c@/!)" "PHONE"))))
@@ -1388,7 +1477,7 @@ First we define the global todo keywords.
 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 tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (setq org-use-fast-todo-selection t)
 #+END_SRC
 Changing a task state is done with =C-c C-t KEY=
@@ -1396,7 +1485,7 @@ 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 tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (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
@@ -1423,7 +1512,7 @@ The triggers break down to the following rules:
 - 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 tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (setq org-todo-state-tags-triggers
       (quote (("CANCELLED" ("CANCELLED" . t))
               ("WAITING" ("WAITING" . t))
@@ -1436,7 +1525,7 @@ The tags are used to filter tasks in the agenda views conveniently.
 
 *** Capturing new tasks
 Org capture replaces the old remember mode.
-#+BEGIN_SRC emacs-lisp tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (setq org-directory "~/org")
 (setq org-default-notes-file "~/org/refile.org")
 
@@ -1491,14 +1580,14 @@ 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:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (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 tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 ; 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))))
@@ -1529,7 +1618,7 @@ moved over to the right place. The following is the setup for it.
 
 *** Custom agenda
 Agenda view is the central place for org-mode interaction...
-#+BEGIN_SRC emacs-lisp tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 ;; Do not dim blocked tasks
 (setq org-agenda-dim-blocked-tasks nil)
 ;; Compact the block agenda view
@@ -1624,7 +1713,7 @@ Agenda view is the central place for org-mode interaction...
 #+END_SRC
 
 *** Time
-#+BEGIN_SRC emacs-lisp tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 ;;
 ;; Resume clocking task when emacs is restarted
 (org-clock-persistence-insinuate)
@@ -1684,7 +1773,7 @@ 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 tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 ;; Agenda clock report parameters
 (setq org-agenda-clockreport-parameter-plist
       (quote (:link t :maxlevel 5 :fileskip0 t :compact t :narrow 80)))
@@ -1694,12 +1783,12 @@ top-level task and the clock moves to the default task.
 #+END_SRC
 **** Task estimates, column view
 Setup column view globally with the following headlines
-#+BEGIN_SRC emacs-lisp tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 ; 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 tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 ; 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")
@@ -1708,7 +1797,7 @@ Setup the estimate for effort values.
 
 *** Tags
 Tags are mostly used for filtering inside the agenda.
-#+BEGIN_SRC emacs-lisp tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 ; Tags with fast selection keys
 (setq org-tag-alist (quote ((:startgroup)
                             ("@errand" . ?e)
@@ -1736,13 +1825,13 @@ Tags are mostly used for filtering inside the agenda.
 #+END_SRC
 
 *** Archiving
-#+BEGIN_SRC emacs-lisp tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (setq org-archive-mark-done nil)
 (setq org-archive-location "%s_archive::* Archived Tasks")
 #+END_SRC
 
 *** org-babel
-#+BEGIN_SRC emacs-lisp tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (setq org-ditaa-jar-path "~/java/ditaa0_6b.jar")
 (setq org-plantuml-jar-path "~/java/plantuml.jar")
 
@@ -1781,7 +1870,7 @@ Tags are mostly used for filtering inside the agenda.
 (add-to-list 'org-src-lang-modes (quote ("plantuml" . fundamental)))
 #+END_SRC
 
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 ;; Don't have images visible on startup, breaks on console
 (setq org-startup-with-inline-images nil)
 #+END_SRC
@@ -1808,7 +1897,7 @@ Org-mode can export to a variety of publishing formats including (but not limite
 
 A new exporter created by Nicolas Goaziou was introduced in org 8.0.
 
-#+BEGIN_SRC emacs-lisp tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 ;; Explicitly load required exporters
 (require 'ox-html)
 (require 'ox-latex)
@@ -1883,7 +1972,7 @@ A new exporter created by Nicolas Goaziou was introduced in org 8.0.
 
 **** Latex export
 
-#+BEGIN_SRC emacs-lisp tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (setq org-latex-to-pdf-process
       '("xelatex -interaction nonstopmode %f"
         "xelatex -interaction nonstopmode %f")) ;; for multiple passes
@@ -1969,12 +2058,12 @@ 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 :tangle yes
+#+BEGIN_SRC emacs-lisp tangle:yes :tangle yes
 (setq org-catch-invisible-edits 'error)
 #+END_SRC
 
 *** Whatever
-#+BEGIN_SRC emacs-lisp :tangle yes
+#+BEGIN_SRC emacs-lisp tangle:yes :tangle yes
 ;; disable the default org-mode stuck projects agenda view
 (setq org-stuck-projects (quote ("" nil nil "")))
 
@@ -1997,11 +2086,11 @@ The following setting adds alphabetical lists like
   ,a. item one
   ,b. item two
 
-#+BEGIN_SRC emacs-lisp tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (setq org-alphabetical-lists t)
 #+END_SRC
 
-#+BEGIN_SRC emacs-lisp :tangle yes
+#+BEGIN_SRC emacs-lisp tangle:yes :tangle yes
 (setq org-remove-highlights-with-change nil)
 
 (setq org-list-demote-modify-bullet (quote (("+" . "-")
@@ -2020,7 +2109,7 @@ The following setting adds alphabetical lists like
 #+END_SRC
 
 
-#+BEGIN_SRC emacs-lisp tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 ;; Enable abbrev-mode
 (add-hook 'org-mode-hook (lambda () (abbrev-mode 1)))
 (setq org-startup-indented t)
@@ -2036,24 +2125,24 @@ 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 tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (setq org-blank-before-new-entry (quote ((heading)
                                          (plain-list-item . auto))))
 #+END_SRC
 
-#+BEGIN_SRC emacs-lisp tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (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 tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (setq org-enforce-todo-checkbox-dependencies t)
 (setq org-enforce-todo-dependencies t)
 #+END_SRC
 
-#+BEGIN_SRC emacs-lisp tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (setq org-fast-tag-selection-single-key (quote expert))
 (setq org-footnote-auto-adjust t)
 (setq org-hide-block-startup t)
@@ -2101,7 +2190,7 @@ 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 tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (setq org-use-speed-commands t)
 (setq org-speed-commands-user (quote (("0" . ignore)
                                       ("1" . ignore)
@@ -2171,35 +2260,35 @@ using the major-mode of the code.  It also changes the behavior of
 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 tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (setq org-src-fontify-natively t)
 (setq org-src-tab-acts-natively t)
 #+END_SRC
 
-#+BEGIN_SRC emacs-lisp :tangle yes
+#+BEGIN_SRC emacs-lisp tangle:yes :tangle yes
 (setq org-src-preserve-indentation nil)
 (setq org-edit-src-content-indentation 0)
 #+END_SRC
 
 
-#+BEGIN_SRC emacs-lisp tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (setq org-attach-directory "~/org/data/")
 #+END_SRC
-#+BEGIN_SRC emacs-lisp tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (setq org-agenda-sticky t)
 #+END_SRC
 
 **** Checklist handling
 [2013-05-11 Sat 22:15]
 
-#+BEGIN_SRC emacs-lisp tangle:yes
+#+BEGIN_SRC emacs-lisp tangle:yes tangle:yes
 (require 'org-checklist)
 #+END_SRC
 
 ** transient mark
 For some reason I prefer this mode more than the way without. I want to
 see the marked region.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (transient-mark-mode 1)
 #+END_SRC
 ** cua
@@ -2207,7 +2296,7 @@ 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (cua-mode t)
 (setq cua-enable-cua-keys (quote shift))
 #+END_SRC
@@ -2217,7 +2306,7 @@ 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (cua-selection-mode t)
 #+END_SRC
 
@@ -2225,7 +2314,7 @@ movement keys.
 This is [[https://github.com/mbunkus/mo-git-blame][mo-git-blame -- An interactive, iterative 'git blame' mode for
 Emacs]].
 
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (autoload 'mo-git-blame-file "mo-git-blame" nil t)
 (autoload 'mo-git-blame-current "mo-git-blame" nil t)
 #+END_SRC
@@ -2234,7 +2323,7 @@ Emacs]].
 [[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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (autoload 'mingus "mingus-stays-home" nil t)
 (global-set-key (kbd "<f6>") 'mingus)
 (setq mingus-dired-add-keys t)
@@ -2246,17 +2335,50 @@ I want to access it from anywhere using =F6=.
 (setq mingus-mpd-root "/share/music/")
 #+END_SRC
 
-** saveplace
-Store at which point I have been in files.
-#+BEGIN_SRC emacs-lisp
-(setq-default save-place t)
-(require 'saveplace)
-(setq save-place-file (expand-file-name "saved-places" jj-cache-dir))
-#+END_SRC
-** savehist
+** sessions
+[2013-05-22 Wed 22:40]
+Save and restore the desktop
+#+BEGIN_SRC emacs-lisp tangle:yes
+(setq desktop-path (list jj-cache-dir))
+(desktop-save-mode 1)
+(defadvice desktop-read (around trace-desktop-errors activate)
+  (let ((debug-on-error t))
+    ad-do-it))
+
+
+;;----------------------------------------------------------------------------
+;; Restore histories and registers after saving
+;;----------------------------------------------------------------------------
+(require 'session)
+
+(setq session-save-file (expand-file-name "session" jj-cache-dir))
+(add-hook 'after-init-hook 'session-initialize)
+
+;; save a bunch of variables to the desktop file
+;; for lists specify the len of the maximal saved data also
+(setq desktop-globals-to-save
+      (append '((extended-command-history . 30)
+                (file-name-history        . 100)
+                (grep-history             . 30)
+                (compile-history          . 30)
+                (minibuffer-history       . 50)
+                (query-replace-history    . 60)
+                (read-expression-history  . 60)
+                (regexp-history           . 60)
+                (regexp-search-ring       . 20)
+                (search-ring              . 20)
+                (comint-input-ring        . 50)
+                (shell-command-history    . 50)
+                kill-ring
+                desktop-missing-file-warning
+                tags-file-name
+                register-alist)))
+
+#+END_SRC
+*** savehist
 [2013-04-21 So 20:25]
 Save a bit of history
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle no
 (require 'savehist)
 (setq savehist-additional-variables
  '(search ring regexp-search-ring kill-ring compile-history))
@@ -2266,15 +2388,22 @@ Save a bit of history
 (savehist-mode +1)
 #+END_SRC
 
+*** saveplace
+Store at which point I have been in files.
+#+BEGIN_SRC emacs-lisp tangle:yes
+(setq-default save-place t)
+(require 'saveplace)
+(setq save-place-file (expand-file-name "saved-places" jj-cache-dir))
+#+END_SRC
 ** easypg
 EasyPG is a GnuPG interface for Emacs.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (require 'epa-file)
 (epa-file-enable)
 #+END_SRC
 
 I took the following from [[http://www.emacswiki.org/emacs/EasyPG][EmacsWiki: Easy PG]]
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (defadvice epg--start (around advice-epg-disable-agent disable)
   "Don't allow epg--start to use gpg-agent in plain text
     terminals."
@@ -2288,7 +2417,7 @@ I took the following from [[http://www.emacswiki.org/emacs/EasyPG][EmacsWiki: Ea
 (ad-activate 'epg--start)
 #+END_SRC
 ** message
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
   (require 'message)
   (setq message-kill-buffer-on-exit t)
 #+END_SRC
@@ -2296,7 +2425,7 @@ I took the following from [[http://www.emacswiki.org/emacs/EasyPG][EmacsWiki: Ea
 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 ;;*** Keyboardmacros
 (global-unset-key "\M-n")
 (global-set-key "\M-n" 'gnus) ; Start gnus with M-n
@@ -2306,14 +2435,14 @@ what I want every emacs to know.
 url contains code to parse and handle URLs - who would have thought? I
 set it to send Accept-language header and tell it to not send email,
 operating system or location info.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq url-mime-language-string "de,en")
 (setq url-privacy-level (quote (email os lastloc)))
 #+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
+#+BEGIN_SRC emacs-lisp tangle:yes
   (require 'hippie-exp)
   (setq hippie-expand-try-functions-list '(try-expand-dabbrev
                                            try-expand-dabbrev-all-buffers
@@ -2330,7 +2459,7 @@ tries to expand it in various ways.
 [2013-04-27 Sa 23:16]
 Yasnippet is a template system. Type an abbreviation, expand it into
 whatever the snippet holds.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (setq yas-snippet-dirs (expand-file-name "yasnippet/snippets" jj-elisp-dir))
 (require 'yasnippet)
 (yas-global-mode 1)
@@ -2343,7 +2472,7 @@ whatever the snippet holds.
 The Emacs Lisp Package Archive (may) contain(s) some things I
 want. Even though I usually only use it to get the package, then when I
 like it move it into my own space. My elpa subdir stays empty.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (when (> emacs-major-version 23)
   (require 'package)
   (setq package-user-dir (expand-file-name "elpa" jj-cache-dir))
@@ -2356,7 +2485,7 @@ like it move it into my own space. My elpa subdir stays empty.
 [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
+#+BEGIN_SRC emacs-lisp tangle:yes
   (require 'multiple-cursors)
   (define-key region-bindings-mode-map "a" 'mc/mark-all-like-this)
 
@@ -2373,7 +2502,7 @@ which highlights parens, brackets, and braces according to their
 depth. Each successive level is highlighted a different color. This
 makes it easy to spot matching delimiters, orient yourself in the code,
 and tell which statements are at the same depth.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (when (require 'rainbow-delimiters nil 'noerror)
   (global-rainbow-delimiters-mode))
 #+END_SRC
@@ -2384,7 +2513,7 @@ tons of modes available to change it, even downgrade it to the very
 crappy ways one usually knows from other systems which lose
 information. undo-tree is different - it helps keeping you sane while
 keeping the full power of emacs undo/redo.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (require 'undo-tree)
 (global-undo-tree-mode)
 (diminish 'undo-tree-mode)
@@ -2393,7 +2522,7 @@ keeping the full power of emacs undo/redo.
 Additionally I would like to keep the region active should I undo
 while I have one.
 
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 ;; Keep region when undoing in region
 (defadvice undo-tree-undo (around keep-region activate)
   (if (use-region-p)
@@ -2409,7 +2538,7 @@ while I have one.
 ** windmove
 [2013-04-21 So 20:27]
 Use shift + arrow keys to switch between visible buffers
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (require 'windmove)
 (windmove-default-keybindings 'hyper)
 (setq windmove-wrap-around t)
@@ -2420,7 +2549,7 @@ VolatileHighlights highlights changes to the buffer caused by commands
 such as ‘undo’, ‘yank’/’yank-pop’, etc. The highlight disappears at the
 next command. The highlighting gives useful visual feedback for what
 your operation actually changed in the buffer.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (require 'volatile-highlights)
 (volatile-highlights-mode t)
 (diminish 'volatile-highlights-mode)
@@ -2434,7 +2563,7 @@ ediff - don't start another frame
 #+END_SRC
 ** re-builder
 Saner regex syntax
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (require 're-builder)
 (setq reb-re-syntax 'string)
 #+END_SRC
@@ -2444,7 +2573,7 @@ Saner regex syntax
 ** magit
 [2013-04-21 So 20:48]
 magit is a mode for interacting with git.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (require 'magitload)
 (require 'magit-svn)
 (global-set-key (kbd "C-x g") 'magit-status)
@@ -2455,9 +2584,10 @@ magit is a mode for interacting with git.
 [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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (define-key read-expression-map (kbd "TAB") 'lisp-complete-symbol)
 (require 'paredit)
+
 (setq lisp-coding-hook 'lisp-coding-defaults)
   (setq interactive-lisp-coding-hook 'interactive-lisp-coding-defaults)
 
@@ -2482,7 +2612,7 @@ then I like it nice too...
 This highlights some /weaselwords/, a mode to /aid in finding common
 writing problems/...
 [2013-04-27 Sa 23:29]
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (require 'writegood-mode)
 (global-set-key "\C-cg" 'writegood-mode)
 #+END_SRC
@@ -2492,12 +2622,56 @@ 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (require 'auto-complete)
 (setq ac-comphist-file (expand-file-name "ac-comphist.dat" jj-cache-dir))
+(global-auto-complete-mode t)
+
+(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))
+
+(add-hook 'auto-complete-mode-hook 'set-auto-complete-as-completion-at-point-function)
+
+(require 'ac-dabbrev)
+(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
+                lisp-mode textile-mode markdown-mode tuareg-mode
+                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
 (define-key ac-complete-mode-map "\t" 'ac-expand)
 (define-key ac-complete-mode-map "\r" 'ac-complete)
@@ -2505,11 +2679,8 @@ already had typed.
 (define-key ac-complete-mode-map "\M-p" 'ac-previous)
 (define-key ac-mode-map (kbd "M-TAB") 'auto-complete)
 
-(require 'ac-dabbrev)
-(setq ac-sources (list ac-source-dabbrev))
-
 (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 . 2))) ;; Avoid completion for short trivial words.
+(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)
@@ -2521,7 +2692,7 @@ already had typed.
 [2013-04-28 So 01:13]
 YAML is a nice format for data, which is both, human and machine
 readable/editable without getting a big headache.
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp tangle:yes
 (require 'yaml-mode)
 (add-to-list 'auto-mode-alist '("\\.yml$" . yaml-mode))
 (add-hook 'yaml-mode-hook
@@ -2534,11 +2705,114 @@ readable/editable without getting a big headache.
 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
+#+BEGIN_SRC emacs-lisp tangle:yes
 (when (> emacs-major-version 23)
   (require 'flycheck)
   (add-hook 'after-init-hook #'global-flycheck-mode))
 #+END_SRC
+** crontab-mode
+[2013-05-21 Tue 23:18]
+#+BEGIN_SRC emacs-lisp tangle:yes
+(require 'crontab-mode)
+(add-auto-mode 'crontab-mode "\\.?cron\\(tab\\)?\\'")
+#+END_SRC
+
+** nxml
+[2013-05-22 Wed 22:02]
+
+nxml-mode is a major mode for editing XML.
+#+BEGIN_SRC emacs-lisp tangle:yes
+(add-auto-mode
+ 'nxml-mode
+ (concat "\\."
+         (regexp-opt
+          '("xml" "xsd" "sch" "rng" "xslt" "svg" "rss"
+            "gpx" "tcx"))
+         "\\'"))
+(setq magic-mode-alist (cons '("<\\?xml " . nxml-mode) magic-mode-alist))
+(fset 'xml-mode 'nxml-mode)
+(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)))
+     ))
+(add-auto-mode 'html-mode "\\.(jsp|tmpl)\\'")
+
+#+END_SRC
+** ruby
+[2013-05-22 Wed 22:33]
+Programming in ruby...
+
+#+BEGIN_SRC emacs-lisp tangle:yes
+(add-auto-mode 'ruby-mode
+               "Rakefile\\'" "\\.rake\\'" "\.rxml\\'"
+               "\\.rjs\\'" ".irbrc\\'" "\.builder\\'" "\\.ru\\'"
+               "\\.gemspec\\'" "Gemfile\\'" "Kirkfile\\'")
+
+(setq ruby-use-encoding-map nil)
+
+(eval-after-load 'ruby-mode
+  '(progn
+     (define-key ruby-mode-map (kbd "RET") 'reindent-then-newline-and-indent)
+     (define-key ruby-mode-map (kbd "TAB") 'indent-for-tab-command)))
+
+;; Stupidly the non-bundled ruby-mode isn't a derived mode of
+;; prog-mode: we run the latter's hooks anyway in that case.
+(add-hook 'ruby-mode-hook
+          (lambda ()
+            (unless (derived-mode-p 'prog-mode)
+              (run-hooks 'prog-mode-hook))))
+
+;;; ERB
+(defun sanityinc/ensure-mmm-erb-loaded ()
+  (require 'mmm-erb))
+
+(require 'derived)
+
+(defun sanityinc/set-up-mode-for-erb (mode)
+  (add-hook (derived-mode-hook-name mode) 'sanityinc/ensure-mmm-erb-loaded)
+  (mmm-add-mode-ext-class mode "\\.erb\\'" 'erb))
+
+(let ((html-erb-modes '(html-mode html-erb-mode nxml-mode)))
+  (dolist (mode html-erb-modes)
+    (sanityinc/set-up-mode-for-erb mode)
+    (mmm-add-mode-ext-class mode "\\.r?html\\(\\.erb\\)?\\'" 'html-js)
+    (mmm-add-mode-ext-class mode "\\.r?html\\(\\.erb\\)?\\'" 'html-css)))
+
+(mapc 'sanityinc/set-up-mode-for-erb
+      '(coffee-mode js-mode js2-mode js3-mode markdown-mode textile-mode))
+
+(mmm-add-mode-ext-class 'html-erb-mode "\\.jst\\.ejs\\'" 'ejs)
+
+(add-auto-mode 'html-erb-mode "\\.rhtml\\'" "\\.html\\.erb\\'")
+(add-to-list 'auto-mode-alist '("\\.jst\\.ejs\\'"  . html-erb-mode))
+(mmm-add-mode-ext-class 'yaml-mode "\\.yaml\\'" 'erb)
+
+(dolist (mode (list 'js-mode 'js2-mode 'js3-mode))
+  (mmm-add-mode-ext-class mode "\\.js\\.erb\\'" 'erb))
+
+#+END_SRC
 * Thats it
 And thats it for this file, control passes "back" to [[file:../initjj.org][initjj.org/el]]
 which then may load more files.