# HG changeset patch # User Stefan Monnier # Date 1004221169 0 # Node ID cfc82f90a7d4b5af50761d86d3cba115c787c498 # Parent 771aec14ad7463e9dd84281cdb9aac82deffb28e (mail-mode-syntax-table): Let it inherit from text-mode-syntax-table. (mail-mode): Use define-derived-mode. Fix ordering of alternatives in adaptive-fill-regexp. (mail-mode-map): Don't rely on keymap's internal representation. diff -r 771aec14ad74 -r cfc82f90a7d4 lisp/mail/sendmail.el --- a/lisp/mail/sendmail.el Sat Oct 27 22:07:59 2001 +0000 +++ b/lisp/mail/sendmail.el Sat Oct 27 22:19:29 2001 +0000 @@ -324,13 +324,12 @@ The value should be an expression to test whether the problem will actually occur.") -(defvar mail-mode-syntax-table nil - "Syntax table used while in mail mode.") - -(if (not mail-mode-syntax-table) - (progn - (setq mail-mode-syntax-table (copy-syntax-table text-mode-syntax-table)) - (modify-syntax-entry ?% ". " mail-mode-syntax-table))) +(defvar mail-mode-syntax-table + (let ((st (make-syntax-table))) + ;; define-derived-mode will make it inherit from text-mode-syntax-table. + (modify-syntax-entry ?% ". " st) + st) + "Syntax table used while in `mail-mode'.") (defvar mail-font-lock-keywords (eval-when-compile @@ -456,7 +455,7 @@ :options '(footnote-mode)) ;;;###autoload -(defun mail-mode () +(define-derived-mode mail-mode text-mode "Mail" "Major mode for editing mail to be sent. Like Text Mode but with these additional commands: \\[mail-send] mail-send (send the message) \\[mail-send-and-exit] mail-send-and-exit @@ -471,15 +470,8 @@ \\[mail-sent-via] mail-sent-via (add a Sent-via field for each To or CC). Turning on Mail mode runs the normal hooks `text-mode-hook' and `mail-mode-hook' (in that order)." - (interactive) - (kill-all-local-variables) (make-local-variable 'mail-reply-action) (make-local-variable 'mail-send-actions) - (set-syntax-table mail-mode-syntax-table) - (use-local-map mail-mode-map) - (setq local-abbrev-table text-mode-abbrev-table) - (setq major-mode 'mail-mode) - (setq mode-name "Mail") (setq buffer-offer-save t) (make-local-variable 'font-lock-defaults) (setq font-lock-defaults '(mail-font-lock-keywords t t)) @@ -494,12 +486,12 @@ (set (make-local-variable 'comment-start) mail-yank-prefix) (make-local-variable 'adaptive-fill-regexp) (setq adaptive-fill-regexp - (concat adaptive-fill-regexp - "\\|[ \t]*[-[:alnum:]]*>+[ \t]*")) + (concat "[ \t]*[-[:alnum:]]*>+[ \t]*\\|" + adaptive-fill-regexp)) (make-local-variable 'adaptive-fill-first-line-regexp) (setq adaptive-fill-first-line-regexp - (concat adaptive-fill-first-line-regexp - "\\|[ \t]*[-[:alnum:]]*>+[ \t]*")) + (concat "[ \t]*[-[:alnum:]]*>+[ \t]*\\|" + adaptive-fill-first-line-regexp)) ;; `-- ' precedes the signature. `-----' appears at the start of the ;; lines that delimit forwarded messages. ;; Lines containing just >= 3 dashes, perhaps after whitespace, @@ -509,8 +501,7 @@ "\\|[ \t]*[[:alnum:]]*>+[ \t]*$\\|[ \t]*$\\|" "-- $\\|---+$\\|" page-delimiter)) - (setq paragraph-separate paragraph-start) - (run-hooks 'text-mode-hook 'mail-mode-hook)) + (setq paragraph-separate paragraph-start)) (defun mail-header-end () @@ -597,7 +588,7 @@ (if mail-mode-map nil - (setq mail-mode-map (nconc (make-sparse-keymap) text-mode-map)) + (setq mail-mode-map (make-sparse-keymap)) (define-key mail-mode-map "\M-\t" 'mail-complete) (define-key mail-mode-map "\C-c?" 'describe-mode) (define-key mail-mode-map "\C-c\C-f\C-t" 'mail-to)