el/dot-emacs.el: Show italic characters in manpages correctly where possible.
[profile] / el / dot-emacs.el
index 1ee073f..a9e2d72 100644 (file)
 ;;;--------------------------------------------------------------------------
 ;;; Check command-line.
 
+(defun mdw-check-command-line-switch (switch)
+  (let ((probe nil) (next command-line-args) (found nil))
+    (while next
+      (cond ((string= (car next) switch)
+            (setq found t)
+            (if probe (rplacd probe (cdr next))
+              (setq command-line-args (cdr next))))
+           (t
+            (setq probe next)))
+      (setq next (cdr next)))
+    found))
+
 (defvar mdw-fast-startup nil
   "Whether .emacs should optimize for rapid startup.
 This may be at the expense of cool features.")
-(let ((probe nil) (next command-line-args))
-  (while next
-    (cond ((string= (car next) "--mdw-fast-startup")
-          (setq mdw-fast-startup t)
-          (if probe
-              (rplacd probe (cdr next))
-            (setq command-line-args (cdr next))))
-         (t
-          (setq probe next)))
-    (setq next (cdr next))))
+(setq mdw-fast-startup
+      (mdw-check-command-line-switch "--mdw-fast-startup"))
+
+(defvar mdw-splashy-startup nil
+  "Whether to show a splash screen and related frippery.")
+(setq mdw-splashy-startup
+      (mdw-check-command-line-switch "--mdw-splashy-startup"))
 
 ;;;--------------------------------------------------------------------------
 ;;; Some general utilities.
@@ -526,19 +535,22 @@ Evil key bindings are defined in `mdw-evil-keymap-keys'."
   (let ((home-frame (selected-frame))
        (buffer (get-buffer buffer-or-name))
        (safe-buffer (get-buffer "*scratch*")))
-    (mapc (lambda (frame)
-           (or (eq frame home-frame)
-               (mapc (lambda (window)
-                       (and (eq (window-buffer window) buffer)
-                            (set-window-buffer window safe-buffer)))
-                     (window-list frame))))
-         (frame-list))))
+    (dolist (frame (frame-list))
+      (unless (eq frame home-frame)
+       (dolist (window (window-list frame))
+         (when (eq (window-buffer window) buffer)
+           (set-window-buffer window safe-buffer)))))))
 
 (defvar mdw-inhibit-walk-windows nil
   "If non-nil, then `walk-windows' does nothing.
 This is used by advice on `switch-to-buffer-other-frame' to inhibit finding
 buffers in random frames.")
 
+(setq display-buffer--other-frame-action
+      '((display-buffer-reuse-window display-buffer-pop-up-frame)
+       (reusable-frames . nil)
+       (inhibit-same-window . t)))
+
 (defadvice walk-windows (around mdw-inhibit activate)
   "If `mdw-inhibit-walk-windows' is non-nil, then do nothing."
   (and (not mdw-inhibit-walk-windows)
@@ -899,7 +911,7 @@ in REST."
                                     (erase-buffer)
                                     (shell-command "date +%Y-%m-%d" t)
                                     (goto-char (mark))
-                                    (delete-backward-char 1)
+                                    (delete-char -1)
                                     (buffer-string))
                (kill-buffer buffer))))))
 
@@ -970,6 +982,21 @@ tramp, which seems to get itself into a twist."
   (let ((auto-revert-check-vc-info t))
     (auto-revert-buffers)))
 
