From c7a8da499147305bcb3bb2167fbd00feb0f8284a Mon Sep 17 00:00:00 2001 Message-Id: From: Mark Wooding Date: Thu, 3 Apr 2008 10:02:45 +0100 Subject: [PATCH] emacs: Stuff for fast startup. Organization: Straylight/Edgeware From: Mark Wooding 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 | 87 +++++++++++++++++++++++++++++++++------------------- emacs | 19 ++++++------ 2 files changed, 65 insertions(+), 41 deletions(-) diff --git a/dot-emacs.el b/dot-emacs.el index bc9807e..90df96a 100644 --- a/dot-emacs.el +++ b/dot-emacs.el @@ -23,8 +23,33 @@ ;;; 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 --------------------------------------------- +(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 @@ -264,20 +289,21 @@ (defun np (&optional arg) (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 @@ -695,7 +721,7 @@ (defun mdw-fontify-c-and-c++ () (make-local-variable 'font-lock-keywords) (let ((c-keywords - (make-regexp '( + (mdw-regexps '( "and" ;C++ "and_eq" ;C++ "asm" ;K&R, GCC @@ -795,11 +821,11 @@ (defun mdw-fontify-c-and-c++ () "__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")))) @@ -878,7 +904,7 @@ (defun mdw-fontify-apcalc () (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")))) @@ -945,7 +971,7 @@ (defun mdw-fontify-java () (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" @@ -1020,7 +1046,7 @@ (defun mdw-fontify-csharp () (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" @@ -1097,7 +1123,7 @@ (defun mdw-fontify-awk () (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" @@ -1161,7 +1187,7 @@ (defun mdw-fontify-perl () (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" @@ -1206,7 +1232,6 @@ (defun perl-number-tests (&optional arg) ;; --- Define Python fontification style --- -(trap (require 'pyrex-mode)) (defun mdw-fontify-python () ;; --- Miscellaneous fiddling --- @@ -1218,7 +1243,7 @@ (defun mdw-fontify-python () (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" @@ -1393,7 +1418,7 @@ (defun mdw-fontify-rexx () (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" @@ -1452,7 +1477,7 @@ (defun mdw-fontify-sml () (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" @@ -1512,7 +1537,7 @@ (defun mdw-fontify-haskell () (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" @@ -1724,7 +1749,7 @@ (defun message-mode-guts () (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" @@ -1769,7 +1794,7 @@ (defun cpp-messages-mode () (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 @@ -1813,7 +1838,7 @@ (defun mallow-driver-mode () (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 @@ -1950,7 +1975,7 @@ (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 --------------------------------------------------------- diff --git a/emacs b/emacs index 6f9bf4d..72b60ed 100644 --- a/emacs +++ b/emacs @@ -43,17 +43,14 @@ (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")) -(trap - (or (fboundp 'make-regexp) - (load "make-regexp"))) - -(trap (require 'tex-site)) +(trap (or mdw-fast-startup (require 'tex-site))) ;; --- Skeleton stuff --- -(trap (require 'skel-init)) +(trap (or mdw-fast-startup (require 'skel-init))) ;; --- Window system-dependent things --- @@ -146,6 +143,7 @@ (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 @@ -253,6 +251,7 @@ (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) @@ -509,10 +508,10 @@ (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) -- [mdw]