emacs: Stuff for fast startup.
authorMark Wooding <mdw@distorted.org.uk>
Thu, 3 Apr 2008 09:02:45 +0000 (10:02 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Thu, 3 Apr 2008 09:02:45 +0000 (10:02 +0100)
Provide a command-line switch --mdw-fast-startup which inhibits loading
some long-winded things which aren't needed in simple cases.

Also preglue regular expressions together using make-regexp rather than
doing it at startup time.

dot-emacs.el
emacs

index bc9807e..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
@@ -695,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
@@ -795,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"))))
 
@@ -878,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"))))
@@ -945,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"
@@ -1020,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"
@@ -1097,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"
@@ -1161,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"
@@ -1206,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 ---
@@ -1218,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"
@@ -1393,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"
@@ -1452,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"
@@ -1512,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"
@@ -1724,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"
@@ -1769,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
@@ -1813,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
@@ -1950,7 +1975,7 @@ strip numbers instead."
   (setq fill-column 72)
   (flyspell-mode t)
   (mdw-standard-fill-prefix
   (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 ---------------------------------------------------------
diff --git a/emacs b/emacs
index 6f9bf4d..72b60ed 100644 (file)
--- a/emacs
+++ b/emacs
      (not (memq 'GIT vc-handled-backends))
      (setq vc-handled-backends (cons 'GIT vc-handled-backends)))
 (and (library-exists-p "quilt")
      (not (memq 'GIT vc-handled-backends))
      (setq vc-handled-backends (cons 'GIT vc-handled-backends)))
 (and (library-exists-p "quilt")
+     (not mdw-fast-startup)
      (load "quilt"))
 
      (load "quilt"))
 
-(trap
-  (or (fboundp 'make-regexp)
-      (load "make-regexp")))
-
-(trap (require 'tex-site))
+(trap (or mdw-fast-startup (require 'tex-site)))
 
 ;; --- Skeleton stuff ---
 
 
 ;; --- Skeleton stuff ---
 
-(trap (require 'skel-init))
+(trap (or mdw-fast-startup (require 'skel-init)))
 
 ;; --- Window system-dependent things ---
 
 
 ;; --- Window system-dependent things ---
 
 (setq dired-deletion-confirmer         ;Make deletion easier in dired
       (symbol-function 'y-or-n-p))
 (setq dired-listing-switches "-alF")   ;Do `ls -F' things in dired windows
 (setq dired-deletion-confirmer         ;Make deletion easier in dired
       (symbol-function 'y-or-n-p))
 (setq dired-listing-switches "-alF")   ;Do `ls -F' things in dired windows
+(setq wdired-allow-to-change-permissions t)
 (setq case-fold-file-names nil)                ;Don't translate file names (grr...)
 (setq scroll-step 5)                   ;Don't scroll too much at a time
 (setq-default fill-column 77)          ;I use rather narrow windows
 (setq case-fold-file-names nil)                ;Don't translate file names (grr...)
 (setq scroll-step 5)                   ;Don't scroll too much at a time
 (setq-default fill-column 77)          ;I use rather narrow windows
 
 (trap
   (and (string-match "linux" (symbol-name system-type))
 
 (trap
   (and (string-match "linux" (symbol-name system-type))
+       (not mdw-fast-startup)
        (progn (require 'mailcrypt-init)
              (require 'mailcrypt)
              (setq mc-default-scheme 'mc-scheme-gpg)
        (progn (require 'mailcrypt-init)
              (require 'mailcrypt)
              (setq mc-default-scheme 'mc-scheme-gpg)
 (add-hook 'slime-repl-mode-hook 'mdw-fontify-lispy t)
 (add-hook 'lisp-mode-hook 'mdw-common-lisp-indent t)
 (trap
 (add-hook 'slime-repl-mode-hook 'mdw-fontify-lispy t)
 (add-hook 'lisp-mode-hook 'mdw-common-lisp-indent t)
 (trap
 (require 'slime-autoloads)
-  (slime-setup '(slime-autodoc)))
-;;(trap (require 'xscheme))
-;;(setq-default xscheme-process-command-line "scheme -large -emacs")
(if (not mdw-fast-startup)
+     (progn
+       (require 'slime-autoloads)
+       (slime-setup '(slime-autodoc)))))
 (add-hook 'inferior-lisp-mode-hook
          #'(lambda ()
              (local-set-key "\C-m" 'comint-send-and-indent)) t)
 (add-hook 'inferior-lisp-mode-hook
          #'(lambda ()
              (local-set-key "\C-m" 'comint-send-and-indent)) t)