Now that Emacs starts up pretty quick, favour it over lesser editors.
[profile] / dot-emacs.el
index 9fe9741..90df96a 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.
 
 ;;; 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 ---------------------------------------------
 
 ;;;----- Some general utilities ---------------------------------------------
 
+(evan-when-compile (or (fboundp 'make-regexp)
+                      (load "make-regexp")))
+
+(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
 ;; --- Some error trapping ---
 ;;
 ;; If individual bits of this file go tits-up, we don't particularly want
@@ -264,20 +289,21 @@ input lists are not modified, although they'll probably become garbage."
              (insert "\nNP: ")
              (insert-file np-file)))))
 
              (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)))
+(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
 
 (defun mdwmail-mode ()
   "Major mode for editing news and mail messages from external programs
@@ -605,6 +631,9 @@ doesn't cope with anything approximating a complicated case."
     (mdw-number-face :foreground "yellow")
     (font-lock-function-name-face :weight bold)
     (font-lock-variable-name-face :slant italic)
     (mdw-number-face :foreground "yellow")
     (font-lock-function-name-face :weight bold)
     (font-lock-variable-name-face :slant italic)
+    (font-lock-comment-delimiter-face
+       :foreground ,(if window-system "SeaGreen1" "green")
+       :slant italic)
     (font-lock-comment-face
        :foreground ,(if window-system "SeaGreen1" "green")
        :slant italic)
     (font-lock-comment-face
        :foreground ,(if window-system "SeaGreen1" "green")
        :slant italic)
@@ -614,12 +643,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)
     (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")
     (whizzy-slice-face :background "grey10")
     (whizzy-error-face :background "darkred")
     (trailing-whitespace :background "red")
@@ -658,7 +689,7 @@ doesn't cope with anything approximating a complicated case."
                                  (label . 0)
                                  (case-label . +)
                                  (access-label . -)
                                  (label . 0)
                                  (case-label . +)
                                  (access-label . -)
-                                 (inclass . ++)
+                                 (inclass . +)
                                  (inline-open . ++)
                                  (statement-cont . 0)
                                  (statement-case-intro . +)))
                                  (inline-open . ++)
                                  (statement-cont . 0)
                                  (statement-case-intro . +)))
@@ -690,7 +721,7 @@ doesn't cope with anything approximating a complicated case."
 
   (make-local-variable 'font-lock-keywords)
   (let ((c-keywords
 
   (make-local-variable 'font-lock-keywords)
   (let ((c-keywords
-        (make-regexp '(
+        (mdw-regexps '(
                        "and"           ;C++
                        "and_eq"        ;C++
                        "asm"           ;K&R, GCC
                        "and"           ;C++
                        "and_eq"        ;C++
                        "asm"           ;K&R, GCC
@@ -790,11 +821,11 @@ doesn't cope with anything approximating a complicated case."
                        "__volatile__"  ;GCC
                        )))
        (preprocessor-keywords
                        "__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
                        "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"))))
 
                        "interface" "private" "protected" "protocol" "public"
                        "selector"))))
 
