X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/502f4699defabcce0ad478ef82e3929d33f3d614..f3f622e3354e22e13522966d971e463356ca3c80:/dot-emacs.el diff --git a/dot-emacs.el b/dot-emacs.el index 9fe9741..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 @@ input lists are not modified, although they'll probably become garbage." (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 @@ -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) + (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) @@ -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) - (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") @@ -658,7 +689,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 . +))) @@ -690,7 +721,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 @@ -790,11 +821,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")))) @@ -873,7 +904,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")))) @@ -940,7 +971,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" @@ -1015,7 +1046,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" @@ -1092,7 +1123,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" @@ -1156,7 +1187,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" @@ -1201,7 +1232,6 @@ strip numbers instead." ;; --- Define Python fontification style --- -(trap (require 'pyrex-mode)) (defun mdw-fontify-python () ;; --- Miscellaneous fiddling --- @@ -1213,7 +1243,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" @@ -1388,7 +1418,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" @@ -1447,7 +1477,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" @@ -1507,7 +1537,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" @@ -1719,7 +1749,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" @@ -1764,7 +1794,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 @@ -1808,7 +1838,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 @@ -1936,13 +1966,16 @@ strip numbers instead." (and mdw-auto-indent (indent-for-tab-command))) +(defun mdw-setup-m4 () + (mdw-standard-fill-prefix "\\([ \t]*\\(?:#+\\|\\\\)[ \t]*\\)")) + ;;;----- 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 ---------------------------------------------------------