X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/99fe6ef5f1b75f8d040e36e7050ec5623d6318b8..1e7a9479476de03b7d9e5a31099716999bc3c239:/el/dot-emacs.el diff --git a/el/dot-emacs.el b/el/dot-emacs.el index c9b9623..b7a1cc2 100644 --- a/el/dot-emacs.el +++ b/el/dot-emacs.el @@ -21,7 +21,8 @@ ;;; 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 ------------------------------------------------- +;;;-------------------------------------------------------------------------- +;;; Check command-line. (defvar mdw-fast-startup nil "Whether .emacs should optimize for rapid startup. @@ -37,7 +38,8 @@ This may be at the expense of cool features.") (setq probe next))) (setq next (cdr next)))) -;;;----- Some general utilities --------------------------------------------- +;;;-------------------------------------------------------------------------- +;;; Some general utilities. (eval-when-compile (unless (fboundp 'make-regexp) @@ -48,7 +50,7 @@ This may be at the expense of cool features.") "Turn a LIST of strings into a single regular expression at compile-time." `',(make-regexp list)) -;; --- Some error trapping --- +;; Some error trapping. ;; ;; If individual bits of this file go tits-up, we don't particularly want ;; the whole lot to stop right there and then, because it's bloody annoying. @@ -61,7 +63,7 @@ This may be at the expense of cool features.") (error-message-string err) ',forms)))) -;; --- Configuration reading --- +;; Configuration reading. (defvar mdw-config nil) (defun mdw-config (sym) @@ -85,7 +87,7 @@ This may be at the expense of cool features.") (concat "(" (buffer-string) ")"))))))) (cdr (assq sym mdw-config))) -;; --- Set up the load path convincingly --- +;; Set up the load path convincingly. (dolist (dir (append (and (boundp 'debian-emacs-flavor) (list (concat "/usr/share/" @@ -96,11 +98,13 @@ This may be at the expense of cool features.") (not (member sub load-path))) (setq load-path (nconc load-path (list sub)))))) -;; --- Is an Emacs library available? --- +;; Is an Emacs library available? (defun library-exists-p (name) - "Return non-nil if NAME.el (or NAME.elc) is somewhere on the Emacs load -path. The non-nil value is the filename we found for the library." + "Return non-nil if NAME is an available library. +Return non-nil if NAME.el (or NAME.elc) somewhere on the Emacs +load path. The non-nil value is the filename we found for the +library." (let ((path load-path) elt (foundp nil)) (while (and path (not foundp)) (setq elt (car path)) @@ -116,7 +120,7 @@ path. The non-nil value is the filename we found for the library." (and (library-exists-p file) (autoload symbol file docstring interactivep type))) -;; --- Splitting windows --- +;; Splitting windows. (unless (fboundp 'scroll-bar-columns) (defun scroll-bar-columns (side) @@ -156,14 +160,14 @@ path. The non-nil value is the filename we found for the library." (other-window 1)) (select-window win))) -;; --- Functions for sexp diary entries --- +;; Functions for sexp diary entries. (defun mdw-weekday (l) "Return non-nil if `date' falls on one of the days of the week in L. - -L is a list of day numbers (from 0 to 6 for Sunday through to Saturday) or -symbols `sunday', `monday', etc. (or a mixture). If the date stored in -`date' falls on a listed day, then the function returns non-nil." +L is a list of day numbers (from 0 to 6 for Sunday through to +Saturday) or symbols `sunday', `monday', etc. (or a mixture). If +the date stored in `date' falls on a listed day, then the +function returns non-nil." (let ((d (calendar-day-of-week date))) (or (memq d l) (memq (nth d '(sunday monday tuesday wednesday @@ -188,7 +192,7 @@ symbols `sunday', `monday', etc. (or a mixture). If the date stored in (nth 2 when)))))))) (eq w d))) -;; --- Fighting with Org-mode's evil key maps --- +;; Fighting with Org-mode's evil key maps. (defvar mdw-evil-keymap-keys '(([S-up] . [?\C-c up]) @@ -225,10 +229,26 @@ Evil key bindings are defined in `mdw-evil-keymap-keys'." (dolist (key replacements) (define-key keymap key binding)))))) -;;;----- Mail and news hacking ---------------------------------------------- +(eval-after-load "org" + '(progn + (push '("strayman" + "\\documentclass{strayman} +\\usepackage[utf8]{inputenc} +\\usepackage[palatino, helvetica, courier, maths=cmr]{mdwfonts} +\\usepackage[T1]{fontenc} +\\usepackage{graphicx, tikz, mdwtab, mdwmath, crypto, longtable}" + ("\\section{%s}" . "\\section*{%s}") + ("\\subsection{%s}" . "\\subsection*{%s}") + ("\\subsubsection{%s}" . "\\subsubsection*{%s}") + ("\\paragraph{%s}" . "\\paragraph*{%s}") + ("\\subparagraph{%s}" . "\\subparagraph*{%s}")) + org-export-latex-classes))) + +;;;-------------------------------------------------------------------------- +;;; Mail and news hacking. (define-derived-mode mdwmail-mode mail-mode "[mdw] mail" - "Major mode for editing news and mail messages from external programs + "Major mode for editing news and mail messages from external programs. Not much right now. Just support for doing MailCrypt stuff." :syntax-table nil :abbrev-table nil @@ -248,7 +268,7 @@ Not much right now. Just support for doing MailCrypt stuff." (concat "[ \t]*[-_][-_][-_]+$\\|^-- \\|-----\\|" paragraph-separate)))) -;; --- How to encrypt in mdwmail --- +;; How to encrypt in mdwmail. (defun mdwmail-mc-encrypt (&optional recip scm start end from sign) (or start @@ -259,7 +279,7 @@ Not much right now. Just support for doing MailCrypt stuff." (setq end (point-max))) (mc-encrypt-generic recip scm start end from sign)) -;; --- How to sign in mdwmail --- +;; How to sign in mdwmail. (defun mdwmail-mc-sign (key scm start end uclr) (or start @@ -270,7 +290,7 @@ Not much right now. Just support for doing MailCrypt stuff." (setq end (point-max))) (mc-sign-generic key scm start end uclr)) -;; --- Some signature mangling --- +;; Some signature mangling. (defun mdwmail-mangle-signature () (save-excursion @@ -279,14 +299,14 @@ Not much right now. Just support for doing MailCrypt stuff." (add-hook 'mail-setup-hook 'mdwmail-mangle-signature) (add-hook 'message-setup-hook 'mdwmail-mangle-signature) -;; --- Insert my login name into message-ids, so I can score replies --- +;; Insert my login name into message-ids, so I can score replies. (defadvice message-unique-id (after mdw-user-name last activate compile) "Ensure that the user's name appears at the end of the message-id string, so that it can be used for convenient filtering." (setq ad-return-value (concat ad-return-value "." (user-login-name)))) -;; --- Tell my movemail hack where movemail is --- +;; Tell my movemail hack where movemail is. ;; ;; This is needed to shup up warnings about LD_PRELOAD. @@ -297,7 +317,8 @@ so that it can be used for convenient filtering." (setenv "REAL_MOVEMAIL" try)) (setq path (cdr path))))) -;;;----- Utility functions -------------------------------------------------- +;;;-------------------------------------------------------------------------- +;;; Utility functions. (or (fboundp 'line-number-at-pos) (defun line-number-at-pos (&optional pos) @@ -312,15 +333,11 @@ so that it can be used for convenient filtering." (forward-line 0) (1+ (count-lines 1 (point)))))))) -;; --- mdw-uniquify-alist --- - (defun mdw-uniquify-alist (&rest alists) - "Return the concatenation of the ALISTS with duplicate elements removed. - -The first association with a given key prevails; others are ignored. The -input lists are not modified, although they'll probably become garbage." - +The first association with a given key prevails; others are +ignored. The input lists are not modified, although they'll +probably become garbage." (and alists (let ((start-list (cons nil nil))) (mdw-do-uniquify start-list @@ -328,48 +345,37 @@ input lists are not modified, although they'll probably become garbage." (car alists) (cdr alists))))) -;; --- mdw-do-uniquify --- -;; -;; The DONE argument is a list whose first element is `nil'. It contains the -;; uniquified alist built so far. The leading `nil' is stripped off at the -;; end of the operation; it's only there so that DONE always references a -;; cons cell. END refers to the final cons cell in the DONE list; it is -;; modified in place each time to avoid the overheads of `append'ing all the -;; time. The L argument is the alist we're currently processing; the -;; remaining alists are given in REST. (defun mdw-do-uniquify (done end l rest) - "A helper function for mdw-uniquify-alist." - - ;; --- There are several different cases to deal with here --- - + "A helper function for mdw-uniquify-alist. +The DONE argument is a list whose first element is `nil'. It +contains the uniquified alist built so far. The leading `nil' is +stripped off at the end of the operation; it's only there so that +DONE always references a cons cell. END refers to the final cons +cell in the DONE list; it is modified in place each time to avoid +the overheads of `append'ing all the time. The L argument is the +alist we're currently processing; the remaining alists are given +in REST." + + ;; There are several different cases to deal with here. (cond - ;; --- Current list isn't empty --- - ;; - ;; Add the first item to the DONE list if there's not an item with the - ;; same KEY already there. - + ;; Current list isn't empty. Add the first item to the DONE list if + ;; there's not an item with the same KEY already there. (l (or (assoc (car (car l)) done) (progn (setcdr end (cons (car l) nil)) (setq end (cdr end)))) (mdw-do-uniquify done end (cdr l) rest)) - ;; --- The list we were working on is empty --- - ;; - ;; Shunt the next list into the current list position and go round again. - + ;; The list we were working on is empty. Shunt the next list into the + ;; current list position and go round again. (rest (mdw-do-uniquify done end (car rest) (cdr rest))) - ;; --- Everything's done --- - ;; - ;; Remove the leading `nil' from the DONE list and return it. Finished! - + ;; Everything's done. Remove the leading `nil' from the DONE list and + ;; return it. Finished! (t (cdr done)))) -;; --- Insert a date --- - (defun date () "Insert the current date in a pleasing way." (interactive) @@ -383,23 +389,18 @@ input lists are not modified, although they'll probably become garbage." (buffer-string)) (kill-buffer buffer)))))) -;; --- UUencoding --- - (defun uuencode (file &optional name) "UUencodes a file, maybe calling it NAME, into the current buffer." (interactive "fInput file name: ") - ;; --- If NAME isn't specified, then guess from the filename --- - + ;; If NAME isn't specified, then guess from the filename. (if (not name) (setq name (substring file (or (string-match "[^/]*$" file) 0)))) - (print (format "uuencode `%s' `%s'" file name)) - ;; --- Now actually do the thing --- - + ;; Now actually do the thing. (call-process "uuencode" file t nil name)) (defvar np-file "~/.np" @@ -415,9 +416,9 @@ input lists are not modified, although they'll probably become garbage." (insert-file-contents np-file))))) (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." + "Sets global-auto-revert-ignore-buffer appropriately for this buffer. +This takes into consideration whether it's been found using +tramp, which seems to get itself into a twist." (cond ((not (boundp 'global-auto-revert-ignore-buffer)) nil) ((and (buffer-file-name) @@ -433,14 +434,16 @@ get itself into a twist." (defadvice write-file (after mdw-autorevert activate) (mdw-check-autorevert)) -;;;----- Dired hacking ------------------------------------------------------ +;;;-------------------------------------------------------------------------- +;;; Dired hacking. (defadvice dired-maybe-insert-subdir (around mdw-marked-insertion first activate) - "The DIRNAME may be a list of directory names to insert. Interactively, if -files are marked, then insert all of them. With a numeric prefix argument, -select that many entries near point; with a non-numeric prefix argument, -prompt for listing options." + "The DIRNAME may be a list of directory names to insert. +Interactively, if files are marked, then insert all of them. +With a numeric prefix argument, select that many entries near +point; with a non-numeric prefix argument, prompt for listing +options." (interactive (list (dired-get-marked-files nil (and (integerp current-prefix-arg) @@ -456,7 +459,8 @@ prompt for listing options." (ad-set-arg 0 dir) ad-do-it))) -;;;----- URL viewing -------------------------------------------------------- +;;;-------------------------------------------------------------------------- +;;; URL viewing. (defun mdw-w3m-browse-url (url &optional new-session-p) "Invoke w3m on the URL in its current window, or at least a different one. @@ -478,13 +482,14 @@ If NEW-SESSION-P, start a new session." '((w3m . mdw-w3m-browse-url) browse-url-w3 browse-url-mozilla) - "List of good browsers for mdw-good-url-browsers; each item is a browser -function name, or a cons (CHECK . FUNC). A symbol FOO stands for (FOO -. FOO).") + "List of good browsers for mdw-good-url-browsers. +Each item is a browser function name, or a cons (CHECK . FUNC). +A symbol FOO stands for (FOO . FOO).") (defun mdw-good-url-browser () - "Return a good URL browser. Trundle the list of such things, finding the -first item for which CHECK is fboundp, and returning the correponding FUNC." + "Return a good URL browser. +Trundle the list of such things, finding the first item for which +CHECK is fboundp, and returning the correponding FUNC." (let ((bs mdw-good-url-browsers) b check func answer) (while (and bs (not answer)) (setq b (car bs) @@ -496,19 +501,20 @@ first item for which CHECK is fboundp, and returning the correponding FUNC." (setq answer func))) answer)) -;;;----- Paragraph filling -------------------------------------------------- +;;;-------------------------------------------------------------------------- +;;; Paragraph filling. -;; --- Useful variables --- +;; Useful variables. (defvar mdw-fill-prefix nil - "*Used by `mdw-line-prefix' and `mdw-fill-paragraph'. If there's -no fill prefix currently set (by the `fill-prefix' variable) and there's -a match from one of the regexps here, it gets used to set the fill-prefix -for the current operation. + "*Used by `mdw-line-prefix' and `mdw-fill-paragraph'. +If there's no fill prefix currently set (by the `fill-prefix' +variable) and there's a match from one of the regexps here, it +gets used to set the fill-prefix for the current operation. -The variable is a list of items of the form `REGEXP . PREFIX'; if the -REGEXP matches, the PREFIX is used to set the fill prefix. It in turn is -a list of things: +The variable is a list of items of the form `REGEXP . PREFIX'; if +the REGEXP matches, the PREFIX is used to set the fill prefix. +It in turn is a list of things: STRING -- insert a literal string (match . N) -- insert the thing matched by bracketed subexpression N @@ -522,14 +528,14 @@ a list of things: "\\([*o]\\|-[-#]?\\|[0-9]+\\.\\|\\[[0-9]+\\]\\|([a-zA-Z])\\)" "[ \t]+" "\\)?\\)") - "*Standard regular expression matching things which might be part of a -hanging indent. This is mainly useful in `auto-fill-mode'.") + "*Standard regexp matching parts of a hanging indent. +This is mainly useful in `auto-fill-mode'.") -;; --- Setting things up --- +;; Setting things up. (fset 'mdw-do-auto-fill (symbol-function 'do-auto-fill)) -;; --- Utility functions --- +;; Utility functions. (defun mdw-tabify (s) "Tabify the string S. This is a horrid hack." @@ -548,9 +554,9 @@ hanging indent. This is mainly useful in `auto-fill-mode'.") s)))) (defun mdw-examine-fill-prefixes (l) - "Given a list of dynamic fill prefixes, pick one which matches context and -return the static fill prefix to use. Point must be at the start of a line, -and match data must be saved." + "Given a list of dynamic fill prefixes, pick one which matches +context and return the static fill prefix to use. Point must be +at the start of a line, and match data must be saved." (cond ((not l) nil) ((looking-at (car (car l))) (mdw-tabify (apply (function concat) @@ -572,8 +578,8 @@ and match data must be saved." n)) (defun mdw-do-prefix-match (m) - "Expand a dynamic prefix match element. See `mdw-fill-prefix' for -details." + "Expand a dynamic prefix match element. +See `mdw-fill-prefix' for details." (cond ((not (consp m)) (format "%s" m)) ((eq (car m) 'match) (match-string (mdw-maybe-car (cdr m)))) ((eq (car m) 'pad) (mdw-padding (match-string @@ -591,8 +597,8 @@ details." (mdw-examine-fill-prefixes mdw-fill-prefix)))))) (defun do-auto-fill () - "Handle auto-filling, working out a dynamic fill prefix in the case where -there isn't a sensible static one." + "Handle auto-filling, working out a dynamic fill prefix in the +case where there isn't a sensible static one." (let ((fill-prefix (mdw-choose-dynamic-fill-prefix))) (mdw-do-auto-fill))) @@ -604,16 +610,18 @@ there isn't a sensible static one." (defun mdw-standard-fill-prefix (rx &optional mat) "Set the dynamic fill prefix, handling standard hanging indents and stuff. -This is just a short-cut for setting the thing by hand, and by design it -doesn't cope with anything approximating a complicated case." +This is just a short-cut for setting the thing by hand, and by +design it doesn't cope with anything approximating a complicated +case." (setq mdw-fill-prefix `((,(concat rx mdw-hanging-indents) (match . 1) (pad . ,(or mat 2)))))) -;;;----- Other common declarations ------------------------------------------ +;;;-------------------------------------------------------------------------- +;;; Other common declarations. -;; --- Common mode settings --- +;; Common mode settings. (defvar mdw-auto-indent t "Whether to indent automatically after a newline.") @@ -637,31 +645,24 @@ doesn't cope with anything approximating a complicated case." (and (fboundp 'gtags-mode) (gtags-mode)) (outline-minor-mode t) - (mdw-set-font)) + (hs-minor-mode t) + (trap (turn-on-font-lock))) (eval-after-load 'gtags '(dolist (key '([mouse-2] [mouse-3])) (define-key gtags-mode-map key nil))) -;; --- Set up all sorts of faces --- - -(defvar mdw-set-font nil) - -(defvar mdw-punct-face 'mdw-punct-face "Face to use for punctuation") -(make-face 'mdw-punct-face) -(defvar mdw-number-face 'mdw-number-face "Face to use for numbers") -(make-face 'mdw-number-face) - -;; --- Backup file handling --- +;; Backup file handling. (defvar mdw-backup-disable-regexps nil - "*List of regular expressions: if a file name matches any of these then the -file is not backed up.") + "*List of regular expressions: if a file name matches any of +these then the file is not backed up.") (defun mdw-backup-enable-predicate (name) - "[mdw]'s default backup predicate: allows a backup if the -standard predicate would allow it, and it doesn't match any of -the regular expressions in `mdw-backup-disable-regexps'." + "[mdw]'s default backup predicate. +Allows a backup if the standard predicate would allow it, and it +doesn't match any of the regular expressions in +`mdw-backup-disable-regexps'." (and (normal-backup-enable-predicate name) (let ((answer t) (list mdw-backup-disable-regexps)) (save-match-data @@ -672,133 +673,160 @@ the regular expressions in `mdw-backup-disable-regexps'." answer)))) (setq backup-enable-predicate 'mdw-backup-enable-predicate) -;;;----- General fontification ---------------------------------------------- - -(defun mdw-set-fonts (frame faces) - (while faces - (let ((face (caar faces))) - (or (facep face) (make-face face)) - (set-face-attribute face frame - :family 'unspecified - :width 'unspecified - :height 'unspecified - :weight 'unspecified - :slant 'unspecified - :foreground 'unspecified - :background 'unspecified - :underline 'unspecified - :overline 'unspecified - :strike-through 'unspecified - :box 'unspecified - :inverse-video 'unspecified - :stipple 'unspecified - ;:font 'unspecified - :inherit 'unspecified) - (apply 'set-face-attribute face frame (cdar faces)) - (setq faces (cdr faces))))) - -(defun mdw-do-set-font (&optional frame) - (interactive) - (mdw-set-fonts (and (boundp 'frame) frame) `( - (default :foreground "white" :background "black" - ,@(cond ((eq window-system 'w32) - '(:family "courier new" :height 85)) - ((eq window-system 'x) - '(: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 "yellow" :background "blue" - :box (:line-width 1 :style released-button)) - (scroll-bar :foreground "black" :background "lightgrey") - (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) - (highlight :background "DarkSeaGreen4") - (holiday-face :background "red") - (calendar-today-face :foreground "yellow" :weight bold) - (comint-highlight-prompt :weight bold) - (comint-highlight-input) - (font-lock-builtin-face :weight bold) - (font-lock-type-face :weight bold) - (region :background ,(if window-system "grey30" "blue")) - (isearch :background "palevioletred2") - (mdw-punct-face :foreground ,(if window-system "burlywood2" "yellow")) - (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-string-face :foreground ,(if window-system "SkyBlue1" "cyan")) - (font-lock-keyword-face :weight bold) - (font-lock-constant-face :weight bold) - (font-lock-reference-face :weight bold) - (message-cited-text - :foreground ,(if window-system "SeaGreen1" "green") - :slant italic) - (message-separator :background "red" :foreground "white" :weight bold) - (message-header-cc - :foreground ,(if window-system "SeaGreen1" "green") - :weight bold) - (message-header-newsgroups - :foreground ,(if window-system "SeaGreen1" "green") - :weight bold) - (message-header-subject - :foreground ,(if window-system "SeaGreen1" "green") - :weight bold) - (message-header-to - :foreground ,(if window-system "SeaGreen1" "green") - :weight bold) - (message-header-xheader - :foreground ,(if window-system "SeaGreen1" "green") - :weight bold) - (message-header-other - :foreground ,(if window-system "SeaGreen1" "green") - :weight bold) - (message-header-name - :foreground ,(if window-system "SeaGreen1" "green")) - (woman-bold :weight bold) - (woman-italic :slant italic) - (p4-depot-added-face :foreground "green") - (p4-depot-branch-op-face :foreground "yellow") - (p4-depot-deleted-face :foreground "red") - (p4-depot-unmapped-face - :foreground ,(if window-system "SkyBlue1" "cyan")) - (p4-diff-change-face :foreground "yellow") - (p4-diff-del-face :foreground "red") - (p4-diff-file-face :foreground "SkyBlue1") - (p4-diff-head-face :background "grey10") - (p4-diff-ins-face :foreground "green") - (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") -))) - -(defun mdw-set-font () - (trap - (turn-on-font-lock) - (if (not mdw-set-font) - (progn - (setq mdw-set-font t) - (mdw-do-set-font nil))))) - -;;;----- C programming configuration ---------------------------------------- - -;; --- Linux kernel hacking --- +;;;-------------------------------------------------------------------------- +;;; General fontification. + +(defmacro mdw-define-face (name &rest body) + "Define a face, and make sure it's actually set as the definition." + (declare (indent 1) + (debug 0)) + `(progn + (make-face ',name) + (defvar ,name ',name) + (put ',name 'face-defface-spec ',body) + )) + +(mdw-define-face default + (((type w32)) :family "courier new" :height 85) + (((type x)) :family "6x13" :height 130) + (t :foreground "white" :background "black")) +(mdw-define-face fixed-pitch + (((type w32)) :family "courier new" :height 85) + (((type x)) :family "6x13" :height 130) + (t :foreground "white" :background "black")) +(mdw-define-face region + (((type tty)) :background "blue") (t :background "grey30")) +(mdw-define-face minibuffer-prompt + (t :weight bold)) +(mdw-define-face mode-line + (t :foreground "blue" :background "yellow" + :box (:line-width 1 :style released-button))) +(mdw-define-face mode-line-inactive + (t :foreground "yellow" :background "blue" + :box (:line-width 1 :style released-button))) +(mdw-define-face scroll-bar + (t :foreground "black" :background "lightgrey")) +(mdw-define-face fringe + (t :foreground "yellow")) +(mdw-define-face show-paren-match-face + (t :background "darkgreen")) +(mdw-define-face show-paren-mismatch-face + (t :background "red")) +(mdw-define-face highlight + (t :background "DarkSeaGreen4")) + +(mdw-define-face holiday-face + (t :background "red")) +(mdw-define-face calendar-today-face + (t :foreground "yellow" :weight bold)) + +(mdw-define-face comint-highlight-prompt + (t :weight bold)) +(mdw-define-face comint-highlight-input + (t :slant italic)) + +(mdw-define-face trailing-whitespace + (t :background "red")) +(mdw-define-face mdw-punct-face + (((type tty)) :foreground "yellow") (t :foreground "burlywood2")) +(mdw-define-face mdw-number-face + (t :foreground "yellow")) +(mdw-define-face font-lock-function-name-face + (t :weight bold)) +(mdw-define-face font-lock-keyword-face + (t :weight bold)) +(mdw-define-face font-lock-constant-face + (t :slant italic)) +(mdw-define-face font-lock-builtin-face + (t :weight bold)) +(mdw-define-face font-lock-reference-face + (t :weight bold)) +(mdw-define-face font-lock-variable-name-face + (t :slant italic)) +(mdw-define-face font-lock-comment-delimiter-face + (default :slant italic) + (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) +(mdw-define-face font-lock-comment-face + (default :slant italic) + (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) +(mdw-define-face font-lock-string-face + (t :foreground "SkyBlue1")) + +(mdw-define-face message-separator + (t :background "red" :foreground "white" :weight bold)) +(mdw-define-face message-cited-text + (default :slant italic) + (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) +(mdw-define-face message-header-cc + (default :weight bold) + (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) +(mdw-define-face message-header-newsgroups + (default :weight bold) + (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) +(mdw-define-face message-header-subject + (default :weight bold) + (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) +(mdw-define-face message-header-to + (default :weight bold) + (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) +(mdw-define-face message-header-xheader + (default :weight bold) + (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) +(mdw-define-face message-header-other + (default :weight bold) + (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) +(mdw-define-face message-header-name + (((type tty)) :foreground "green") (t :foreground "SeaGreen1")) + +(mdw-define-face diff-index + (t :weight bold)) +(mdw-define-face diff-file-header + (t :weight bold)) +(mdw-define-face diff-hunk-header + (t :foreground "SkyBlue1")) +(mdw-define-face diff-function + (t :foreground "SkyBlue1" :weight bold)) +(mdw-define-face diff-header + (t :background "grey10")) +(mdw-define-face diff-added + (t :foreground "green")) +(mdw-define-face diff-removed + (t :foreground "red")) +(mdw-define-face diff-context) + +(mdw-define-face woman-bold + (t :weight bold)) +(mdw-define-face woman-italic + (t :slant italic)) + +(mdw-define-face p4-depot-added-face + (t :foreground "green")) +(mdw-define-face p4-depot-branch-op-face + (t :foreground "yellow")) +(mdw-define-face p4-depot-deleted-face + (t :foreground "red")) +(mdw-define-face p4-depot-unmapped-face + (t :foreground "SkyBlue1")) +(mdw-define-face p4-diff-change-face + (t :foreground "yellow")) +(mdw-define-face p4-diff-del-face + (t :foreground "red")) +(mdw-define-face p4-diff-file-face + (t :foreground "SkyBlue1")) +(mdw-define-face p4-diff-head-face + (t :background "grey10")) +(mdw-define-face p4-diff-ins-face + (t :foreground "green")) + +(mdw-define-face whizzy-slice-face + (t :background "grey10")) +(mdw-define-face whizzy-error-face + (t :background "darkred")) + +;;;-------------------------------------------------------------------------- +;;; C programming configuration. + +;; Linux kernel hacking. (defvar linux-c-mode-hook) @@ -809,7 +837,7 @@ the regular expressions in `mdw-backup-disable-regexps'." (setq mode-name "Linux C") (run-hooks 'linux-c-mode-hook)) -;; --- Make C indentation nice --- +;; Make C indentation nice. (defun mdw-c-lineup-arglist (langelem) "Hack for DWIMmery in c-lineup-arglist." @@ -849,29 +877,30 @@ the regular expressions in `mdw-backup-disable-regexps'." (statement-case-intro . +))) t)) -(defun mdw-fontify-c-and-c++ () +(defvar mdw-c-comment-fill-prefix + `((,(concat "\\([ \t]*/?\\)" + "\\(\*\\|//]\\)" + "\\([ \t]*\\)" + "\\([A-Za-z]+:[ \t]*\\)?" + mdw-hanging-indents) + (pad . 1) (match . 2) (pad . 3) (pad . 4) (pad . 5))) + "Fill prefix matching C comments (both kinds).") - ;; --- Fiddle with some syntax codes --- +(defun mdw-fontify-c-and-c++ () + ;; Fiddle with some syntax codes. (modify-syntax-entry ?* ". 23") (modify-syntax-entry ?/ ". 124b") (modify-syntax-entry ?\n "> b") - ;; --- Other stuff --- - + ;; Other stuff. (mdw-c-style) (setq c-hanging-comment-ender-p nil) (setq c-backslash-column 72) (setq c-label-minimum-indentation 0) - (setq mdw-fill-prefix - `((,(concat "\\([ \t]*/?\\)" - "\\([\*/][ \t]*\\)" - "\\([A-Za-z]+:[ \t]*\\)?" - mdw-hanging-indents) - (pad . 1) (match . 2) (pad . 3) (pad . 4)))) - - ;; --- Now define things to be fontified --- + (setq mdw-fill-prefix mdw-c-comment-fill-prefix) + ;; Now define things to be fontified. (make-local-variable 'font-lock-keywords) (let ((c-keywords (mdw-regexps "and" ;C++ @@ -984,44 +1013,40 @@ the regular expressions in `mdw-backup-disable-regexps'." (setq font-lock-keywords (list - ;; --- Fontify include files as strings --- - + ;; Fontify include files as strings. (list (concat "^[ \t]*\\#[ \t]*" "\\(include\\|import\\)" "[ \t]*\\(<[^>]+\\(>\\|\\)\\)") '(2 font-lock-string-face)) - ;; --- Preprocessor directives are `references'? --- - + ;; Preprocessor directives are `references'?. (list (concat "^\\([ \t]*#[ \t]*\\(\\(" preprocessor-keywords "\\)\\>\\|[0-9]+\\|$\\)\\)") '(1 font-lock-keyword-face)) - ;; --- Handle the keywords defined above --- - + ;; Handle the keywords defined above. (list (concat "@\\<\\(" objc-keywords "\\)\\>") '(0 font-lock-keyword-face)) (list (concat "\\<\\(" c-keywords "\\)\\>") '(0 font-lock-keyword-face)) - ;; --- Handle numbers too --- + ;; Handle numbers too. ;; ;; This looks strange, I know. It corresponds to the ;; preprocessor's idea of what a number looks like, rather than ;; anything sensible. - (list (concat "\\(\\<[0-9]\\|\\.[0-9]\\)" "\\([Ee][+-]\\|[0-9A-Za-z_.]\\)*") '(0 mdw-number-face)) - ;; --- And anything else is punctuation --- - + ;; And anything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" '(0 mdw-punct-face)))))) -;;;----- AP calc mode ------------------------------------------------------- +;;;-------------------------------------------------------------------------- +;;; AP calc mode. (defun apcalc-mode () (interactive) @@ -1032,27 +1057,19 @@ the regular expressions in `mdw-backup-disable-regexps'." (defun mdw-fontify-apcalc () - ;; --- Fiddle with some syntax codes --- - + ;; Fiddle with some syntax codes. (modify-syntax-entry ?* ". 23") (modify-syntax-entry ?/ ". 14") - ;; --- Other stuff --- - + ;; Other stuff. (mdw-c-style) (setq c-hanging-comment-ender-p nil) (setq c-backslash-column 72) (setq comment-start "/* ") (setq comment-end " */") - (setq mdw-fill-prefix - `((,(concat "\\([ \t]*/?\\)" - "\\([\*/][ \t]*\\)" - "\\([A-Za-z]+:[ \t]*\\)?" - mdw-hanging-indents) - (pad . 1) (match . 2) (pad . 3) (pad . 4)))) - - ;; --- Now define things to be fontified --- + (setq mdw-fill-prefix mdw-c-comment-fill-prefix) + ;; Now define things to be fontified. (make-local-variable 'font-lock-keywords) (let ((c-keywords (mdw-regexps "break" "case" "cd" "continue" "define" "default" @@ -1063,29 +1080,27 @@ the regular expressions in `mdw-backup-disable-regexps'." (setq font-lock-keywords (list - ;; --- Handle the keywords defined above --- - + ;; Handle the keywords defined above. (list (concat "\\<\\(" c-keywords "\\)\\>") '(0 font-lock-keyword-face)) - ;; --- Handle numbers too --- + ;; Handle numbers too. ;; ;; This looks strange, I know. It corresponds to the ;; preprocessor's idea of what a number looks like, rather than ;; anything sensible. - (list (concat "\\(\\<[0-9]\\|\\.[0-9]\\)" "\\([Ee][+-]\\|[0-9A-Za-z_.]\\)*") '(0 mdw-number-face)) - ;; --- And anything else is punctuation --- - + ;; And anything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" '(0 mdw-punct-face)))))) -;;;----- Java programming configuration ------------------------------------- +;;;-------------------------------------------------------------------------- +;;; Java programming configuration. -;; --- Make indentation nice --- +;; Make indentation nice. (defun mdw-java-style () (c-add-style "[mdw] Java style" @@ -1098,26 +1113,17 @@ the regular expressions in `mdw-backup-disable-regexps'." (statement-case-intro . +))) t)) -;; --- Declare Java fontification style --- +;; Declare Java fontification style. (defun mdw-fontify-java () - ;; --- Other stuff --- - + ;; Other stuff. (mdw-java-style) (setq c-hanging-comment-ender-p nil) (setq c-backslash-column 72) - (setq comment-start "/* ") - (setq comment-end " */") - (setq mdw-fill-prefix - `((,(concat "\\([ \t]*/?\\)" - "\\([\*/][ \t]*\\)" - "\\([A-Za-z]+:[ \t]*\\)?" - mdw-hanging-indents) - (pad . 1) (match . 2) (pad . 3) (pad . 4)))) - - ;; --- Now define things to be fontified --- + (setq mdw-fill-prefix mdw-c-comment-fill-prefix) + ;; Now define things to be fontified. (make-local-variable 'font-lock-keywords) (let ((java-keywords (mdw-regexps "abstract" "boolean" "break" "byte" "case" "catch" @@ -1135,15 +1141,13 @@ the regular expressions in `mdw-backup-disable-regexps'." (setq font-lock-keywords (list - ;; --- Handle the keywords defined above --- - + ;; Handle the keywords defined above. (list (concat "\\<\\(" java-keywords "\\)\\>") '(0 font-lock-keyword-face)) - ;; --- Handle numbers too --- + ;; Handle numbers too. ;; ;; The following isn't quite right, but it's close enough. - (list (concat "\\<\\(" "0\\([xX][0-9a-fA-F]+\\|[0-7]+\\)\\|" "[0-9]+\\(\\.[0-9]*\\|\\)" @@ -1151,14 +1155,14 @@ the regular expressions in `mdw-backup-disable-regexps'." "[lLfFdD]?") '(0 mdw-number-face)) - ;; --- And anything else is punctuation --- - + ;; And anything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" '(0 mdw-punct-face)))))) -;;;----- C# programming configuration --------------------------------------- +;;;-------------------------------------------------------------------------- +;;; C# programming configuration. -;; --- Make indentation nice --- +;; Make indentation nice. (defun mdw-csharp-style () (c-add-style "[mdw] C# style" @@ -1171,26 +1175,17 @@ the regular expressions in `mdw-backup-disable-regexps'." (statement-case-intro . +))) t)) -;; --- Declare C# fontification style --- +;; Declare C# fontification style. (defun mdw-fontify-csharp () - ;; --- Other stuff --- - + ;; Other stuff. (mdw-csharp-style) (setq c-hanging-comment-ender-p nil) (setq c-backslash-column 72) - (setq comment-start "/* ") - (setq comment-end " */") - (setq mdw-fill-prefix - `((,(concat "\\([ \t]*/?\\)" - "\\([\*/][ \t]*\\)" - "\\([A-Za-z]+:[ \t]*\\)?" - mdw-hanging-indents) - (pad . 1) (match . 2) (pad . 3) (pad . 4)))) - - ;; --- Now define things to be fontified --- + (setq mdw-fill-prefix mdw-c-comment-fill-prefix) + ;; Now define things to be fontified. (make-local-variable 'font-lock-keywords) (let ((csharp-keywords (mdw-regexps "abstract" "as" "base" "bool" "break" @@ -1213,15 +1208,13 @@ the regular expressions in `mdw-backup-disable-regexps'." (setq font-lock-keywords (list - ;; --- Handle the keywords defined above --- - + ;; Handle the keywords defined above. (list (concat "\\<\\(" csharp-keywords "\\)\\>") '(0 font-lock-keyword-face)) - ;; --- Handle numbers too --- + ;; Handle numbers too. ;; ;; The following isn't quite right, but it's close enough. - (list (concat "\\<\\(" "0\\([xX][0-9a-fA-F]+\\|[0-7]+\\)\\|" "[0-9]+\\(\\.[0-9]*\\|\\)" @@ -1229,22 +1222,17 @@ the regular expressions in `mdw-backup-disable-regexps'." "[lLfFdD]?") '(0 mdw-number-face)) - ;; --- And anything else is punctuation --- - + ;; And anything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" '(0 mdw-punct-face)))))) -(defun csharp-mode () - (interactive) - (java-mode) - (setq major-mode 'csharp-mode) - (setq mode-name "C#") - (mdw-fontify-csharp) - (run-hooks 'csharp-mode-hook)) +(define-derived-mode csharp-mode java-mode "C#" + "Major mode for editing C# code.") -;;;----- Awk programming configuration -------------------------------------- +;;;-------------------------------------------------------------------------- +;;; Awk programming configuration. -;; --- Make Awk indentation nice --- +;; Make Awk indentation nice. (defun mdw-awk-style () (c-add-style "[mdw] Awk style" @@ -1254,18 +1242,16 @@ the regular expressions in `mdw-backup-disable-regexps'." (statement-case-intro . +))) t)) -;; --- Declare Awk fontification style --- +;; Declare Awk fontification style. (defun mdw-fontify-awk () - ;; --- Miscellaneous fiddling --- - + ;; Miscellaneous fiddling. (mdw-awk-style) (setq c-backslash-column 72) (mdw-standard-fill-prefix "\\([ \t]*#+[ \t]*\\)") - ;; --- Now define things to be fontified --- - + ;; Now define things to be fontified. (make-local-variable 'font-lock-keywords) (let ((c-keywords (mdw-regexps "BEGIN" "END" "ARGC" "ARGIND" "ARGV" "CONVFMT" @@ -1283,15 +1269,13 @@ the regular expressions in `mdw-backup-disable-regexps'." (setq font-lock-keywords (list - ;; --- Handle the keywords defined above --- - + ;; Handle the keywords defined above. (list (concat "\\<\\(" c-keywords "\\)\\>") '(0 font-lock-keyword-face)) - ;; --- Handle numbers too --- + ;; Handle numbers too. ;; ;; The following isn't quite right, but it's close enough. - (list (concat "\\<\\(" "0\\([xX][0-9a-fA-F]+\\|[0-7]+\\)\\|" "[0-9]+\\(\\.[0-9]*\\|\\)" @@ -1299,14 +1283,14 @@ the regular expressions in `mdw-backup-disable-regexps'." "[uUlL]*") '(0 mdw-number-face)) - ;; --- And anything else is punctuation --- - + ;; And anything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" '(0 mdw-punct-face)))))) -;;;----- Perl programming style --------------------------------------------- +;;;-------------------------------------------------------------------------- +;;; Perl programming style. -;; --- Perl indentation style --- +;; Perl indentation style. (setq cperl-indent-level 2) (setq cperl-continued-statement-offset 2) @@ -1315,18 +1299,16 @@ the regular expressions in `mdw-backup-disable-regexps'." (setq cperl-brace-imaginary-offset 0) (setq cperl-label-offset 0) -;; --- Define perl fontification style --- +;; Define perl fontification style. (defun mdw-fontify-perl () - ;; --- Miscellaneous fiddling --- - + ;; Miscellaneous fiddling. (modify-syntax-entry ?$ "\\") (modify-syntax-entry ?$ "\\" font-lock-syntax-table) (mdw-standard-fill-prefix "\\([ \t]*#+[ \t]*\\)") - ;; --- Now define fontification things --- - + ;; Now define fontification things. (make-local-variable 'font-lock-keywords) (let ((perl-keywords (mdw-regexps "and" "cmp" "continue" "do" "else" "elsif" "eq" @@ -1338,20 +1320,17 @@ the regular expressions in `mdw-backup-disable-regexps'." (setq font-lock-keywords (list - ;; --- Set up the keywords defined above --- - + ;; Set up the keywords defined above. (list (concat "\\<\\(" perl-keywords "\\)\\>") '(0 font-lock-keyword-face)) - ;; --- At least numbers are simpler than C --- - + ;; At least numbers are simpler than C. (list (concat "\\<0\\([xX][0-9a-fA-F_]+\\|[0-7_]+\\)\\|" "\\<[0-9][0-9_]*\\(\\.[0-9_]*\\|\\)" "\\([eE]\\([-+]\\|\\)[0-9_]+\\|\\)") '(0 mdw-number-face)) - ;; --- And anything else is punctuation --- - + ;; And anything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" '(0 mdw-punct-face)))))) @@ -1370,38 +1349,34 @@ strip numbers instead." (if (re-search-forward "\\(tests\\s-*=>\\s-*\\)\\w*" nil t) (replace-match (format "\\1%d" i)))))) -;;;----- Python programming style ------------------------------------------- +;;;-------------------------------------------------------------------------- +;;; Python programming style. (defun mdw-fontify-pythonic (keywords) - ;; --- Miscellaneous fiddling --- - + ;; Miscellaneous fiddling. (mdw-standard-fill-prefix "\\([ \t]*#+[ \t]*\\)") - ;; --- Now define fontification things --- - + ;; Now define fontification things. (make-local-variable 'font-lock-keywords) (setq font-lock-keywords (list - ;; --- Set up the keywords defined above --- - + ;; Set up the keywords defined above. (list (concat "\\<\\(" keywords "\\)\\>") '(0 font-lock-keyword-face)) - ;; --- At least numbers are simpler than C --- - + ;; At least numbers are simpler than C. (list (concat "\\<0\\([xX][0-9a-fA-F_]+\\|[0-7_]+\\)\\|" "\\<[0-9][0-9_]*\\(\\.[0-9_]*\\|\\)" "\\([eE]\\([-+]\\|\\)[0-9_]+\\|[lL]\\|\\)") '(0 mdw-number-face)) - ;; --- And anything else is punctuation --- - + ;; And anything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" '(0 mdw-punct-face))))) -;; --- Define Python fontification style --- +;; Define Python fontification styles. (defun mdw-fontify-python () (mdw-fontify-pythonic @@ -1420,25 +1395,24 @@ strip numbers instead." "raise" "return" "struct" "try" "while" "with" "yield"))) -;;;----- Icon programming style --------------------------------------------- +;;;-------------------------------------------------------------------------- +;;; Icon programming style. -;; --- Icon indentation style --- +;; Icon indentation style. (setq icon-brace-offset 0 icon-continued-brace-offset 0 icon-continued-statement-offset 2 icon-indent-level 2) -;; --- Define Icon fontification style --- +;; Define Icon fontification style. (defun mdw-fontify-icon () - ;; --- Miscellaneous fiddling --- - + ;; Miscellaneous fiddling. (mdw-standard-fill-prefix "\\([ \t]*#+[ \t]*\\)") - ;; --- Now define fontification things --- - + ;; Now define fontification things. (make-local-variable 'font-lock-keywords) (let ((icon-keywords (mdw-regexps "break" "by" "case" "create" "default" "do" "else" @@ -1452,38 +1426,34 @@ strip numbers instead." (setq font-lock-keywords (list - ;; --- Set up the keywords defined above --- - + ;; Set up the keywords defined above. (list (concat "\\<\\(" icon-keywords "\\)\\>") '(0 font-lock-keyword-face)) - ;; --- The things that Icon calls keywords --- - + ;; The things that Icon calls keywords. (list "&\\sw+\\>" '(0 font-lock-variable-name-face)) - ;; --- At least numbers are simpler than C --- - + ;; At least numbers are simpler than C. (list (concat "\\<[0-9]+" "\\([rR][0-9a-zA-Z]+\\|" "\\.[0-9]+\\([eE][+-]?[0-9]+\\)?\\)\\>\\|" "\\.[0-9]+\\([eE][+-]?[0-9]+\\)?\\>") '(0 mdw-number-face)) - ;; --- Preprocessor --- - + ;; Preprocessor. (list (concat "^[ \t]*$[ \t]*\\<\\(" preprocessor-keywords "\\)\\>") '(0 font-lock-keyword-face)) - ;; --- And anything else is punctuation --- - + ;; And anything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" '(0 mdw-punct-face)))))) -;;;----- ARM assembler programming configuration ---------------------------- +;;;-------------------------------------------------------------------------- +;;; ARM assembler programming configuration. -;; --- There doesn't appear to be an Emacs mode for this yet --- +;; There doesn't appear to be an Emacs mode for this yet. ;; ;; Better do something about that, I suppose. @@ -1502,16 +1472,14 @@ strip numbers instead." "Major mode for ARM assembler programs" (interactive) - ;; --- Do standard major mode things --- - + ;; Do standard major mode things. (kill-all-local-variables) (use-local-map arm-assembler-mode-map) (setq local-abbrev-table arm-assembler-abbrev-table) (setq major-mode 'arm-assembler-mode) (setq mode-name "ARM assembler") - ;; --- Set up syntax table --- - + ;; Set up syntax table. (set-syntax-table arm-assembler-mode-syntax-table) (modify-syntax-entry ?; ; Nasty hack "<" arm-assembler-mode-syntax-table) @@ -1527,52 +1495,46 @@ strip numbers instead." (make-local-variable 'comment-start-skip) (setq comment-start-skip ";+[ \t]*") - ;; --- Play with indentation --- - + ;; Play with indentation. (make-local-variable 'indent-line-function) (setq indent-line-function 'indent-relative-maybe) - ;; --- Set fill prefix --- - + ;; Set fill prefix. (mdw-standard-fill-prefix "\\([ \t]*;+[ \t]*\\)") - ;; --- Fiddle with fontification --- - + ;; Fiddle with fontification. (make-local-variable 'font-lock-keywords) (setq font-lock-keywords (list - ;; --- Handle numbers too --- + ;; Handle numbers too. ;; ;; The following isn't quite right, but it's close enough. - (list (concat "\\(" "&[0-9a-fA-F]+\\|" "\\<[0-9]+\\(\\.[0-9]*\\|_[0-9a-zA-Z]+\\|\\)" "\\)") '(0 mdw-number-face)) - ;; --- Do something about operators --- - + ;; Do something about operators. (list "^[^ \t]*[ \t]+\\(GET\\|LNK\\)[ \t]+\\([^;\n]*\\)" '(1 font-lock-keyword-face) '(2 font-lock-string-face)) (list ":[a-zA-Z]+:" '(0 font-lock-keyword-face)) - ;; --- Do menemonics and directives --- - + ;; Do menemonics and directives. (list "^[^ \t]*[ \t]+\\([a-zA-Z]+\\)" '(1 font-lock-keyword-face)) - ;; --- And anything else is punctuation --- - + ;; And anything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" '(0 mdw-punct-face)))) (run-hooks 'arm-assembler-mode-hook)) -;;;----- Assembler mode ----------------------------------------------------- +;;;-------------------------------------------------------------------------- +;;; Assembler mode. (defun mdw-fontify-asm () (modify-syntax-entry ?' "\"") @@ -1580,7 +1542,8 @@ strip numbers instead." (setf fill-prefix nil) (mdw-standard-fill-prefix "\\([ \t]*;+[ \t]*\\)")) -;;;----- TCL configuration -------------------------------------------------- +;;;-------------------------------------------------------------------------- +;;; TCL configuration. (defun mdw-fontify-tcl () (mapcar #'(lambda (ch) (modify-syntax-entry ch ".")) '(?$)) @@ -1595,7 +1558,8 @@ strip numbers instead." (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" '(0 mdw-punct-face))))) -;;;----- REXX configuration ------------------------------------------------- +;;;-------------------------------------------------------------------------- +;;; REXX configuration. (defun mdw-rexx-electric-* () (interactive) @@ -1610,8 +1574,7 @@ strip numbers instead." (defun mdw-fontify-rexx () - ;; --- Various bits of fiddling --- - + ;; Various bits of fiddling. (setq mdw-auto-indent nil) (local-set-key [?\C-m] 'mdw-rexx-indent-newline-indent) (local-set-key [?*] 'mdw-rexx-electric-*) @@ -1619,8 +1582,7 @@ strip numbers instead." '(?! ?? ?# ?@ ?$)) (mdw-standard-fill-prefix "\\([ \t]*/?\*[ \t]*\\)") - ;; --- Set up keywords and things for fontification --- - + ;; Set up keywords and things for fontification. (make-local-variable 'font-lock-keywords-case-fold-search) (setq font-lock-keywords-case-fold-search t) @@ -1656,36 +1618,31 @@ strip numbers instead." (setq font-lock-keywords (list - ;; --- Set up the keywords defined above --- - + ;; Set up the keywords defined above. (list (concat "\\<\\(" rexx-keywords "\\)\\>") '(0 font-lock-keyword-face)) - ;; --- Fontify all symbols the same way --- - + ;; Fontify all symbols the same way. (list (concat "\\<\\([0-9.][A-Za-z0-9.!?_#@$]*[Ee][+-]?[0-9]+\\|" "[A-Za-z0-9.!?_#@$]+\\)") '(0 font-lock-variable-name-face)) - ;; --- And everything else is punctuation --- - + ;; And everything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" '(0 mdw-punct-face)))))) -;;;----- Standard ML programming style -------------------------------------- +;;;-------------------------------------------------------------------------- +;;; Standard ML programming style. (defun mdw-fontify-sml () - ;; --- Make underscore an honorary letter --- - + ;; Make underscore an honorary letter. (modify-syntax-entry ?' "w") - ;; --- Set fill prefix --- - + ;; Set fill prefix. (mdw-standard-fill-prefix "\\([ \t]*(\*[ \t]*\\)") - ;; --- Now define fontification things --- - + ;; Now define fontification things. (make-local-variable 'font-lock-keywords) (let ((sml-keywords (mdw-regexps "abstype" "and" "andalso" "as" @@ -1707,13 +1664,11 @@ strip numbers instead." (setq font-lock-keywords (list - ;; --- Set up the keywords defined above --- - + ;; Set up the keywords defined above. (list (concat "\\<\\(" sml-keywords "\\)\\>") '(0 font-lock-keyword-face)) - ;; --- At least numbers are simpler than C --- - + ;; At least numbers are simpler than C. (list (concat "\\<\\(\\~\\|\\)" "\\(0\\(\\([wW]\\|\\)[xX][0-9a-fA-F]+\\|" "[wW][0-9]+\\)\\|" @@ -1722,29 +1677,26 @@ strip numbers instead." "[0-9]+\\|\\)\\)\\)") '(0 mdw-number-face)) - ;; --- And anything else is punctuation --- - + ;; And anything else is punctuation. (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" '(0 mdw-punct-face)))))) -;;;----- Haskell configuration ---------------------------------------------- +;;;-------------------------------------------------------------------------- +;;; Haskell configuration. (defun mdw-fontify-haskell () - ;; --- Fiddle with syntax table to get comments right --- - + ;; Fiddle with syntax table to get comments right. (modify-syntax-entry ?' "\"") (modify-syntax-entry ?- ". 123") (modify-syntax-entry ?{ ". 1b") (modify-syntax-entry ?} ". 4b") (modify-syntax-entry ?\n ">") - ;; --- Set fill prefix --- - + ;; Set fill prefix. (mdw-standard-fill-prefix "\\([ \t]*{?--?[ \t]*\\)") - ;; --- Fiddle with fontification --- - + ;; Fiddle with fontification. (make-local-variable 'font-lock-keywords) (let ((haskell-keywords (mdw-regexps "as" "case" "ccall" "class" "data" "default" @@ -1766,19 +1718,18 @@ strip numbers instead." (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" '(0 mdw-punct-face)))))) -;;;----- Erlang configuration ----------------------------------------------- +;;;-------------------------------------------------------------------------- +;;; Erlang configuration. (setq erlang-electric-commannds '(erlang-electric-newline erlang-electric-semicolon)) (defun mdw-fontify-erlang () - ;; --- Set fill prefix --- - + ;; Set fill prefix. (mdw-standard-fill-prefix "\\([ \t]*{?%*[ \t]*\\)") - ;; --- Fiddle with fontification --- - + ;; Fiddle with fontification. (make-local-variable 'font-lock-keywords) (let ((erlang-keywords (mdw-regexps "after" "and" "andalso" @@ -1801,125 +1752,108 @@ strip numbers instead." (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" '(0 mdw-punct-face)))))) -;;;----- Texinfo configuration ---------------------------------------------- +;;;-------------------------------------------------------------------------- +;;; Texinfo configuration. (defun mdw-fontify-texinfo () - ;; --- Set fill prefix --- - + ;; Set fill prefix. (mdw-standard-fill-prefix "\\([ \t]*@c[ \t]+\\)") - ;; --- Real fontification things --- - + ;; Real fontification things. (make-local-variable 'font-lock-keywords) (setq font-lock-keywords (list - ;; --- Environment names are keywords --- - + ;; Environment names are keywords. (list "@\\(end\\) *\\([a-zA-Z]*\\)?" '(2 font-lock-keyword-face)) - ;; --- Unmark escaped magic characters --- - + ;; Unmark escaped magic characters. (list "\\(@\\)\\([@{}]\\)" '(1 font-lock-keyword-face) '(2 font-lock-variable-name-face)) - ;; --- Make sure we get comments properly --- - + ;; Make sure we get comments properly. (list "@c\\(\\|omment\\)\\( .*\\)?$" '(0 font-lock-comment-face)) - ;; --- Command names are keywords --- - + ;; Command names are keywords. (list "@\\([^a-zA-Z@]\\|[a-zA-Z@]*\\)" '(0 font-lock-keyword-face)) - ;; --- Fontify TeX special characters as punctuation --- - + ;; Fontify TeX special characters as punctuation. (list "[{}]+" '(0 mdw-punct-face))))) -;;;----- TeX and LaTeX configuration ---------------------------------------- +;;;-------------------------------------------------------------------------- +;;; TeX and LaTeX configuration. (defun mdw-fontify-tex () (setq ispell-parser 'tex) (turn-on-reftex) - ;; --- Don't make maths into a string --- - + ;; Don't make maths into a string. (modify-syntax-entry ?$ ".") (modify-syntax-entry ?$ "." font-lock-syntax-table) (local-set-key [?$] 'self-insert-command) - ;; --- Set fill prefix --- - + ;; Set fill prefix. (mdw-standard-fill-prefix "\\([ \t]*%+[ \t]*\\)") - ;; --- Real fontification things --- - + ;; Real fontification things. (make-local-variable 'font-lock-keywords) (setq font-lock-keywords (list - ;; --- Environment names are keywords --- - + ;; Environment names are keywords. (list (concat "\\\\\\(begin\\|end\\|newenvironment\\)" "{\\([^}\n]*\\)}") '(2 font-lock-keyword-face)) - ;; --- Suspended environment names are keywords too --- - + ;; Suspended environment names are keywords too. (list (concat "\\\\\\(suspend\\|resume\\)\\(\\[[^]]*\\]\\)?" "{\\([^}\n]*\\)}") '(3 font-lock-keyword-face)) - ;; --- Command names are keywords --- - + ;; Command names are keywords. (list "\\\\\\([^a-zA-Z@]\\|[a-zA-Z@]*\\)" '(0 font-lock-keyword-face)) - ;; --- Handle @/.../ for italics --- - + ;; Handle @/.../ for italics. ;; (list "\\(@/\\)\\([^/]*\\)\\(/\\)" ;; '(1 font-lock-keyword-face) ;; '(3 font-lock-keyword-face)) - ;; --- Handle @*...* for boldness --- - + ;; Handle @*...* for boldness. ;; (list "\\(@\\*\\)\\([^*]*\\)\\(\\*\\)" ;; '(1 font-lock-keyword-face) ;; '(3 font-lock-keyword-face)) - ;; --- Handle @`...' for literal syntax things --- - + ;; Handle @`...' for literal syntax things. ;; (list "\\(@`\\)\\([^']*\\)\\('\\)" ;; '(1 font-lock-keyword-face) ;; '(3 font-lock-keyword-face)) - ;; --- Handle @<...> for nonterminals --- - + ;; Handle @<...> for nonterminals. ;; (list "\\(@<\\)\\([^>]*\\)\\(>\\)" ;; '(1 font-lock-keyword-face) ;; '(3 font-lock-keyword-face)) - ;; --- Handle other @-commands --- - + ;; Handle other @-commands. ;; (list "@\\([^a-zA-Z]\\|[a-zA-Z]*\\)" ;; '(0 font-lock-keyword-face)) - ;; --- Make sure we get comments properly --- - + ;; Make sure we get comments properly. (list "%.*" '(0 font-lock-comment-face)) - ;; --- Fontify TeX special characters as punctuation --- - + ;; Fontify TeX special characters as punctuation. (list "[$^_{}#&]" '(0 mdw-punct-face))))) -;;;----- SGML hacking ------------------------------------------------------- +;;;-------------------------------------------------------------------------- +;;; SGML hacking. (defun mdw-sgml-mode () (interactive) @@ -1939,38 +1873,35 @@ strip numbers instead." (setq mode-name "[mdw] SGML") (run-hooks 'mdw-sgml-mode-hook)) -;;;----- Shell scripts ------------------------------------------------------ +;;;-------------------------------------------------------------------------- +;;; Shell scripts. (defun mdw-setup-sh-script-mode () - ;; --- Fetch the shell interpreter's name --- - + ;; Fetch the shell interpreter's name. (let ((shell-name sh-shell-file)) - ;; --- Try reading the hash-bang line --- - + ;; Try reading the hash-bang line. (save-excursion (goto-char (point-min)) (if (looking-at "#![ \t]*\\([^ \t\n]*\\)") (setq shell-name (match-string 1)))) - ;; --- Now try to set the shell --- + ;; Now try to set the shell. ;; ;; Don't let `sh-set-shell' bugger up my script. - (let ((executable-set-magic #'(lambda (s &rest r) s))) (sh-set-shell shell-name))) - ;; --- Now enable my keys and the fontification --- - + ;; Now enable my keys and the fontification. (mdw-misc-mode-config) - ;; --- Set the indentation level correctly --- - + ;; Set the indentation level correctly. (setq sh-indentation 2) (setq sh-basic-offset 2)) -;;;----- Messages-file mode ------------------------------------------------- +;;;-------------------------------------------------------------------------- +;;; Messages-file mode. (defun messages-mode-guts () (setq messages-mode-syntax-table (make-syntax-table)) @@ -2058,7 +1989,8 @@ strip numbers instead." (add-hook 'cpp-messages-mode-hook 'mdw-misc-mode-config t) ; (add-hook 'messages-file-hook 'mdw-fontify-messages t) -;;;----- Messages-file mode ------------------------------------------------- +;;;-------------------------------------------------------------------------- +;;; Messages-file mode. (defvar mallow-driver-substitution-face 'mallow-driver-substitution-face "Face to use for subsittution directives.") @@ -2106,7 +2038,8 @@ strip numbers instead." (add-hook 'mallow-driver-hook 'mdw-misc-mode-config t) -;;;----- NFast debugs ------------------------------------------------------- +;;;-------------------------------------------------------------------------- +;;; NFast debugs. (defun nfast-debug-mode () (interactive) @@ -2146,9 +2079,10 @@ strip numbers instead." (turn-on-font-lock-if-enabled) (run-hooks 'nfast-debug-mode-hook)) -;;;----- Other languages ---------------------------------------------------- +;;;-------------------------------------------------------------------------- +;;; Other languages. -;; --- Smalltalk --- +;; Smalltalk. (defun mdw-setup-smalltalk () (and mdw-auto-indent @@ -2170,7 +2104,7 @@ strip numbers instead." (list "\\(\\s.\\|\\s(\\|\\s)\\|\\s\\\\|\\s/\\)" '(0 mdw-punct-face))))) -;; --- Lispy languages --- +;; Lispy languages. ;; Unpleasant bodge. (unless (boundp 'slime-repl-mode-map) @@ -2200,12 +2134,10 @@ strip numbers instead." (defun mdw-fontify-lispy () - ;; --- Set fill prefix --- - + ;; Set fill prefix. (mdw-standard-fill-prefix "\\([ \t]*;+[ \t]*\\)") - ;; --- Not much fontification needed --- - + ;; Not much fontification needed. (make-local-variable 'font-lock-keywords) (setq font-lock-keywords (list @@ -2221,7 +2153,8 @@ strip numbers instead." (defun mdw-setup-m4 () (mdw-standard-fill-prefix "\\([ \t]*\\(?:#+\\|\\\\)[ \t]*\\)")) -;;;----- Text mode ---------------------------------------------------------- +;;;-------------------------------------------------------------------------- +;;; Text mode. (defun mdw-text-mode () (setq fill-column 72) @@ -2230,7 +2163,8 @@ strip numbers instead." "\\([ \t]*\\([>#|:] ?\\)*[ \t]*\\)" 3) (auto-fill-mode 1)) -;;;----- Outline mode ------------------------------------------------------- +;;;-------------------------------------------------------------------------- +;;; Outline and hide/show modes. (defun mdw-outline-collapse-all () "Completely collapse everything in the entire buffer." @@ -2241,7 +2175,10 @@ strip numbers instead." (hide-subtree) (forward-line)))) -;;;----- Shell mode --------------------------------------------------------- +(setq hs-hide-comments-when-hiding-all nil) + +;;;-------------------------------------------------------------------------- +;;; Shell mode. (defun mdw-sh-mode-setup () (local-set-key [?\C-a] 'comint-bol)