X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/77f3a21cc8747be56f02b6ed4a4d1a11ec04fc33..c7a8da499147305bcb3bb2167fbd00feb0f8284a:/dot-emacs.el diff --git a/dot-emacs.el b/dot-emacs.el index 6643567..90df96a 100644 --- a/dot-emacs.el +++ b/dot-emacs.el @@ -1,4 +1,4 @@ -;;; -*-emacs-lisp-*- +;;; -*- mode: emacs-lisp; coding: utf-8 -*- ;;; ;;; $Id$ ;;; @@ -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 @@ -580,15 +606,15 @@ doesn't cope with anything approximating a complicated case." ,@(cond ((eq window-system 'w32) '(:family "courier new" :height 85)) ((eq window-system 'x) - '(:family "misc-fixed" :width semi-condensed)))) + '(:family "misc-fixed" :height 130 :width semi-condensed)))) (fixed-pitch) (minibuffer-prompt) (mode-line :foreground "blue" :background "yellow" :box (:line-width 1 :style released-button)) - (mode-line-inactive :foreground "grey80" :background "grey30" + (mode-line-inactive :foreground "yellow" :background "blue" :box (:line-width 1 :style released-button)) (scroll-bar :foreground "black" :background "lightgrey") - (fringe :foreground "yellow" :background "grey30") + (fringe :foreground "yellow" :background "black") (show-paren-match-face :background "darkgreen") (show-paren-mismatch-face :background "red") (font-lock-warning-face :background "red" :weight bold) @@ -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" @@ -1643,6 +1673,26 @@ strip numbers instead." (list "[$^_{}#&]" '(0 mdw-punct-face))))) +;;;----- SGML hacking ------------------------------------------------------- + +(defun mdw-sgml-mode () + (interactive) + (sgml-mode) + (mdw-standard-fill-prefix "") + (make-variable-buffer-local 'sgml-delimiters) + (setq sgml-delimiters + '("AND" "&" "COM" "--" "CRO" "&#" "DSC" "]" "DSO" "[" "DTGC" "]" + "DTGO" "[" "ERO" "&" "ETAGO" ":e" "GRPC" ")" "GRPO" "(" "LIT" "\"" + "LITA" "'" "MDC" ">" "MDO" "" "PIO" "" + "XML-ECOM" "-->" "XML-PIC" "?>" "XML-SCOM" "