@@ -873,7 +904,7 @@ doesn't cope with anything approximating a complicated case."
 
   (make-local-variable 'font-lock-keywords)
   (let ((c-keywords
 
   (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"))))
                        "do" "else" "exit" "for" "global" "goto" "help" "if"
                        "local" "mat" "obj" "print" "quit" "read" "return"
                        "show" "static" "switch" "while" "write"))))
@@ -940,7 +971,7 @@ doesn't cope with anything approximating a complicated case."
 
   (make-local-variable 'font-lock-keywords)
   (let ((java-keywords
 
   (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"
                        "char" "class" "const" "continue" "default" "do"
                        "double" "else" "extends" "final" "finally" "float"
                        "for" "goto" "if" "implements" "import" "instanceof"
@@ -1015,7 +1046,7 @@ doesn't cope with anything approximating a complicated case."
 
   (make-local-variable 'font-lock-keywords)
   (let ((csharp-keywords
 
   (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"
                        "byte" "case" "catch" "char" "checked"
                        "class" "const" "continue" "decimal" "default"
                        "delegate" "do" "double" "else" "enum"
@@ -1092,7 +1123,7 @@ doesn't cope with anything approximating a complicated case."
 
   (make-local-variable 'font-lock-keywords)
   (let ((c-keywords
 
   (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"
                        "ENVIRON" "ERRNO" "FIELDWIDTHS" "FILENAME" "FNR"
                        "FS" "IGNORECASE" "NF" "NR" "OFMT" "OFS" "ORS" "RS"
                        "RSTART" "RLENGTH" "RT" "SUBSEP"
@@ -1156,7 +1187,7 @@ doesn't cope with anything approximating a complicated case."
 
   (make-local-variable 'font-lock-keywords)
   (let ((perl-keywords
 
   (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"
                        "for" "foreach" "ge" "gt" "goto" "if"
                        "last" "le" "lt" "local" "my" "ne" "next" "or"
                        "package" "redo" "require" "return" "sub"
@@ -1201,7 +1232,6 @@ strip numbers instead."
 
 ;; --- Define Python fontification style ---
 
 
 ;; --- Define Python fontification style ---
 
-(trap (require 'pyrex-mode))
 (defun mdw-fontify-python ()
 
   ;; --- Miscellaneous fiddling ---
 (defun mdw-fontify-python ()
 
   ;; --- Miscellaneous fiddling ---
@@ -1213,7 +1243,7 @@ strip numbers instead."
 
   (make-local-variable 'font-lock-keywords)
   (let ((python-keywords
 
   (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"
                        "del" "elif" "else" "except" "exec" "finally" "for"
                        "from" "global" "if" "import" "in" "is" "lambda"
                        "not" "or" "pass" "print" "raise" "return" "try"
@@ -1388,7 +1418,7 @@ strip numbers instead."
 
   (make-local-variable 'font-lock-keywords)
   (let ((rexx-keywords
 
   (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"
                        "else" "end" "engineering" "exit" "expose" "for"
                        "forever" "form" "fuzz" "if" "interpret" "iterate"
                        "leave" "linein" "name" "nop" "numeric" "off" "on"
@@ -1447,7 +1477,7 @@ strip numbers instead."
 
   (make-local-variable 'font-lock-keywords)
   (let ((sml-keywords
 
   (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"
                        "case"
                        "datatype" "do"
                        "else" "end" "eqtype" "exception"
@@ -1507,7 +1537,7 @@ strip numbers instead."
 
   (make-local-variable 'font-lock-keywords)
   (let ((haskell-keywords
 
   (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"
                        "deriving" "do" "else" "foreign" "hiding" "if"
                        "import" "in" "infix" "infixl" "infixr" "instance"
                        "let" "module" "newtype" "of" "qualified" "safe"
@@ -1719,7 +1749,7 @@ strip numbers instead."
   (make-local-variable 'font-lock-defaults)
   (make-local-variable 'message-mode-keywords)
   (let ((keywords
   (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"
                        "export" "enum" "fixed-octetstring" "flags"
                        "harmless" "map" "nested" "optional"
                        "optional-tagged" "package" "primitive"
@@ -1764,7 +1794,7 @@ strip numbers instead."
   (setq comment-start "/* ")
   (setq comment-end " */")
   (let ((preprocessor-keywords
   (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
                       "ident" "if" "ifdef" "ifndef" "import" "include"
                       "line" "pragma" "unassert" "undef" "warning"))))
     (setq message-mode-keywords
@@ -1808,7 +1838,7 @@ strip numbers instead."
   (make-local-variable 'font-lock-defaults)
   (make-local-variable 'mallow-driver-mode-keywords)
   (let ((keywords
   (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
                        "perl" "set" "string" "type" "write"))))
     (setq mallow-driver-mode-keywords
          (list
@@ -1936,13 +1966,16 @@ strip numbers instead."
   (and mdw-auto-indent
        (indent-for-tab-command)))
 
   (and mdw-auto-indent
        (indent-for-tab-command)))
 
+(defun mdw-setup-m4 ()
+  (mdw-standard-fill-prefix "\\([ \t]*\\(?:#+\\|\\<dnl\\>\\)[ \t]*\\)"))
+
 ;;;----- Text mode ----------------------------------------------------------
 
 (defun mdw-text-mode ()
   (setq fill-column 72)
   (flyspell-mode t)
   (mdw-standard-fill-prefix
 ;;;----- Text mode ----------------------------------------------------------
 
 (defun mdw-text-mode ()
   (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 ---------------------------------------------------------
   (auto-fill-mode 1))
 
 ;;;----- Shell mode ---------------------------------------------------------