Subject: Re: bug#31388: 27.0.50; message-mode hard-codes key bindings in docstring

From: "Basil L. Contovounesios" <[email-masked]>
Date: Tue, 08 May 2018 20:11:58 +0100

>From 0d0afd160b16decb77a9358a49efab5fdf307ba6 Mon Sep 17 00:00:00 2001
From: "Basil L. Contovounesios" <[email-masked]>
Date: Mon, 7 May 2018 16:29:19 +0100
Subject: [PATCH] Do not hard-code message-mode keys in docstring

* lisp/gnus/message.el (message-mode): Replace hard-coded bindings
with \[command] sequences in docstring.
---
 lisp/gnus/message.el | 101 ++++++++++++++++++++++++++++---------------
 1 file changed, 65 insertions(+), 36 deletions(-)

diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index 867c3d271b..c407fb0a6a 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -2893,42 +2893,71 @@ message--syntax-propertize
 ;;;###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>
-C-c C-s  `message-send' (send the message)  C-c C-c  `message-send-and-exit'
-C-c C-d  Postpone sending the message       C-c C-k  Kill the message
-C-c C-f  move to a header field (and create it if there isn't):
-	 C-c C-f C-t  move to To	C-c C-f C-s  move to Subject
-	 C-c C-f C-c  move to Cc	C-c C-f C-b  move to Bcc
-	 C-c C-f C-w  move to Fcc	C-c C-f C-r  move to Reply-To
-	 C-c C-f C-u  move to Summary	C-c C-f C-n  move to Newsgroups
-	 C-c C-f C-k  move to Keywords	C-c C-f C-d  move to Distribution
-	 C-c C-f C-o  move to From (\"Originator\")
-	 C-c C-f C-f  move to Followup-To
-	 C-c C-f C-m  move to Mail-Followup-To
-	 C-c C-f C-e  move to Expires
-	 C-c C-f C-i  cycle through Importance values
-	 C-c C-f s    change subject and append \"(was: <Old Subject>)\"
-	 C-c C-f x    crossposting with FollowUp-To header and note in body
-	 C-c C-f t    replace To: header with contents of Cc: or Bcc:
-	 C-c C-f a    Insert X-No-Archive: header and a note in the body
-C-c C-t  `message-insert-to' (add a To header to a news followup)
-C-c C-l  `message-to-list-only' (removes all but list address in to/cc)
-C-c C-n  `message-insert-newsgroups' (add a Newsgroup header to a news reply)
-C-c C-b  `message-goto-body' (move to beginning of message text).
-C-c C-i  `message-goto-signature' (move to the beginning of the signature).
-C-c C-w  `message-insert-signature' (insert `message-signature-file' file).
-C-c C-y  `message-yank-original' (insert current message, if any).
-C-c C-q  `message-fill-yanked-message' (fill what was yanked).
-C-c C-e  `message-elide-region' (elide the text between point and mark).
-C-c C-v  `message-delete-not-region' (remove the text outside the region).
-C-c C-z  `message-kill-to-signature' (kill the text up to the signature).
-C-c C-r  `message-caesar-buffer-body' (rot13 the message body).
-C-c C-a  `mml-attach-file' (attach a file as MIME).
-C-c C-u  `message-insert-or-toggle-importance'  (insert or cycle importance).
-C-c M-n  `message-insert-disposition-notification-to'  (request receipt).
-C-c M-m  `message-mark-inserted-region' (mark region with enclosing tags).
-C-c M-f  `message-mark-insert-file' (insert file marked with enclosing tags).
-M-RET    `message-newline-and-reformat' (break the line and reformat)."
+Like `text-mode' but with these additional commands:\\<message-mode-map>
+\\[message-send]	 `message-send' (send the message)
+\\[message-send-and-exit]	 `message-send-and-exit'
+\\[message-dont-send]	 Postpone sending the message
+\\[message-kill-buffer]	 Kill the message
+Commands for moving to a header field, creating it as required:
+	 \\[message-goto-to]	Move to To
+	 \\[message-goto-subject]	Move to Subject
+	 \\[message-goto-cc]	Move to Cc
+	 \\[message-goto-bcc]	Move to Bcc
+	 \\[message-goto-fcc]	Move to Fcc
+	 \\[message-goto-reply-to]	Move to Reply-To
+	 \\[message-goto-summary]	Move to Summary
+	 \\[message-goto-newsgroups]	Move to Newsgroups
+	 \\[message-goto-keywords]	Move to Keywords
+	 \\[message-goto-distribution]	Move to Distribution
+	 \\[message-goto-from]	Move to From (\"Originator\")
+	 \\[message-goto-followup-to]	Move to Followup-To
+	 \\[message-goto-mail-followup-to]	Move to Mail-Followup-To
+	 \\[message-insert-expires]	Move to Expires
+         \\[message-insert-or-toggle-importance]\
+	Cycle through Importance values
+	 \\[message-change-subject]\
+	Change subject and append \"(was: <Old Subject>)\"
+	 \\[message-cross-post-followup-to]\
+	Crosspost with Followup-To header and note in body
+	 \\[message-reduce-to-to-cc]\
+	Replace To header with contents of Cc or Bcc
+	 \\[message-add-archive-header]\
+	Insert X-No-Archive header and note in body
+\\[message-insert-to]\
+	 `message-insert-to' (add To header to a news followup)
+\\[message-to-list-only]\
+	 `message-to-list-only' (remove all but list address in To/Cc)
+\\[message-insert-newsgroups]\
+	 `message-insert-newsgroups' (add Newsgroup header to a news reply)
+\\[message-goto-body]\
+	 `message-goto-body' (move to beginning of message text)
+\\[message-goto-signature]\
+	 `message-goto-signature' (move to beginning of the signature)
+\\[message-insert-signature]\
+	 `message-insert-signature' (insert `message-signature-file' file)
+\\[message-yank-original]\
+	 `message-yank-original' (insert current message, if any)
+\\[message-fill-yanked-message]\
+	 `message-fill-yanked-message' (fill what was yanked)
+\\[message-elide-region]\
+	 `message-elide-region' (elide text between point and mark)
+\\[message-delete-not-region]\
+	 `message-delete-not-region' (remove text outside the region)
+\\[message-kill-to-signature]\
+	 `message-kill-to-signature' (kill text up to the signature)
+\\[message-caesar-buffer-body]\
+	 `message-caesar-buffer-body' (rot13 the message body)
+\\[mml-attach-file]	 `mml-attach-file' (attach a file as MIME)
+\\[message-insert-or-toggle-importance]\
+	 `message-insert-or-toggle-importance'  (insert or cycle importance)
+\\[message-insert-disposition-notification-to]\
+	 `message-insert-disposition-notification-to'  (request receipt)
+\\[message-mark-inserted-region]\
+	 `message-mark-inserted-region' (mark region with enclosing tags)
+\\[message-mark-insert-file]\
+	 `message-mark-insert-file' (insert file marked with enclosing tags)
+\\[message-newline-and-reformat]\
+	 `message-newline-and-reformat' (break line and reformat)"
   (set (make-local-variable 'message-reply-buffer) nil)
   (set (make-local-variable 'message-inserted-headers) nil)
   (set (make-local-variable 'message-send-actions) nil)
-- 
2.17.0

"Basil L. Contovounesios" <[email-masked]> writes:

> One solution is to replace the hard-coded bindings with
> \[command]-sequences; another to replace the whole listing with
> \{message-mode-map}.  In both cases, the binding listed for
> message-insert-or-toggle-importance will be C-c C-u instead of
> C-c C-f C-i, due to the higher precedence of the former.  WDYT?

I attach a patch as an example of doing the former.
The latter would probably look as follows:

>From e1b28796dc2c6b6828d73740dd98f4fd83771caa Mon Sep 17 00:00:00 2001
From: "Basil L. Contovounesios" <[email-masked]>
Date: Mon, 7 May 2018 16:42:41 +0100
Subject: [PATCH] Do not hard-code message-mode keys in docstring

* lisp/gnus/message.el (message-mode): Replace hard-coded bindings
in docstring with summary of message-mode-map.
---
 lisp/gnus/message.el | 39 +++------------------------------------
 1 file changed, 3 insertions(+), 36 deletions(-)

diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index 867c3d271b..a85925d94d 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -2893,42 +2893,9 @@ message--syntax-propertize
 ;;;###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>
-C-c C-s  `message-send' (send the message)  C-c C-c  `message-send-and-exit'
-C-c C-d  Postpone sending the message       C-c C-k  Kill the message
-C-c C-f  move to a header field (and create it if there isn't):
-	 C-c C-f C-t  move to To	C-c C-f C-s  move to Subject
-	 C-c C-f C-c  move to Cc	C-c C-f C-b  move to Bcc
-	 C-c C-f C-w  move to Fcc	C-c C-f C-r  move to Reply-To
-	 C-c C-f C-u  move to Summary	C-c C-f C-n  move to Newsgroups
-	 C-c C-f C-k  move to Keywords	C-c C-f C-d  move to Distribution
-	 C-c C-f C-o  move to From (\"Originator\")
-	 C-c C-f C-f  move to Followup-To
-	 C-c C-f C-m  move to Mail-Followup-To
-	 C-c C-f C-e  move to Expires
-	 C-c C-f C-i  cycle through Importance values
-	 C-c C-f s    change subject and append \"(was: <Old Subject>)\"
-	 C-c C-f x    crossposting with FollowUp-To header and note in body
-	 C-c C-f t    replace To: header with contents of Cc: or Bcc:
-	 C-c C-f a    Insert X-No-Archive: header and a note in the body
-C-c C-t  `message-insert-to' (add a To header to a news followup)
-C-c C-l  `message-to-list-only' (removes all but list address in to/cc)
-C-c C-n  `message-insert-newsgroups' (add a Newsgroup header to a news reply)
-C-c C-b  `message-goto-body' (move to beginning of message text).
-C-c C-i  `message-goto-signature' (move to the beginning of the signature).
-C-c C-w  `message-insert-signature' (insert `message-signature-file' file).
-C-c C-y  `message-yank-original' (insert current message, if any).
-C-c C-q  `message-fill-yanked-message' (fill what was yanked).
-C-c C-e  `message-elide-region' (elide the text between point and mark).
-C-c C-v  `message-delete-not-region' (remove the text outside the region).
-C-c C-z  `message-kill-to-signature' (kill the text up to the signature).
-C-c C-r  `message-caesar-buffer-body' (rot13 the message body).
-C-c C-a  `mml-attach-file' (attach a file as MIME).
-C-c C-u  `message-insert-or-toggle-importance'  (insert or cycle importance).
-C-c M-n  `message-insert-disposition-notification-to'  (request receipt).
-C-c M-m  `message-mark-inserted-region' (mark region with enclosing tags).
-C-c M-f  `message-mark-insert-file' (insert file marked with enclosing tags).
-M-RET    `message-newline-and-reformat' (break the line and reformat)."
+Like `text-mode', but with these additional commands:
+
+\\{message-mode-map}"
   (set (make-local-variable 'message-reply-buffer) nil)
   (set (make-local-variable 'message-inserted-headers) nil)
   (set (make-local-variable 'message-send-actions) nil)
-- 
2.17.0

-- 
Basil