dot-emacs: Fix the eval-when-compile stanza.
[profile] / dot-emacs.el
index 55bd054..5d650cf 100644 (file)
 ;;; along with this program; if not, write to the Free Software Foundation,
 ;;; Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
+;;;----- Check command-line -------------------------------------------------
+
+(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))
+  (message "probe = %s" probe)
+  (message "next = %s" next)
+  (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))))
+
 ;;;----- Some general utilities ---------------------------------------------
 
+(eval-when-compile
+  (unless (fboundp 'make-regexp)
+    (load "make-regexp"))
+  (require 'cl))
+
+(defmacro mdw-regexps (&rest list)
+  "Turn a LIST of strings into a single regular expression at compile-time."
+  `',(make-regexp list))
+
 ;; --- Some error trapping ---
 ;;
 ;; If individual bits of this file go tits-up, we don't particularly want
 (defun mdw-config (sym)
   "Read the configuration variable named SYM."
   (unless mdw-config
-    (setq mdw-config (with-temp-buffer
-                      (insert-file-contents "~/.mdw.conf")
-                      (replace-regexp "^[ \t]*\\(#.*\\|\\)\n" ""
-                                      nil (point-min) (point-max))
-                      (replace-regexp (concat "^[ \t]*"
-                                              "\\([-a-zA-Z0-9_.]*\\)"
-                                              "[ \t]*=[ \t]*"
-                                              "\\(.*[^ \t\n]\\|\\)"
-                                              "[ \t]**\\(\n\\|$\\)")
-                                      "(\\1 . \"\\2\") "
-                                      nil (point-min) (point-max))
-                      (car (read-from-string
-                            (concat "(" (buffer-string) ")"))))))
+    (setq mdw-config
+         (flet ((replace (what with)
+                  (goto-char (point-min))
+                  (while (re-search-forward what nil t)
+                    (replace-match with t))))
+           (with-temp-buffer
+             (insert-file-contents "~/.mdw.conf")
+             (replace  "^[ \t]*\\(#.*\\|\\)\n" "")
+             (replace (concat "^[ \t]*"
+                              "\\([-a-zA-Z0-9_.]*\\)"
+                              "[ \t]*=[ \t]*"
+                              "\\(.*[^ \t\n]\\|\\)"
+                              "[ \t]**\\(\n\\|$\\)")
+                      "(\\1 . \"\\2\")\n")
+             (car (read-from-string
+                   (concat "(" (buffer-string) ")")))))))
   (cdr (assq sym mdw-config)))
 
 ;; --- Is an Emacs library available? ---
@@ -262,22 +292,23 @@ input lists are not modified, although they'll probably become garbage."
     (or arg (progn
              (goto-char (point-max))
              (insert "\nNP: ")
-             (insert-file np-file)))))
-
-(trap
-  (require 'tramp)
-  (require 'autorevert)
-  (defun mdw-check-autorevert ()
-    (if (and (buffer-file-name)
-            (tramp-tramp-file-p (buffer-file-name)))
-       (unless global-auto-revert-ignore-buffer
-         (setq global-auto-revert-ignore-buffer 'tramp))
-       (if (eq global-auto-revert-ignore-buffer 'tramp)
-           (setq global-auto-revert-ignore-buffer nil))))
-  (defadvice find-file (after mdw-autorevert activate)
-    (mdw-check-autorevert))
-  (defadvice write-file (after mdw-autorevert activate)
-    (mdw-check-autorevert)))
+             (insert-file-contents np-file)))))
+
+(defun mdw-check-autorevert ()
+  "Sets global-auto-revert-ignore-buffer appropriately for this buffer,
+taking into consideration whether it's been found using tramp, which seems to
+get itself into a twist."
+  (cond ((and (buffer-file-name)
+             (tramp-tramp-file-p (buffer-file-name)))
+        (unless global-auto-revert-ignore-buffer
+          (setq global-auto-revert-ignore-buffer 'tramp)))
+       ((eq global-auto-revert-ignore-buffer 'tramp)
+        (setq global-auto-revert-ignore-buffer nil))))
+
+(defadvice find-file (after mdw-autorevert activate)
+  (mdw-check-autorevert))
+(defadvice write-file (after mdw-autorevert activate)
+  (mdw-check-autorevert))
 
 (defun mdwmail-mode ()
   "Major mode for editing news and mail messages from external programs
@@ -617,12 +648,14 @@ doesn't cope with anything approximating a complicated case."
     (font-lock-reference-face :weight bold)
     (woman-bold-face :weight bold)
     (woman-italic-face :slant italic)
-    (diff-header-face :foreground "skyblue1")
-    (diff-index-face :weight bold)
-    (diff-file-header-face)
-    (diff-context-face :foreground "grey70")
-    (diff-added-face :foreground "white")
-    (diff-removed-face :foreground "white" :slant italic)
+    (diff-index :weight bold)
+    (diff-file-header :weight bold)
+    (diff-hunk-header :foreground "SkyBlue1")
+    (diff-function :foreground "SkyBlue1" :weight bold)
+    (diff-header :background "grey10")
+    (diff-added :foreground "green")
+    (diff-removed :foreground "red")
+    (diff-context)
     (whizzy-slice-face :background "grey10")
     (whizzy-error-face :background "darkred")
     (trailing-whitespace :background "red")
@@ -661,7 +694,7 @@ doesn't cope with anything approximating a complicated case."
                                  (label . 0)
                                  (case-label . +)
                                  (access-label . -)
-                                 (inclass . ++)
+                                 (inclass . +)
                                  (inline-open . ++)
                                  (statement-cont . 0)
                                  (statement-case-intro . +)))
@@ -693,7 +726,7 @@ doesn't cope with anything approximating a complicated case."
 
   (make-local-variable 'font-lock-keywords)
   (let ((c-keywords
-        (make-regexp '(
+        (mdw-regexps '(
                        "and"           ;C++
                        "and_eq"        ;C++
                        "asm"           ;K&R, GCC
@@ -793,11 +826,11 @@ doesn't cope with anything approximating a complicated case."
                        "__volatile__"  ;GCC
                        )))
        (preprocessor-keywords
-        (make-regexp '("assert" "define" "elif" "else" "endif" "error"
+        (mdw-regexps '("assert" "define" "elif" "else" "endif" "error"
                        "ident" "if" "ifdef" "ifndef" "import" "include"
                        "line" "pragma" "unassert" "undef" "warning")))
        (objc-keywords
-        (make-regexp '("class" "defs" "encode" "end" "implementation"
+        (mdw-regexps '("class" "defs" "encode" "end" "implementation"
                        "interface" "private" "protected" "protocol" "public"
                        "selector"))))
 
@@ -876,7 +909,7 @@ doesn't cope with anything approximating a complicated case."
 
   (make-local-variable 'font-lock-keywords)
   (let ((c-keywords
-        (make-regexp '("break" "case" "cd" "continue" "define" "default"
+        (mdw-regexps '("break" "case" "cd" "continue" "define" "default"
                        "do" "else" "exit" "for" "global" "goto" "help" "if"
                        "local" "mat" "obj" "print" "quit" "read" "return"
                        "show" "static" "switch" "while" "write"))))
@@ -943,7 +976,7 @@ doesn't cope with anything approximating a complicated case."
 
   (make-local-variable 'font-lock-keywords)
   (let ((java-keywords
-        (make-regexp '("abstract" "boolean" "break" "byte" "case" "catch"
+        (mdw-regexps '("abstract" "boolean" "break" "byte" "case" "catch"
                        "char" "class" "const" "continue" "default" "do"
                        "double" "else" "extends" "final" "finally" "float"
                        "for" "goto" "if" "implements" "import" "instanceof"
@@ -1018,7 +1051,7 @@ doesn't cope with anything approximating a complicated case."
 
   (make-local-variable 'font-lock-keywords)
   (let ((csharp-keywords
-        (make-regexp '("abstract" "as" "base" "bool" "break"
+        (mdw-regexps '("abstract" "as" "base" "bool" "break"
                        "byte" "case" "catch" "char" "checked"
                        "class" "const" "continue" "decimal" "default"
                        "delegate" "do" "double" "else" "enum"
@@ -1095,7 +1128,7 @@ doesn't cope with anything approximating a complicated case."
 
   (make-local-variable 'font-lock-keywords)
   (let ((c-keywords
-        (make-regexp '("BEGIN" "END" "ARGC" "ARGIND" "ARGV" "CONVFMT"
+        (mdw-regexps '("BEGIN" "END" "ARGC" "ARGIND" "ARGV" "CONVFMT"
                        "ENVIRON" "ERRNO" "FIELDWIDTHS" "FILENAME" "FNR"
                        "FS" "IGNORECASE" "NF" "NR" "OFMT" "OFS" "ORS" "RS"
                        "RSTART" "RLENGTH" "RT" "SUBSEP"
@@ -1159,7 +1192,7 @@ doesn't cope with anything approximating a complicated case."
 
   (make-local-variable 'font-lock-keywords)
   (let ((perl-keywords
-        (make-regexp '("and" "cmp" "continue" "do" "else" "elsif" "eq"
+        (mdw-regexps '("and" "cmp" "continue" "do" "else" "elsif" "eq"
                        "for" "foreach" "ge" "gt" "goto" "if"
                        "last" "le" "lt" "local" "my" "ne" "next" "or"
                        "package" "redo" "require" "return" "sub"
@@ -1204,7 +1237,6 @@ strip numbers instead."
 
 ;; --- Define Python fontification style ---
 
-(trap (require 'pyrex-mode))
 (defun mdw-fontify-python ()
 
   ;; --- Miscellaneous fiddling ---
@@ -1216,7 +1248,7 @@ strip numbers instead."
 
   (make-local-variable 'font-lock-keywords)
   (let ((python-keywords
-        (make-regexp '("and" "as" "assert" "break" "class" "continue" "def"
+        (mdw-regexps '("and" "as" "assert" "break" "class" "continue" "def"
                        "del" "elif" "else" "except" "exec" "finally" "for"
                        "from" "global" "if" "import" "in" "is" "lambda"
                        "not" "or" "pass" "print" "raise" "return" "try"
@@ -1391,7 +1423,7 @@ strip numbers instead."
 
   (make-local-variable 'font-lock-keywords)
   (let ((rexx-keywords
-        (make-regexp '("address" "arg" "by" "call" "digits" "do" "drop"
+        (mdw-regexps '("address" "arg" "by" "call" "digits" "do" "drop"
                        "else" "end" "engineering" "exit" "expose" "for"
                        "forever" "form" "fuzz" "if" "interpret" "iterate"
                        "leave" "linein" "name" "nop" "numeric" "off" "on"
@@ -1450,7 +1482,7 @@ strip numbers instead."
 
   (make-local-variable 'font-lock-keywords)
   (let ((sml-keywords
-        (make-regexp '("abstype" "and" "andalso" "as"
+        (mdw-regexps '("abstype" "and" "andalso" "as"
                        "case"
                        "datatype" "do"
                        "else" "end" "eqtype" "exception"
@@ -1510,7 +1542,7 @@ strip numbers instead."
 
   (make-local-variable 'font-lock-keywords)
   (let ((haskell-keywords
-        (make-regexp '("as" "case" "ccall" "class" "data" "default"
+        (mdw-regexps '("as" "case" "ccall" "class" "data" "default"
                        "deriving" "do" "else" "foreign" "hiding" "if"
                        "import" "in" "infix" "infixl" "infixr" "instance"
                        "let" "module" "newtype" "of" "qualified" "safe"
@@ -1722,7 +1754,7 @@ strip numbers instead."
   (make-local-variable 'font-lock-defaults)
   (make-local-variable 'message-mode-keywords)
   (let ((keywords
-        (make-regexp '("array" "bitmap" "callback" "docs[ \t]+enum"
+        (mdw-regexps '("array" "bitmap" "callback" "docs[ \t]+enum"
                        "export" "enum" "fixed-octetstring" "flags"
                        "harmless" "map" "nested" "optional"
                        "optional-tagged" "package" "primitive"
@@ -1767,7 +1799,7 @@ strip numbers instead."
   (setq comment-start "/* ")
   (setq comment-end " */")
   (let ((preprocessor-keywords
-        (make-regexp '("assert" "define" "elif" "else" "endif" "error"
+        (mdw-regexps '("assert" "define" "elif" "else" "endif" "error"
                       "ident" "if" "ifdef" "ifndef" "import" "include"
                       "line" "pragma" "unassert" "undef" "warning"))))
     (setq message-mode-keywords
@@ -1811,7 +1843,7 @@ strip numbers instead."
   (make-local-variable 'font-lock-defaults)
   (make-local-variable 'mallow-driver-mode-keywords)
   (let ((keywords
-        (make-regexp '("each" "divert" "file" "if"
+        (mdw-regexps '("each" "divert" "file" "if"
                        "perl" "set" "string" "type" "write"))))
     (setq mallow-driver-mode-keywords
          (list
@@ -1948,7 +1980,7 @@ strip numbers instead."
   (setq fill-column 72)
   (flyspell-mode t)
   (mdw-standard-fill-prefix
-   "\\([ \t]*\\([A-Za-z0-9]*[>#|:] ?\\)*[ \t]*\\)" 3)
+   "\\([ \t]*\\([>#|:] ?\\)*[ \t]*\\)" 3)
   (auto-fill-mode 1))
 
 ;;;----- Shell mode ---------------------------------------------------------