+(defun comint-send-and-indent ()
+  (interactive)
+  (comint-send-input)
+  (and mdw-auto-indent
+       (indent-for-tab-command)))
+
+(defadvice comint-line-beginning-position
+    (around mdw-calculate-it-properly () activate compile)
+  "Calculate the actual line start for multi-line input."
+  (if (or comint-use-prompt-regexp
+         (eq (field-at-pos (point)) 'output))
+      ad-do-it
+    (setq ad-return-value
+         (constrain-to-field (line-beginning-position) (point)))))
+
 ;;;--------------------------------------------------------------------------
 ;;; Dired hacking.
 
@@ -1425,6 +1452,10 @@ doesn't match any of the regular expressions in
 (mdw-define-face comint-highlight-input
   (t nil))
 
+(mdw-define-face Man-underline
+  (((type tty)) :underline t)
+  (t :slant italic))
+
 (mdw-define-face ido-subdir
   (t :foreground "cyan" :weight bold))
 
@@ -2136,6 +2167,10 @@ name, as a symbol."
   "Major mode for editing Sod code.")
 (push '("\\.sod$" . sod-mode) auto-mode-alist)
 
+(dolist (hook '(c-mode-hook objc-mode-hook c++-mode-hook))
+  (add-hook hook 'mdw-misc-mode-config t)
+  (add-hook hook 'mdw-fontify-c-and-c++ t))
+
 ;;;--------------------------------------------------------------------------
 ;;; AP calc mode.
 
@@ -2181,6 +2216,10 @@ name, as a symbol."
           (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
                 '(0 mdw-punct-face))))))
 
+(progn
+  (add-hook 'apcalc-mode-hook 'mdw-misc-mode-config t)
+  (add-hook 'apcalc-mode-hook 'mdw-fontify-apcalc t))
+
 ;;;--------------------------------------------------------------------------
 ;;; Java programming configuration.
 
@@ -2257,6 +2296,10 @@ name, as a symbol."
           (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
                 '(0 mdw-punct-face))))))
 
+(progn
+  (add-hook 'java-mode-hook 'mdw-misc-mode-config t)
+  (add-hook 'java-mode-hook 'mdw-fontify-java t))
+
 ;;;--------------------------------------------------------------------------
 ;;; Javascript programming configuration.
 
@@ -2312,6 +2355,10 @@ name, as a symbol."
           (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
                 '(0 mdw-punct-face))))))
 
+(progn
+  (add-hook 'js-mode-hook 'mdw-misc-mode-config t)
+  (add-hook 'js-mode-hook 'mdw-fontify-javascript t))
+
 ;;;--------------------------------------------------------------------------
 ;;; Scala programming configuration.
 
@@ -2381,6 +2428,10 @@ name, as a symbol."
                 '(1 "\"")
                 '(4 "\""))))))
 
+(progn
+  (add-hook 'scala-mode-hook 'mdw-misc-mode-config t)
+  (add-hook 'scala-mode-hook 'mdw-fontify-scala t))
+
 ;;;--------------------------------------------------------------------------
 ;;; C# programming configuration.
 
@@ -2452,6 +2503,8 @@ name, as a symbol."
 (define-derived-mode csharp-mode java-mode "C#"
   "Major mode for editing C# code.")
 
+(add-hook 'csharp-mode-hook 'mdw-fontify-csharp t)
+
 ;;;--------------------------------------------------------------------------
 ;;; F# programming configuration.
 
@@ -2571,6 +2624,11 @@ name, as a symbol."
                      (list "^>" '(0 font-lock-keyword-face)))
                font-lock-keywords)))
 
+(progn
+  (add-hook 'fsharp-mode-hook 'mdw-misc-mode-config t)
+  (add-hook 'fsharp-mode-hook 'mdw-fontify-fsharp t)
+  (add-hook 'inferior-fsharp-mode-hooks 'mdw-fontify-inferior-fsharp t))
+
 ;;;--------------------------------------------------------------------------
 ;;; Go programming configuration.
 
@@ -2632,6 +2690,9 @@ name, as a symbol."
           ;; And anything else is punctuation.
           (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
                 '(0 mdw-punct-face))))))
+(progn
+  (add-hook 'go-mode-hook 'mdw-misc-mode-config t)
+  (add-hook 'go-mode-hook 'mdw-fontify-go t))
 
 ;;;--------------------------------------------------------------------------
 ;;; Rust programming configuration.
@@ -2712,6 +2773,10 @@ name, as a symbol."
   (local-set-key [?{] 'mdw-self-insert-and-indent)
   (local-set-key [?}] 'mdw-self-insert-and-indent))
 
+(progn
+  (add-hook 'rust-mode-hook 'mdw-misc-mode-config t)
+  (add-hook 'rust-mode-hook 'mdw-fontify-rust t))
+
 ;;;--------------------------------------------------------------------------
 ;;; Awk programming configuration.
 
@@ -2768,19 +2833,23 @@ name, as a symbol."
           (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
                 '(0 mdw-punct-face))))))
 
+(progn
+  (add-hook 'awk-mode-hook 'mdw-misc-mode-config t)
+  (add-hook 'awk-mode-hook 'mdw-fontify-awk t))
+
 ;;;--------------------------------------------------------------------------
 ;;; Perl programming style.
 
 ;; Perl indentation style.
 
-(setq perl-indent-level 2)
+(setq-default perl-indent-level 2)
 
-(setq cperl-indent-level 2)
-(setq cperl-continued-statement-offset 2)
-(setq cperl-continued-brace-offset 0)
-(setq cperl-brace-offset -2)
-(setq cperl-brace-imaginary-offset 0)
-(setq cperl-label-offset 0)
+(setq-default cperl-indent-level 2
+             cperl-continued-statement-offset 2
+             cperl-continued-brace-offset 0
+             cperl-brace-offset -2
+             cperl-brace-imaginary-offset 0
+             cperl-label-offset 0)
 
 ;; Define perl fontification style.
 
@@ -2845,9 +2914,18 @@ strip numbers instead."
       (if (re-search-forward "\\(tests\\s-*=>\\s-*\\)\\w*" nil t)
          (replace-match (format "\\1%d" i))))))
 
+(dolist (hook '(perl-mode-hook cperl-mode-hook))
+  (add-hook hook 'mdw-misc-mode-config t)
+  (add-hook hook 'mdw-fontify-perl t))
+
 ;;;--------------------------------------------------------------------------
 ;;; Python programming style.
 
+(setq-default py-indent-offset 2
+             python-indent 2
+             python-indent-offset 2
+             python-fill-docstring-style 'symmetric)
+
 (defun mdw-fontify-pythonic (keywords)
 
   ;; Miscellaneous fiddling.
@@ -2900,10 +2978,15 @@ strip numbers instead."
                ("\\.pxi$" . pyrex-mode))
              auto-mode-alist))
 
+(progn
+  (add-hook 'python-mode-hook 'mdw-misc-mode-config t)
+  (add-hook 'python-mode-hook 'mdw-fontify-python t)
+  (add-hook 'pyrex-mode-hook 'mdw-fontify-pyrex t))
+
 ;;;--------------------------------------------------------------------------
 ;;; Lua programming style.
 
-(setq lua-indent-level 2)
+(setq-default lua-indent-level 2)
 
 (defun mdw-fontify-lua ()
 
@@ -2943,15 +3026,19 @@ strip numbers instead."
           (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
                 '(0 mdw-punct-face))))))
 
+(progn
+  (add-hook 'lua-mode-hook 'mdw-misc-mode-config t)
+  (add-hook 'lua-mode-hook 'mdw-fontify-lua t))
+
 ;;;--------------------------------------------------------------------------
 ;;; Icon programming style.
 
 ;; Icon indentation style.
 
-(setq icon-brace-offset 0
-      icon-continued-brace-offset 0
-      icon-continued-statement-offset 2
-      icon-indent-level 2)
+(setq-default icon-brace-offset 0
+             icon-continued-brace-offset 0
+             icon-continued-statement-offset 2
+             icon-indent-level 2)
 
 ;; Define Icon fontification style.
 
@@ -2998,6 +3085,10 @@ strip numbers instead."
           (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
                 '(0 mdw-punct-face))))))
 
+(progn
+  (add-hook 'icon-mode-hook 'mdw-misc-mode-config t)
+  (add-hook 'icon-mode-hook 'mdw-fontify-icon t))
+
 ;;;--------------------------------------------------------------------------
 ;;; Assembler mode.
 
@@ -3021,11 +3112,18 @@ strip numbers instead."
 (add-hook 'asm-mode-local-variables-hook 'mdw-asm-set-comment)
 (put 'asm-comment-char 'safe-local-variable 'characterp)
 
+(progn
+  (add-hook 'asm-mode-hook 'mdw-misc-mode-config t)
+  (add-hook 'asm-mode-hook 'mdw-fontify-asm t))
+
 ;;;--------------------------------------------------------------------------
 ;;; TCL configuration.
 
+(setq-default tcl-indent-level 2)
+
 (defun mdw-fontify-tcl ()
-  (mapcar #'(lambda (ch) (modify-syntax-entry ch ".")) '(?$))
+  (dolist (ch '(?$))
+    (modify-syntax-entry ch "."))
   (mdw-standard-fill-prefix "\\([ \t]*#+[ \t]*\\)")
   (make-local-variable 'font-lock-keywords)
   (setq font-lock-keywords
@@ -3037,6 +3135,10 @@ strip numbers instead."
         (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
               '(0 mdw-punct-face)))))
 
+(progn
+  (add-hook 'tcl-mode-hook 'mdw-misc-mode-config t)
+  (add-hook 'tcl-mode-hook 'mdw-fontify-tcl t))
+
 ;;;--------------------------------------------------------------------------
 ;;; Dylan programming configuration.
 
@@ -3103,10 +3205,14 @@ strip numbers instead."
                              "\\)")
                      '(0 mdw-punct-face))))))
 
+(progn
+  (add-hook 'dylan-mode-hook 'mdw-misc-mode-config t)
+  (add-hook 'dylan-mode-hook 'mdw-fontify-dylan t))
+
 ;;;--------------------------------------------------------------------------
 ;;; Algol 68 configuration.
 
-(setq a68-indent-step 2)
+(setq-default a68-indent-step 2)
 
 (defun mdw-fontify-algol-68 ()
 
@@ -3145,6 +3251,10 @@ strip numbers instead."
                (list "\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/"
                      '(0 mdw-punct-face))))))
 
+(dolist (hook '(a68-mode-hook a68-mode-hooks))
+  (add-hook hook 'mdw-misc-mode-config t)
+  (add-hook hook 'mdw-fontify-algol-68 t))
+
 ;;;--------------------------------------------------------------------------
 ;;; REXX configuration.
 
@@ -3165,10 +3275,8 @@ strip numbers instead."
   (setq mdw-auto-indent nil)
   (local-set-key [?\C-m] 'mdw-rexx-indent-newline-indent)
   (local-set-key [?*] 'mdw-rexx-electric-*)
-  (mapcar #'(lambda (ch) (modify-syntax-entry ch "w"))
-         '(?! ?? ?# ?@ ?$))
-  (mapcar #'(lambda (ch) (modify-syntax-entry ch "."))
-         '(?¬))
+  (dolist (ch '(?! ?? ?# ?@ ?$)) (modify-syntax-entry ch "w"))
+  (dolist (ch '(?¬)) (modify-syntax-entry ch "."))
   (mdw-standard-fill-prefix "\\([ \t]*/?\*[ \t]*\\)")
 
   ;; Set up keywords and things for fontification.
@@ -3220,9 +3328,18 @@ strip numbers instead."
           (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
                 '(0 mdw-punct-face))))))
 
+(progn
+  (add-hook 'rexx-mode-hook 'mdw-misc-mode-config t)
+  (add-hook 'rexx-mode-hook 'mdw-fontify-rexx t))
+
 ;;;--------------------------------------------------------------------------
 ;;; Standard ML programming style.
 
+(setq-default sml-nested-if-indent t
+             sml-case-indent nil
+             sml-indent-level 4
+             sml-type-of-indent nil)
+
 (defun mdw-fontify-sml ()
 
   ;; Make underscore an honorary letter.
@@ -3270,9 +3387,15 @@ strip numbers instead."
           (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
                 '(0 mdw-punct-face))))))
 
+(progn
+  (add-hook 'sml-mode-hook 'mdw-misc-mode-config t)
+  (add-hook 'sml-mode-hook 'mdw-fontify-sml t))
+
 ;;;--------------------------------------------------------------------------
 ;;; Haskell configuration.
 
+(setq-default haskell-indent-offset 2)
+
 (defun mdw-fontify-haskell ()
 
   ;; Fiddle with syntax table to get comments right.
@@ -3348,10 +3471,14 @@ strip numbers instead."
           (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
                 '(0 mdw-punct-face))))))
 
+(progn
+  (add-hook 'haskell-mode-hook 'mdw-misc-mode-config t)
+  (add-hook 'haskell-mode-hook 'mdw-fontify-haskell t))
+
 ;;;--------------------------------------------------------------------------
 ;;; Erlang configuration.
 
-(setq erlang-electric-commands nil)
+(setq-default erlang-electric-commands nil)
 
 (defun mdw-fontify-erlang ()
 
@@ -3381,6 +3508,10 @@ strip numbers instead."
           (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
                 '(0 mdw-punct-face))))))
 
+(progn
+  (add-hook 'erlang-mode-hook 'mdw-misc-mode-config t)
+  (add-hook 'erlang-mode-hook 'mdw-fontify-erlang t))
+
 ;;;--------------------------------------------------------------------------
 ;;; Texinfo configuration.
 
@@ -3415,9 +3546,18 @@ strip numbers instead."
         (list "[{}]+"
               '(0 mdw-punct-face)))))
 
+(dolist (hook '(texinfo-mode-hook TeXinfo-mode-hook))
+  (add-hook hook 'mdw-misc-mode-config t)
+  (add-hook hook 'mdw-fontify-texinfo t))
+
 ;;;--------------------------------------------------------------------------
 ;;; TeX and LaTeX configuration.
 
+(setq-default LaTeX-table-label "tbl:"
+             TeX-auto-untabify nil
+             LaTeX-syntactic-comments nil
+             LaTeX-fill-break-at-separators '(\\\[))
+
 (defun mdw-fontify-tex ()
   (setq ispell-parser 'tex)
   (turn-on-reftex)
@@ -3506,17 +3646,92 @@ strip numbers instead."
           (unless modified
             (restore-buffer-modified-p nil)))))))
 
-(setq LaTeX-syntactic-comments nil
-      LaTeX-fill-break-at-separators '(\\\[))
+(setq TeX-output-view-style
+      '(("^dvi$"
+        ("^landscape$" "^pstricks$\\|^pst-\\|^psfrag$")
+        "%(o?)dvips -t landscape %d -o && xdg-open %f")
+       ("^dvi$" "^pstricks$\\|^pst-\\|^psfrag$"
+        "%(o?)dvips %d -o && xdg-open %f")
+       ("^dvi$"
+        ("^a4\\(?:dutch\\|paper\\|wide\\)\\|sem-a4$" "^landscape$")
+        "%(o?)xdvi %dS -paper a4r -s 0 %d")
+       ("^dvi$" "^a4\\(?:dutch\\|paper\\|wide\\)\\|sem-a4$"
+        "%(o?)xdvi %dS -paper a4 %d")
+       ("^dvi$"
+        ("^a5\\(?:comb\\|paper\\)$" "^landscape$")
+        "%(o?)xdvi %dS -paper a5r -s 0 %d")
+       ("^dvi$" "^a5\\(?:comb\\|paper\\)$" "%(o?)xdvi %dS -paper a5 %d")
+       ("^dvi$" "^b5paper$" "%(o?)xdvi %dS -paper b5 %d")
+       ("^dvi$" "^letterpaper$" "%(o?)xdvi %dS -paper us %d")
+       ("^dvi$" "^legalpaper$" "%(o?)xdvi %dS -paper legal %d")
+       ("^dvi$" "^executivepaper$" "%(o?)xdvi %dS -paper 7.25x10.5in %d")
+       ("^dvi$" "." "%(o?)xdvi %dS %d")
+       ("^pdf$" "." "xdg-open %o")
+       ("^html?$" "." "sensible-browser %o")))
+
+(setq TeX-view-program-list
+      '(("mupdf" ("mupdf %o" (mode-io-correlate " %(outpage)")))))
+
+(setq TeX-view-program-selection
+      '(((output-dvi style-pstricks) "dvips and gv")
+       (output-dvi "xdvi")
+       (output-pdf "mupdf")
+       (output-html "sensible-browser")))
+
+(setq TeX-open-quote "\""
+      TeX-close-quote "\"")
+
+(setq reftex-use-external-file-finders t
+      reftex-auto-recenter-toc t)
+
+(setq reftex-label-alist
+      '(("theorem" ?T "th:" "~\\ref{%s}" t ("theorems?" "th\\.") -2)
+       ("axiom" ?A "ax:" "~\\ref{%s}" t ("axioms?" "ax\\.") -2)
+       ("definition" ?D "def:" "~\\ref{%s}" t ("definitions?" "def\\.") -2)
+       ("proposition" ?P "prop:" "~\\ref{%s}" t
+        ("propositions?" "prop\\.") -2)
+       ("lemma" ?L "lem:" "~\\ref{%s}" t ("lemmas?" "lem\\.") -2)
+       ("example" ?X "eg:" "~\\ref{%s}" t ("examples?") -2)
+       ("exercise" ?E "ex:" "~\\ref{%s}" t ("exercises?" "ex\\.") -2)
+       ("enumerate" ?i "i:" "~\\ref{%s}" item ("items?"))))
+(setq reftex-section-prefixes
+      '((0 . "part:")
+       (1 . "ch:")
+       (t . "sec:")))
+
+(setq bibtex-field-delimiters 'double-quotes
+      bibtex-align-at-equal-sign t
+      bibtex-entry-format '(realign opts-or-alts required-fields
+                           numerical-fields last-comma delimiters
+                           unify-case sort-fields braces)
+      bibtex-sort-ignore-string-entries nil
+      bibtex-maintain-sorted-entries 'entry-class
+      bibtex-include-OPTkey t
+      bibtex-autokey-names-stretch 1
+      bibtex-autokey-expand-strings t
+      bibtex-autokey-name-separator "-"
+      bibtex-autokey-year-length 4
+      bibtex-autokey-titleword-separator "-"
+      bibtex-autokey-name-year-separator "-"
+      bibtex-autokey-year-title-separator ":")
+
+(progn
+  (dolist (hook '(tex-mode-hook latex-mode-hook
+                               TeX-mode-hook LaTeX-mode-hook))
+    (add-hook hook 'mdw-misc-mode-config t)
+    (add-hook hook 'mdw-fontify-tex t))
+  (add-hook 'bibtex-mode-hook (lambda () (setq fill-column 76))))
 
 ;;;--------------------------------------------------------------------------
 ;;; HTML, CSS, and other web foolishness.
 
-(setq css-indent-offset 2)
+(setq-default css-indent-offset 2)
 
 ;;;--------------------------------------------------------------------------
 ;;; SGML hacking.
 
+(setq-default psgml-html-build-new-buffer nil)
+
 (defun mdw-sgml-mode ()
   (interactive)
   (sgml-mode)
@@ -3563,11 +3778,14 @@ that character only to be normal punctuation.")
           nil)
          (t
           (let ((table (copy-syntax-table (syntax-table))))
-            (mapc (lambda (ch) (modify-syntax-entry ch "." table))
-                  (if (listp flag) flag (list flag)))
+            (dolist (ch (if (listp flag) flag (list flag)))
+              (modify-syntax-entry ch "." table))
             (set-syntax-table table)
             (and font-lock-mode (font-lock-fontify-buffer)))))))
-(add-hook 'conf-mode-local-variables-hook 'mdw-fix-up-quote t t)
+
+(progn
+  (add-hook 'conf-mode-hook 'mdw-misc-mode-config t)
+  (add-hook 'conf-mode-local-variables-hook 'mdw-fix-up-quote t t))
 
 ;;;--------------------------------------------------------------------------
 ;;; Shell scripts.
@@ -3637,6 +3855,10 @@ that character only to be normal punctuation.")
                 (cons (cons 'rc frag)
                       sh-mode-syntax-table-input))))))
 
+(progn
+  (add-hook 'sh-mode-hook 'mdw-misc-mode-config t)
+  (add-hook 'sh-mode-hook 'mdw-setup-sh-script-mode t))
+
 ;;;--------------------------------------------------------------------------
 ;;; Emacs shell mode.
 
@@ -3657,8 +3879,8 @@ that character only to be normal punctuation.")
                  (concat "~" (substring pwd (length home)))
                pwd))
            right)))
-(setq eshell-prompt-function 'mdw-eshell-prompt)
-(setq eshell-prompt-regexp "^\\[[^]>]+\\(\\]\\|>>?\\)")
+(setq-default eshell-prompt-function 'mdw-eshell-prompt)
+(setq-default eshell-prompt-regexp "^\\[[^]>]+\\(\\]\\|>>?\\)")
 
 (defun eshell/e (file) (find-file file) nil)
 (defun eshell/ee (file) (find-file-other-window file) nil)
@@ -3760,9 +3982,11 @@ that character only to be normal punctuation.")
                  messages-mode-keywords)))
   (run-hooks 'cpp-messages-mode-hook))
 
-(add-hook 'messages-mode-hook 'mdw-misc-mode-config t)
-(add-hook 'cpp-messages-mode-hook 'mdw-misc-mode-config t)
-; (add-hook 'messages-file-hook 'mdw-fontify-messages t)
+(progn
+  (add-hook 'messages-mode-hook 'mdw-misc-mode-config t)
+  (add-hook 'cpp-messages-mode-hook 'mdw-misc-mode-config t)
+  ;; (add-hook 'messages-file-hook 'mdw-fontify-messages t)
+  )
 
 ;;;--------------------------------------------------------------------------
 ;;; Messages-file mode.
@@ -3810,7 +4034,8 @@ that character only to be normal punctuation.")
   (setq comment-end "")
   (run-hooks 'mallow-driver-mode-hook))
 
-(add-hook 'mallow-driver-hook 'mdw-misc-mode-config t)
+(progn
+  (add-hook 'mallow-driver-hook 'mdw-misc-mode-config t))
 
 ;;;--------------------------------------------------------------------------
 ;;; NFast debugs.
@@ -3853,31 +4078,7 @@ that character only to be normal punctuation.")
   (run-hooks 'nfast-debug-mode-hook))
 
 ;;;--------------------------------------------------------------------------
-;;; Other languages.
-
-;; Smalltalk.
-
-(defun mdw-setup-smalltalk ()
-  (and mdw-auto-indent
-       (local-set-key "\C-m" 'smalltalk-newline-and-indent))
-  (make-local-variable 'mdw-auto-indent)
-  (setq mdw-auto-indent nil)
-  (local-set-key "\C-i" 'smalltalk-reindent))
-
-(defun mdw-fontify-smalltalk ()
-  (make-local-variable 'font-lock-keywords)
-  (setq font-lock-keywords
-       (list
-        (list "\\<[A-Z][a-zA-Z0-9]*\\>"
-              '(0 font-lock-keyword-face))
-        (list (concat "\\<0\\([xX][0-9a-fA-F_]+\\|[0-7_]+\\)\\|"
-                      "[0-9][0-9_]*\\(\\.[0-9_]*\\|\\)"
-                      "\\([eE]\\([-+]\\|\\)[0-9_]+\\|\\)")
-              '(0 mdw-number-face))
-        (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
-              '(0 mdw-punct-face)))))
-
-;; Lispy languages.
+;;; Lispy languages.
 
 ;; Unpleasant bodge.
 (unless (boundp 'slime-repl-mode-map)
@@ -3901,9 +4102,9 @@ that character only to be normal punctuation.")
   (make-local-variable 'lisp-indent-function)
   (setq lisp-indent-function 'common-lisp-indent-function))
 
-(setq lisp-simple-loop-indentation 2
-      lisp-loop-keyword-indentation 6
-      lisp-loop-forms-indentation 6)
+(setq-default lisp-simple-loop-indentation 2
+             lisp-loop-keyword-indentation 6
+             lisp-loop-forms-indentation 6)
 
 (defmacro mdw-advise-hyperspec-lookup (func args)
   `(defadvice ,func (around mdw-browse-w3m ,args activate compile)
@@ -3944,20 +4145,75 @@ that character only to be normal punctuation.")
              (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
                    '(0 mdw-punct-face)))))
 
-(defun comint-send-and-indent ()
-  (interactive)
-  (comint-send-input)
+;; SLIME setup.
+
+(trap
+ (if (not mdw-fast-startup)
+     (progn
+       (require 'slime-autoloads)
+       (slime-setup '(slime-autodoc slime-c-p-c)))))
+
+(let ((stuff '((cmucl ("cmucl"))
+              (sbcl ("sbcl") :coding-system utf-8-unix)
+              (clisp ("clisp") :coding-system utf-8-unix))))
+  (or (boundp 'slime-lisp-implementations)
+      (setq slime-lisp-implementations nil))
+  (while stuff
+    (let* ((head (car stuff))
+          (found (assq (car head) slime-lisp-implementations)))
+      (setq stuff (cdr stuff))
+      (if found
+         (rplacd found (cdr head))
+       (setq slime-lisp-implementations
+             (cons head slime-lisp-implementations))))))
+(setq slime-default-lisp 'sbcl)
+
+;; Hooks.
+
+(progn
+  (dolist (hook '(emacs-lisp-mode-hook
+                 scheme-mode-hook
+                 lisp-mode-hook
+                 inferior-lisp-mode-hook
+                 lisp-interaction-mode-hook
+                 ielm-mode-hook
+                 slime-repl-mode-hook))
+    (add-hook hook 'mdw-misc-mode-config t)
+    (add-hook hook 'mdw-fontify-lispy t))
+  (add-hook 'lisp-mode-hook 'mdw-common-lisp-indent t)
+  (add-hook 'inferior-lisp-mode-hook
+           #'(lambda () (local-set-key "\C-m" 'comint-send-and-indent)) t))
+
+;;;--------------------------------------------------------------------------
+;;; Other languages.
+
+;; Smalltalk.
+
+(defun mdw-setup-smalltalk ()
   (and mdw-auto-indent
-       (indent-for-tab-command)))
+       (local-set-key "\C-m" 'smalltalk-newline-and-indent))
+  (make-local-variable 'mdw-auto-indent)
+  (setq mdw-auto-indent nil)
+  (local-set-key "\C-i" 'smalltalk-reindent))
 
-(defadvice comint-line-beginning-position
-    (around mdw-calculate-it-properly () activate compile)
-  "Calculate the actual line start for multi-line input."
-  (if (or comint-use-prompt-regexp
-         (eq (field-at-pos (point)) 'output))
-      ad-do-it
-    (setq ad-return-value
-         (constrain-to-field (line-beginning-position) (point)))))
+(defun mdw-fontify-smalltalk ()
+  (make-local-variable 'font-lock-keywords)
+  (setq font-lock-keywords
+       (list
+        (list "\\<[A-Z][a-zA-Z0-9]*\\>"
+              '(0 font-lock-keyword-face))
+        (list (concat "\\<0\\([xX][0-9a-fA-F_]+\\|[0-7_]+\\)\\|"
+                      "[0-9][0-9_]*\\(\\.[0-9_]*\\|\\)"
+                      "\\([eE]\\([-+]\\|\\)[0-9_]+\\|\\)")
+              '(0 mdw-number-face))
+        (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)"
+              '(0 mdw-punct-face)))))
+
+(progn
+  (add-hook 'smalltalk-mode 'mdw-misc-mode-config t)
+  (add-hook 'smalltalk-mode 'mdw-fontify-smalltalk t))
+
+;; m4.
 
 (defun mdw-setup-m4 ()
 
@@ -3969,6 +4225,15 @@ that character only to be normal punctuation.")
   ;; Fill prefix.
   (mdw-standard-fill-prefix "\\([ \t]*\\(?:#+\\|\\<dnl\\>\\)[ \t]*\\)"))
 
+(dolist (hook '(m4-mode-hook autoconf-mode-hook autotest-mode-hook))
+  (add-hook hook #'mdw-misc-mode-config t)
+  (add-hook hook #'mdw-setup-m4 t))
+
+;; Make.
+
+(progn
+  (add-hook 'makefile-mode-hook 'mdw-misc-mode-config t))
+
 ;;;--------------------------------------------------------------------------
 ;;; Text mode.
 
@@ -3982,6 +4247,9 @@ that character only to be normal punctuation.")
 (eval-after-load "flyspell"
   '(define-key flyspell-mode-map "\C-\M-i" nil))
 
+(progn
+  (add-hook 'text-mode-hook 'mdw-text-mode t))
+
 ;;;--------------------------------------------------------------------------
 ;;; Outline and hide/show modes.
 
@@ -4075,7 +4343,7 @@ This allows you to pass a list of arguments through `ansi-term'."
 ;;;--------------------------------------------------------------------------
 ;;; Magit configuration.
 
-(setq magit-diff-refine-hunk 'all
+(setq magit-diff-refine-hunk 't
       magit-view-git-manual-method 'man
       magit-log-margin '(nil age magit-log-margin-width t 18)
       magit-wip-after-save-local-mode-lighter ""