Function: message-mode

message-mode is an interactive and byte-compiled function defined in message.el.gz.

Signature

(message-mode)

Documentation

Major mode for editing mail and news to be sent.

Like text-mode, but with these additional commands:

C-M-i ispell-complete-word
C-M-o message-split-line
C-a message-beginning-of-line(var)/message-beginning-of-line(fun)
C-c ? describe-mode
C-c C-M-y message-yank-buffer
C-c C-a mml-attach-file
C-c C-b message-goto-body
C-c C-c message-send-and-exit
C-c C-d message-dont-send
C-c C-e message-elide-region
C-c C-f C-a message-generate-unsubscribed-mail-followup-to
C-c C-f C-b message-goto-bcc
C-c C-f C-c message-goto-cc
C-c C-f C-d message-goto-distribution
C-c C-f C-e message-insert-expires
C-c C-f C-f message-goto-followup-to
C-c C-f C-k message-goto-keywords
C-c C-f C-n message-goto-newsgroups
C-c C-f C-o message-goto-from
C-c C-f C-r message-goto-reply-to
C-c C-f C-s message-goto-subject
C-c C-f C-t message-goto-to
C-c C-f C-u message-goto-summary
C-c C-f C-w message-goto-fcc
C-c C-f RET message-goto-mail-followup-to
C-c C-f TAB message-insert-or-toggle-importance
C-c C-f a message-add-archive-header
C-c C-f d gnus-diary-check-message
C-c C-f s message-change-subject
C-c C-f t message-reduce-to-to-cc
C-c C-f w message-insert-wide-reply
C-c C-f x message-cross-post-followup-to
C-c C-j gnus-delay-article
C-c C-k message-kill-buffer
C-c C-l message-to-list-only
C-c C-n message-insert-newsgroups
C-c C-o message-sort-headers
C-c C-p message-insert-screenshot
C-c C-q message-fill-yanked-message
C-c C-r message-caesar-buffer-body
C-c C-s message-send
C-c C-t message-insert-to
C-c C-u message-insert-or-toggle-importance
C-c C-v message-delete-not-region
C-c C-w message-insert-signature
C-c C-y message-yank-original
C-c C-z message-kill-to-signature
C-c M-f message-mark-insert-file
C-c M-h message-insert-headers
C-c M-k message-kill-address
C-c M-m message-mark-inserted-region
C-c M-n message-insert-disposition-notification-to
C-c M-r message-rename-buffer
C-c TAB message-goto-signature
M-RET message-newline-and-reformat
M-n message-display-abbrev
TAB message-tab

In addition to any hooks its parent mode might have run, this mode runs the hook message-mode-hook, as the final or penultimate step during initialization.

Probably introduced at or before Emacs version 27.1.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/message.el.gz
;;;###autoload
(define-derived-mode message-mode text-mode "Message"
  "Major mode for editing mail and news to be sent.
Like `text-mode', but with these additional commands:

\\{message-mode-map}"
  (setq-local message-reply-buffer nil)
  (setq-local message-inserted-headers nil)
  (setq-local message-send-actions nil)
  (setq-local message-return-action nil)
  (setq-local message-exit-actions nil)
  (setq-local message-kill-actions nil)
  (setq-local message-postpone-actions nil)
  (setq-local message-draft-article nil)
  (setq buffer-offer-save t)
  (setq-local facemenu-add-face-function
       (lambda (face end)
	 (let ((face-fun (cdr (assq face message-face-alist))))
	   (if face-fun
	       (funcall face-fun (point) end)
	     (error "Face %s not configured for %s mode" face mode-name)))
	 ""))
  (setq-local facemenu-remove-face-function t)
  (setq-local message-reply-headers nil)
  (make-local-variable 'message-newsreader)
  (make-local-variable 'message-mailer)
  (make-local-variable 'message-post-method)
  (setq-local message-sent-message-via nil)
  (setq-local message-checksum nil)
  (setq-local message-mime-part 0)
  (message-setup-fill-variables)
  (when message-fill-column
    (setq fill-column message-fill-column)
    (turn-on-auto-fill))
  ;; Allow using comment commands to add/remove quoting.
  ;; (setq-local comment-start message-yank-prefix)
  (when message-yank-prefix
    (setq-local comment-start message-yank-prefix)
    (setq-local comment-start-skip
                (concat "^" (regexp-quote message-yank-prefix) "[ \t]*")))
  (setq-local font-lock-defaults '(message-font-lock-keywords t))
  (if (boundp 'tool-bar-map)
      (setq-local tool-bar-map (message-make-tool-bar)))
  ;; Mmmm... Forbidden properties...
  (add-hook 'after-change-functions #'message-strip-forbidden-properties
	    nil 'local)
  ;; Allow mail alias things.
  (cond
   ((message-mail-alias-type-p 'abbrev)
    (mail-abbrevs-setup))
   ((message-mail-alias-type-p 'ecomplete)
    (ecomplete-setup)))
  ;; FIXME: merge the completion tables from ecomplete/bbdb/...?
  ;;(add-hook 'completion-at-point-functions #'message-ecomplete-capf nil t)
  (add-hook 'completion-at-point-functions #'message-completion-function nil t)
  (unless buffer-file-name
    (message-set-auto-save-file-name))
  (unless (buffer-base-buffer)
    ;; Don't enable multibyte on an indirect buffer.  Maybe enabling
    ;; multibyte is not necessary at all. -- zsh
    (mm-enable-multibyte))
  (setq-local indent-tabs-mode nil) ; No tabs for indentation.
  (mml-mode)
  ;; Syntactic fontification. Helps `show-paren-mode',
  ;; `electric-pair-mode', and C-M-* navigation by syntactically
  ;; excluding citations and other artifacts.
  ;;
  (setq-local syntax-propertize-function #'message--syntax-propertize)
  (setq-local parse-sexp-ignore-comments t)
  (setq-local message-encoded-mail-cache nil))