Subject: bug#47286: 28.0.50; [PATCH] Replace "(default %s)" with 'format-prompt'

From: Gabriel <[email-masked]>
Date: Sat, 20 Mar 2021 19:22:52 -0300

This patches replaces several occurences of the hardcoded minibuffer
default prompt "(default %s)" with a call to 'format-prompt'.  It also
removes the suffix ": ", when applicable, that is automatically handled
by 'format-prompt'.

>From 64b7aa2700c7281589a52317a898e7d401e52465 Mon Sep 17 00:00:00 2001
From: Gabriel do Nascimento Ribeiro <[email-masked]>
Date: Fri, 19 Mar 2021 19:28:05 -0300
Subject: [PATCH] Replace minibuffer default prompt "(default %s)" with
 'format-prompt'

* lisp/cmuscheme.el (scheme-load-file, scheme-compile-file): Remove
prompt suffix ": ".

* lisp/comint.el (comint-get-source): Use 'format-prompt'.

* lisp/emulation/viper-cmd.el (viper-quote-region, viper-kill-buffer)
(viper-query-replace): Remove prompt suffix ": ".
(viper-read-string-with-history): Use 'format-prompt'.

* lisp/eshell/esh-mode.el (eshell-find-tag): Remove prompt suffix ": ".

* lisp/gnus/gnus-sum.el (gnus-articles-to-read)
(gnus-summary-search-article-forward)
(gnus-summary-search-article-backward): Use 'format-prompt'.

* lisp/international/mule-cmds.el (set-input-method, toggle-input-method)
(describe-input-method, set-language-environment)
(describe-language-environment): Use 'format-prompt'.

* lisp/mh-e/mh-gnus.el (mh-mml-minibuffer-read-disposition):
Use 'format-prompt'.

* lisp/mh-e/mh-letter.el (mh-insert-letter): Use 'format-prompt'.

* lisp/mh-e/mh-mime.el (mh-display-with-external-viewer)
(mh-mime-save-parts, mh-mh-forward-message)
(mh-mml-query-cryptographic-method, mh-minibuffer-read-type):
Use 'format-prompt'.

* lisp/mh-e/mh-seq.el (mh-read-seq, mh-read-range): Use 'format-prompt'.

* lisp/mh-e/mh-utils.el (mh-prompt-for-folder): Use 'format-prompt'.

* lisp/progmodes/cc-styles.el (c-read-offset): Use 'format-prompt'.

* lisp/progmodes/etags.el (find-tag-tag): Use 'format-prompt'.
(find-tag-noselect, find-tag, find-tag-other-window)
(find-tag-other-frame, find-tag-regexp): Remove prompt suffix ": ".

* lisp/progmodes/idlwave.el (idlwave-find-module): Use 'format-prompt'.

* lisp/progmodes/inf-lisp.el (lisp-load-file, lisp-compile-file):
Remove prompt suffix ": ".

* lisp/progmodes/project.el (project--completing-read-strict)
(project--completing-read-strict): Use 'format-prompt'.

* lisp/progmodes/tcl.el (tcl-load-file, tcl-restart-with-file):
Remove prompt suffix ": ".

* lisp/progmodes/verilog-mode.el (verilog-surelint-off)
(verilog-goto-defun): Use 'format-prompt'.

* lisp/progmodes/xref.el (xref--read-identifier): Use 'format-prompt'.
(xref-find-definitions, xref-find-definitions-other-window)
(xref-find-definitions-other-frame, xref-find-references):
Remove prompt suffix ": ".

* lisp/ses.el (ses-read-printer): Use 'format-prompt'.
(ses-read-cell-printer, ses-read-column-printer)
(ses-read-default-printer, ses-define-local-printer):
Remove prompt suffix ": ".

* lisp/subr.el (read-number): Use 'minibuffer-default-prompt-format'.

* lisp/term.el (term-get-source): Use 'format-prompt'.

* src/minibuf.c (read-buffer): Use 'format-prompt'.
---
 lisp/cmuscheme.el               |  4 ++--
 lisp/comint.el                  |  6 ++----
 lisp/emulation/viper-cmd.el     | 31 ++++++++++++-------------------
 lisp/eshell/esh-mode.el         |  2 +-
 lisp/gnus/gnus-sum.el           | 31 ++++++++++++++-----------------
 lisp/international/mule-cmds.el | 10 +++++-----
 lisp/mh-e/mh-gnus.el            |  2 +-
 lisp/mh-e/mh-letter.el          |  5 +----
 lisp/mh-e/mh-mime.el            | 20 +++++++-------------
 lisp/mh-e/mh-seq.el             | 16 +++++-----------
 lisp/mh-e/mh-utils.el           |  7 +++----
 lisp/progmodes/cc-styles.el     |  2 +-
 lisp/progmodes/etags.el         | 16 ++++++----------
 lisp/progmodes/idlwave.el       |  2 +-
 lisp/progmodes/inf-lisp.el      |  4 ++--
 lisp/progmodes/project.el       |  6 ++----
 lisp/progmodes/tcl.el           |  4 ++--
 lisp/progmodes/verilog-mode.el  |  9 +++++----
 lisp/progmodes/xref.el          | 15 +++++----------
 lisp/ses.el                     | 12 +++++-------
 lisp/subr.el                    |  4 ++--
 lisp/term.el                    |  6 ++----
 src/minibuf.c                   |  4 ++--
 23 files changed, 88 insertions(+), 130 deletions(-)

diff --git a/lisp/cmuscheme.el b/lisp/cmuscheme.el
index 772891d5d3..d43cdb15c0 100644
--- a/lisp/cmuscheme.el
+++ b/lisp/cmuscheme.el
@@ -421,7 +421,7 @@ scheme-prev-l/c-dir/file
 
 (defun scheme-load-file (file-name)
   "Load a Scheme file FILE-NAME into the inferior Scheme process."
-  (interactive (comint-get-source "Load Scheme file: " scheme-prev-l/c-dir/file
+  (interactive (comint-get-source "Load Scheme file" scheme-prev-l/c-dir/file
 				  scheme-source-modes t)) ; t because `load'
                                                           ; needs an exact name
   (comint-check-source file-name) ; Check to see if buffer needs saved.
@@ -433,7 +433,7 @@ scheme-load-file
 
 (defun scheme-compile-file (file-name)
   "Compile a Scheme file FILE-NAME in the inferior Scheme process."
-  (interactive (comint-get-source "Compile Scheme file: "
+  (interactive (comint-get-source "Compile Scheme file"
 				  scheme-prev-l/c-dir/file
 				  scheme-source-modes
 				  nil)) ; nil because COMPILE doesn't
diff --git a/lisp/comint.el b/lisp/comint.el
index 65072b0137..b04d404676 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -2946,7 +2946,7 @@ comint-get-source
 then the filename reader will only accept a file that exists.
 
 A typical use:
- (interactive (comint-get-source \"Compile file: \" prev-lisp-dir/file
+ (interactive (comint-get-source \"Compile file\" prev-lisp-dir/file
                                  \\='(lisp-mode) t))"
   (let* ((def (comint-source-default prev-dir/file source-modes))
 	 (stringfile (comint-extract-string))
@@ -2959,9 +2959,7 @@ comint-get-source
                     (car def)))
 	 (deffile (if sfile-p (file-name-nondirectory stringfile)
                     (cdr def)))
-	 (ans (read-file-name (if deffile (format "%s(default %s) "
-						  prompt    deffile)
-                                prompt)
+	 (ans (read-file-name (format-prompt prompt deffile)
 			      defdir
 			      (concat defdir deffile)
 			      mustmatch-p)))
diff --git a/lisp/emulation/viper-cmd.el b/lisp/emulation/viper-cmd.el
index 42d6c1eb19..728f790a96 100644
--- a/lisp/emulation/viper-cmd.el
+++ b/lisp/emulation/viper-cmd.el
@@ -1786,7 +1786,7 @@ viper-quote-region
 	(do-not-change-default t))
     (setq quote-str
 	  (viper-read-string-with-history
-	   "Quote string: "
+	   "Quote string"
 	   nil
 	   'viper-quote-region-history
            ;; FIXME: Use comment-region.
@@ -1995,24 +1995,17 @@ viper-read-string-with-history
 	    #'viper-minibuffer-standard-hook
 	    (if (or (not (listp old)) (eq (car old) 'lambda))
 		(list old) old))))
-	(val "")
-	(padding "")
-	temp-msg)
+	(val ""))
 
     (setq keymap (or keymap minibuffer-local-map)
 	  initial (or initial "")
-	  viper-initial initial
-	  temp-msg (if default
-		       (format "(default %s) " default)
-		     ""))
+	  viper-initial initial)
 
     (setq viper-incomplete-ex-cmd nil)
-    (setq val (read-from-minibuffer prompt
-				    (concat temp-msg initial val padding)
-				    keymap nil history-var))
-    (setq minibuffer-setup-hook nil
-	  padding (viper-array-to-string (this-command-keys))
-	  temp-msg "")
+    (setq val (read-from-minibuffer (format-prompt prompt default)
+				    nil
+				    keymap nil history-var default))
+    (setq minibuffer-setup-hook nil)
     ;; the following tries to be smart about what to put in history
     (if (not (string= val (car (symbol-value history-var))))
 	(push val (symbol-value history-var)))
@@ -3825,7 +3818,7 @@ viper-kill-buffer
   (let (buffer buffer-name)
     (setq buffer-name
 	  (funcall viper-read-buffer-function
-		   (format "Kill buffer (%s): "
+		   (format-prompt "Kill buffer"
 			   (buffer-name (current-buffer)))))
     (setq buffer
 	  (if (null buffer-name)
@@ -4171,8 +4164,8 @@ viper-query-replace
   (interactive)
   (let (str)
     (setq str (viper-read-string-with-history
-	       (if viper-re-query-replace "Query replace regexp: "
-		 "Query replace: ")
+	       (if viper-re-query-replace "Query replace regexp"
+		 "Query replace")
 	       nil  ; no initial
 	       'viper-replace1-history
 	       (car viper-replace1-history) ; default
@@ -4187,7 +4180,7 @@ viper-query-replace
 	  (query-replace-regexp
 	   str
 	   (viper-read-string-with-history
-	    (format-message "Query replace regexp `%s' with: " str)
+	    (format-message "Query replace regexp `%s' with" str)
 	    nil  ; no initial
 	    'viper-replace1-history
 	    (car viper-replace1-history) ; default
@@ -4195,7 +4188,7 @@ viper-query-replace
 	(query-replace
 	 str
 	 (viper-read-string-with-history
-	  (format-message "Query replace `%s' with: " str)
+	  (format-message "Query replace `%s' with" str)
 	  nil  ; no initial
 	  'viper-replace1-history
 	  (car viper-replace1-history) ; default
diff --git a/lisp/eshell/esh-mode.el b/lisp/eshell/esh-mode.el
index d29b010ea0..f9dbce9770 100644
--- a/lisp/eshell/esh-mode.el
+++ b/lisp/eshell/esh-mode.el
@@ -458,7 +458,7 @@ eshell-find-tag
   (let ((inhibit-read-only t)
 	(no-default (eobp))
 	(find-tag-default-function 'ignore))
-    (setq tagname (car (find-tag-interactive "Find tag: " no-default)))
+    (setq tagname (car (find-tag-interactive "Find tag" no-default)))
     (with-suppressed-warnings ((obsolete find-tag))
       (find-tag tagname next-p regexp-p))))
 
diff --git a/lisp/gnus/gnus-sum.el b/lisp/gnus/gnus-sum.el
index 97da550353..c30f9a5f35 100644
--- a/lisp/gnus/gnus-sum.el
+++ b/lisp/gnus/gnus-sum.el
@@ -5977,14 +5977,15 @@ gnus-articles-to-read
 			 (input
 			  (read-string
 			   (if only-read-p
-			       (format
-				"How many articles from %s (available %d, default %d): "
-				(gnus-group-real-name gnus-newsgroup-name)
-				number default)
-			     (format
-			      "How many articles from %s (%d default): "
-			      (gnus-group-real-name gnus-newsgroup-name)
-			      default))
+			       (format-prompt
+				    "How many articles from %s (available %d)"
+				    default
+				    (gnus-group-real-name gnus-newsgroup-name)
+				    number)
+			     (format-prompt
+			      "How many articles from %s"
+			      default
+			      (gnus-group-real-name gnus-newsgroup-name)))
 			   nil
 			   nil
 			   (number-to-string default))))
@@ -9514,11 +9515,9 @@ gnus-summary-search-article-forward
   (interactive
    (list
     (read-string
-     (format "Search article %s (regexp%s): "
-	     (if current-prefix-arg "backward" "forward")
-	     (if gnus-last-search-regexp
-		 (concat ", default " gnus-last-search-regexp)
-	       "")))
+     (format-prompt "Search article %s (regexp)"
+                    gnus-last-search-regexp
+                    (if current-prefix-arg "backward" "forward")))
     current-prefix-arg)
    gnus-summary-mode)
   (if (string-equal regexp "")
@@ -9537,10 +9536,8 @@ gnus-summary-search-article-backward
   (interactive
    (list
     (read-string
-     (format "Search article backward (regexp%s): "
-	     (if gnus-last-search-regexp
-		 (concat ", default " gnus-last-search-regexp)
-	       ""))))
+     (format-prompt "Search article backward (regexp)"
+                    gnus-last-search-regexp)))
    gnus-summary-mode)
   (gnus-summary-search-article-forward regexp 'backward))
 
diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el
index e4bdf50f52..743b638d06 100644
--- a/lisp/international/mule-cmds.el
+++ b/lisp/international/mule-cmds.el
@@ -1524,7 +1524,7 @@ set-input-method
   (interactive
    (let* ((default (or (car input-method-history) default-input-method)))
      (list (read-input-method-name
-	    (if default "Select input method (default %s): " "Select input method: ")
+	    (format-prompt "Select input method" default)
 	    default t)
 	   t)))
   (activate-input-method input-method)
@@ -1569,7 +1569,7 @@ toggle-input-method
        (if (or arg (not default))
 	   (progn
 	     (read-input-method-name
-	      (if default "Input method (default %s): " "Input method: " )
+	      (format-prompt "Input method" default)
 	      default t))
 	 default))
       (unless default-input-method
@@ -1620,7 +1620,7 @@ describe-input-method
   "Describe input method INPUT-METHOD."
   (interactive
    (list (read-input-method-name
-	  "Describe input method (default current choice): ")))
+          (format-prompt "Describe input method" current-input-method))))
   (if (and input-method (symbolp input-method))
       (setq input-method (symbol-name input-method)))
   (help-setup-xref (list #'describe-input-method
@@ -1929,7 +1929,7 @@ set-language-environment
 the new language environment, it runs `set-language-environment-hook'."
   (interactive (list (read-language-name
 		      nil
-		      "Set language environment (default English): ")))
+		      (format-prompt "Set language environment" "English"))))
   (if language-name
       (if (symbolp language-name)
 	  (setq language-name (symbol-name language-name)))
@@ -2144,7 +2144,7 @@ describe-language-environment
   (interactive
    (list (read-language-name
 	  'documentation
-	  "Describe language environment (default current choice): ")))
+	  (format-prompt "Describe language environment" current-language-environment))))
   (if (null language-name)
       (setq language-name current-language-environment))
   (if (or (null language-name)
diff --git a/lisp/mh-e/mh-gnus.el b/lisp/mh-e/mh-gnus.el
index 6a9851662a..7898d7eece 100644
--- a/lisp/mh-e/mh-gnus.el
+++ b/lisp/mh-e/mh-gnus.el
@@ -129,7 +129,7 @@ mh-mml-minibuffer-read-disposition
   (unless default
     (setq default (mml-content-disposition type filename)))
   (let ((disposition (completing-read
-		      (format "Disposition (default %s): " default)
+		      (format-prompt "Disposition" default)
 		      '(("attachment") ("inline") (""))
 		      nil t nil nil default)))
     (if (not (equal disposition ""))
diff --git a/lisp/mh-e/mh-letter.el b/lisp/mh-e/mh-letter.el
index f5ad73d800..107a0ae5e4 100644
--- a/lisp/mh-e/mh-letter.el
+++ b/lisp/mh-e/mh-letter.el
@@ -390,10 +390,7 @@ mh-insert-letter
                 (or mh-sent-from-msg (nth 0 (mh-translate-range folder "cur")))
               (nth 0 (mh-translate-range folder "cur"))))
           (message
-           (read-string (concat "Message number"
-                                (or (and default
-                                         (format " (default %d): " default))
-                                    ": "))
+           (read-string (format-prompt "Message number" default)
                         nil nil
                         (if (numberp default)
                             (int-to-string default)
diff --git a/lisp/mh-e/mh-mime.el b/lisp/mh-e/mh-mime.el
index 70df9e6b0f..df3c711e3d 100644
--- a/lisp/mh-e/mh-mime.el
+++ b/lisp/mh-e/mh-mime.el
@@ -259,9 +259,7 @@ mh-display-with-external-viewer
               (methods (mapcar (lambda (x) (list (cdr (assoc 'viewer x))))
                                (mailcap-mime-info type 'all)))
               (def (caar methods))
-              (prompt (format "Viewer%s: " (if def
-                                               (format " (default %s)" def)
-                                             "")))
+              (prompt (format-prompt "Viewer" def))
               (method (completing-read prompt methods nil nil nil nil def))
               (folder mh-show-folder-buffer)
               (buffer-read-only nil))
@@ -395,9 +393,9 @@ mh-mime-save-parts
           ((and (or prompt
                     (equal t mh-mime-save-parts-default-directory))
                 mh-mime-save-parts-directory)
-           (read-directory-name (format
-                            "Store in directory (default %s): "
-                            mh-mime-save-parts-directory)
+           (read-directory-name (format-prompt
+                                 "Store in directory"
+                                 mh-mime-save-parts-directory)
                            "" mh-mime-save-parts-directory t ""))
           ((stringp mh-mime-save-parts-default-directory)
            mh-mime-save-parts-default-directory)
@@ -1258,11 +1256,7 @@ mh-mh-forward-message
   (interactive (list
                 (mml-minibuffer-read-description)
                 (mh-prompt-for-folder "Message from" mh-sent-from-folder nil)
-                (read-string (concat "Messages"
-                                     (if (numberp mh-sent-from-msg)
-                                         (format " (default %d): "
-                                                 mh-sent-from-msg)
-                                       ": ")))))
+                (read-string (format-prompt "Messages" mh-sent-from-msg))))
   (beginning-of-line)
   (insert "#forw [")
   (and description
@@ -1596,7 +1590,7 @@ mh-mml-query-cryptographic-method
   (if current-prefix-arg
       (let ((def (or (car mh-mml-cryptographic-method-history)
                      mh-mml-method-default)))
-        (completing-read (format "Method (default %s): " def)
+        (completing-read (format-prompt "Method" def)
                          '(("pgp") ("pgpmime") ("smime"))
                          nil t nil 'mh-mml-cryptographic-method-history def))
     mh-mml-method-default))
@@ -1731,7 +1725,7 @@ mh-minibuffer-read-type
          (type (or (and (not (equal probed-type "application/octet-stream"))
                         probed-type)
                    (completing-read
-                    (format "Content type (default %s): " default)
+                    (format-prompt "Content type" default)
                     (mapcar #'list (mailcap-mime-types))))))
     (if (not (equal type ""))
         type
diff --git a/lisp/mh-e/mh-seq.el b/lisp/mh-e/mh-seq.el
index e8a03f6704..4a464a3f55 100644
--- a/lisp/mh-e/mh-seq.el
+++ b/lisp/mh-e/mh-seq.el
@@ -390,10 +390,7 @@ mh-read-seq
 the NOT-EMPTY flag is non-nil, and supply an optional DEFAULT
 sequence. A reply of `%' defaults to the first sequence
 containing the current message."
-  (let* ((input (completing-read (format "%s sequence%s: " prompt
-                                         (if default
-                                             (format " (default %s)" default)
-                                           ""))
+  (let* ((input (completing-read (format-prompt "%s sequence" default prompt)
                                  (mh-seq-names mh-seq-list)
                                  nil nil nil 'mh-sequence-history))
          (seq (cond ((equal input "%")
@@ -646,13 +643,10 @@ mh-read-range
                         ((stringp default) default)
                         ((symbolp default) (symbol-name default))))
          (prompt (cond ((and guess large default)
-                        (format "%s (folder has %s messages, default %s)"
-                                prompt (car counts) default))
-                       ((and guess large)
-                        (format "%s (folder has %s messages)"
-                                prompt (car counts)))
+                        (format-prompt "%s (folder has %s messages)"
+                                default prompt (car counts)))
                        (default
-                         (format "%s (default %s)" prompt default))))
+                         (format-prompt prompt default))))
          (minibuffer-local-completion-map mh-range-completion-map)
          (seq-list (if (eq folder mh-current-folder)
                        mh-seq-list
@@ -662,7 +656,7 @@ mh-read-range
                   (mh-seq-names seq-list)))
          (input (cond ((and (not ask-flag) unseen) (symbol-name mh-unseen-seq))
                       ((and (not ask-flag) (not large)) "all")
-                      (t (completing-read (format "%s: " prompt)
+                      (t (completing-read prompt
                                           'mh-range-completion-function nil nil
                                           nil 'mh-range-history default))))
          msg-list)
diff --git a/lisp/mh-e/mh-utils.el b/lisp/mh-e/mh-utils.el
index d7c607df5c..8cb68f5cf1 100644
--- a/lisp/mh-e/mh-utils.el
+++ b/lisp/mh-e/mh-utils.el
@@ -758,10 +758,9 @@ mh-prompt-for-folder
 used in searching."
   (if (null default)
       (setq default ""))
-  (let* ((default-string (cond (default-string (format " (default %s)" default-string))
-                               ((equal "" default) "")
-                               (t (format " (default %s)" default))))
-         (prompt (format "%s folder%s: " prompt default-string))
+  (let* ((default-string (or default-string
+                             (if (equal default "") nil default)))
+         (prompt (format-prompt "%s folder" default-string prompt))
          (mh-current-folder-name mh-current-folder)
          read-name folder-name)
     (while (and (setq read-name (mh-folder-completing-read
diff --git a/lisp/progmodes/cc-styles.el b/lisp/progmodes/cc-styles.el
index aec259f1b3..7d02e1d702 100644
--- a/lisp/progmodes/cc-styles.el
+++ b/lisp/progmodes/cc-styles.el
@@ -442,7 +442,7 @@ c-read-offset
 	 (errmsg  (concat "Offset must be int, func, var, vector, list, "
 			  "or [+,-,++,--,*,/] "
 			  defstr))
-	 (prompt (concat symname " offset " defstr))
+	 (prompt (format-prompt "%s offset" oldoff symname))
 	 (keymap (make-sparse-keymap))
 	 (minibuffer-completion-table obarray)
 	 (minibuffer-completion-predicate 'fboundp)
diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el
index 023c90cca5..13717b1b89 100644
--- a/lisp/progmodes/etags.el
+++ b/lisp/progmodes/etags.el
@@ -836,11 +836,7 @@ find-tag-tag
   "Read a tag name, with defaulting and completion."
   (let* ((completion-ignore-case (find-tag--completion-ignore-case))
 	 (default (find-tag--default))
-	 (spec (completing-read (if default
-				    (format "%s (default %s): "
-					    (substring string 0 (string-match "[ :]+\\'" string))
-					    default)
-				  string)
+	 (spec (completing-read (format-prompt string default)
 				(tags-lazy-completion-table)
 				nil nil nil nil default)))
     (if (equal spec "")
@@ -899,7 +895,7 @@ find-tag-noselect
 Contrast this with the ring of marks gone to by the command.
 
 See documentation of variable `tags-file-name'."
-  (interactive (find-tag-interactive "Find tag: "))
+  (interactive (find-tag-interactive "Find tag"))
 
   (setq find-tag-history (cons tagname find-tag-history))
   ;; Save the current buffer's value of `find-tag-hook' before
@@ -971,7 +967,7 @@ find-tag
 
 See documentation of variable `tags-file-name'."
   (declare (obsolete xref-find-definitions "25.1"))
-  (interactive (find-tag-interactive "Find tag: "))
+  (interactive (find-tag-interactive "Find tag"))
   (let* ((buf (find-tag-noselect tagname next-p regexp-p))
 	 (pos (with-current-buffer buf (point))))
     (condition-case nil
@@ -1000,7 +996,7 @@ find-tag-other-window
 
 See documentation of variable `tags-file-name'."
   (declare (obsolete xref-find-definitions-other-window "25.1"))
-  (interactive (find-tag-interactive "Find tag other window: "))
+  (interactive (find-tag-interactive "Find tag other window"))
 
   ;; This hair is to deal with the case where the tag is found in the
   ;; selected window's buffer; without the hair, point is moved in both
@@ -1041,7 +1037,7 @@ find-tag-other-frame
 
 See documentation of variable `tags-file-name'."
   (declare (obsolete xref-find-definitions-other-frame "25.1"))
-  (interactive (find-tag-interactive "Find tag other frame: "))
+  (interactive (find-tag-interactive "Find tag other frame"))
   (let ((pop-up-frames t))
     (with-suppressed-warnings ((obsolete find-tag-other-window))
       (find-tag-other-window tagname next-p))))
@@ -1065,7 +1061,7 @@ find-tag-regexp
 
 See documentation of variable `tags-file-name'."
   (declare (obsolete xref-find-apropos "25.1"))
-  (interactive (find-tag-interactive "Find tag regexp: " t))
+  (interactive (find-tag-interactive "Find tag regexp" t))
   ;; We go through find-tag-other-window to do all the display hair there.
   (funcall (if other-window 'find-tag-other-window 'find-tag)
 	   regexp next-p t))
diff --git a/lisp/progmodes/idlwave.el b/lisp/progmodes/idlwave.el
index e8e55ae96d..b72d9da748 100644
--- a/lisp/progmodes/idlwave.el
+++ b/lisp/progmodes/idlwave.el
@@ -7820,7 +7820,7 @@ idlwave-find-module
 	 (name (idlwave-completing-read
 		(if (or (not this-buffer)
 			(assoc default list))
-		    (format "Module (Default %s): " default)
+		    (format-prompt "Module" default)
 		  (format "Module in this file: "))
 		list))
 	 type class)
diff --git a/lisp/progmodes/inf-lisp.el b/lisp/progmodes/inf-lisp.el
index 146ed4dca4..af6ccce3d6 100644
--- a/lisp/progmodes/inf-lisp.el
+++ b/lisp/progmodes/inf-lisp.el
@@ -487,7 +487,7 @@ lisp-source-modes
 
 (defun lisp-load-file (file-name)
   "Load a Lisp file into the inferior Lisp process."
-  (interactive (comint-get-source "Load Lisp file: " lisp-prev-l/c-dir/file
+  (interactive (comint-get-source "Load Lisp file" lisp-prev-l/c-dir/file
 				  lisp-source-modes nil)) ; nil because LOAD
 					; doesn't need an exact name
   (comint-check-source file-name) ; Check to see if buffer needs saved.
@@ -500,7 +500,7 @@ lisp-load-file
 
 (defun lisp-compile-file (file-name)
   "Compile a Lisp file in the inferior Lisp process."
-  (interactive (comint-get-source "Compile Lisp file: " lisp-prev-l/c-dir/file
+  (interactive (comint-get-source "Compile Lisp file" lisp-prev-l/c-dir/file
 				  lisp-source-modes nil)) ; nil = don't need
 					; suffix .lisp
   (comint-check-source file-name) ; Check to see if buffer needs saved.
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index bd552c917a..98a56bb6a4 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -869,9 +869,7 @@ project--completing-read-strict
   ;; removing it when it has no matches.  Neither seems natural
   ;; enough.  Removal is confusing; early expansion makes the prompt
   ;; too long.
-  (let* ((new-prompt (if (and default (not (string-equal default "")))
-                         (format "%s (default %s): " prompt default)
-                       (format "%s: " prompt)))
+  (let* ((new-prompt (format-prompt prompt default))
          (res (completing-read new-prompt
                                collection predicate t
                                nil ;; initial-input
@@ -879,7 +877,7 @@ project--completing-read-strict
     (when (and (equal res default)
                (not (test-completion res collection predicate)))
       (setq res
-            (completing-read (format "%s: " prompt)
+            (completing-read (format-prompt prompt nil)
                              collection predicate t res hist nil)))
     res))
 
diff --git a/lisp/progmodes/tcl.el b/lisp/progmodes/tcl.el
index 82e1343e05..f6a50bf1a8 100644
--- a/lisp/progmodes/tcl.el
+++ b/lisp/progmodes/tcl.el
@@ -1413,7 +1413,7 @@ tcl-load-file
    (list
     ;; car because comint-get-source returns a list holding the
     ;; filename.
-    (car (comint-get-source "Load Tcl file: "
+    (car (comint-get-source "Load Tcl file"
 			    (or (and
 				 (derived-mode-p 'tcl-mode)
 				 (buffer-file-name))
@@ -1433,7 +1433,7 @@ tcl-restart-with-file
 Prefix argument means switch to the Tcl buffer afterwards."
   (interactive
    (list
-    (car (comint-get-source "Restart with Tcl file: "
+    (car (comint-get-source "Restart with Tcl file"
 			    (or (and
 				 (derived-mode-p 'tcl-mode)
 				 (buffer-file-name))
diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el
index 55c04e1332..14a9dff869 100644
--- a/lisp/progmodes/verilog-mode.el
+++ b/lisp/progmodes/verilog-mode.el
@@ -5466,8 +5466,9 @@ verilog-surelint-off
                     (let* ((pop-up-windows t))
                       (let ((name (expand-file-name
                                    (read-file-name
-                                    (format "Find this error in: (default %s) "
-                                            file)
+                                    (format-prompt
+                                     "Find this error in"
+                                     file)
                                     dir file t))))
                         (if (file-directory-p name)
                             (setq name (expand-file-name filename name)))
@@ -7863,8 +7864,8 @@ verilog-goto-defun
 	 (verilog-buffer-to-use (current-buffer))
 	 (label (if (not (string= default ""))
 		    ;; Do completion with default
-		    (completing-read (concat "Goto-Label: (default "
-					     default ") ")
+		    (completing-read (format-prompt "Goto-Label"
+					            default)
 				     'verilog-comp-defun nil nil "")
 		  ;; There is no default value. Complete without it
 		  (completing-read "Goto-Label: "
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index ea52befec5..3cb4247b4b 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -1192,12 +1192,7 @@ xref--read-identifier
                (xref--prompt-p this-command))
            (let ((id
                   (completing-read
-                   (if def
-                       (format "%s (default %s): "
-                               (substring prompt 0 (string-match
-                                                    "[ :]+\\'" prompt))
-                               def)
-                     prompt)
+                   (format-prompt prompt def)
                    (xref-backend-identifier-completion-table backend)
                    nil nil nil
                    'xref--read-identifier-history def)))
@@ -1257,19 +1252,19 @@ xref-find-definitions
 definition for IDENTIFIER, display it in the selected window.
 Otherwise, display the list of the possible definitions in a
 buffer where the user can select from the list."
-  (interactive (list (xref--read-identifier "Find definitions of: ")))
+  (interactive (list (xref--read-identifier "Find definitions of")))
   (xref--find-definitions identifier nil))
 
 ;;;###autoload
 (defun xref-find-definitions-other-window (identifier)
   "Like `xref-find-definitions' but switch to the other window."
-  (interactive (list (xref--read-identifier "Find definitions of: ")))
+  (interactive (list (xref--read-identifier "Find definitions of")))
   (xref--find-definitions identifier 'window))
 
 ;;;###autoload
 (defun xref-find-definitions-other-frame (identifier)
   "Like `xref-find-definitions' but switch to the other frame."
-  (interactive (list (xref--read-identifier "Find definitions of: ")))
+  (interactive (list (xref--read-identifier "Find definitions of")))
   (xref--find-definitions identifier 'frame))
 
 ;;;###autoload
@@ -1280,7 +1275,7 @@ xref-find-references
 With prefix argument, or if `xref-prompt-for-identifier' is t,
 always prompt for the identifier.  If `xref-prompt-for-identifier'
 is nil, prompt only if there's no usable symbol at point."
-  (interactive (list (xref--read-identifier "Find references of: ")))
+  (interactive (list (xref--read-identifier "Find references of")))
   (xref--find-xrefs identifier 'references identifier nil))
 
 ;;;###autoload
diff --git a/lisp/ses.el b/lisp/ses.el
index a11c754abc..6058d48ed1 100644
--- a/lisp/ses.el
+++ b/lisp/ses.el
@@ -2653,9 +2653,7 @@ ses-read-printer
   (barf-if-buffer-read-only)
   (if (eq default t)
       (setq default "")
-    (setq prompt (format "%s (default %S): "
-			 (substring prompt 0 -2)
-			 default)))
+    (setq prompt (format-prompt prompt default)))
   (dolist (key ses-completion-keys)
     (define-key ses-mode-edit-map key 'ses-read-printer-complete-symbol))
   ;; make it globally visible, so that it can be visible from the minibuffer.
@@ -2702,7 +2700,7 @@ ses-read-cell-printer
                ;;Range contains differing printer functions
                (setq default t)
                (throw 'ses-read-cell-printer t))))))
-     (list (ses-read-printer (format "Cell %S printer: " ses--curcell)
+     (list (ses-read-printer (format "Cell %S printer" ses--curcell)
 			     default))))
   (unless (eq newval t)
     (ses-begin-change)
@@ -2716,7 +2714,7 @@ ses-read-column-printer
   (interactive
    (let ((col (cdr (ses-sym-rowcol ses--curcell))))
      (ses-check-curcell)
-     (list col (ses-read-printer (format "Column %s printer: "
+     (list col (ses-read-printer (format "Column %s printer"
 					 (ses-column-letter col))
 				 (ses-col-printer col)))))
 
@@ -2731,7 +2729,7 @@ ses-read-default-printer
   "Set the default printer function for cells that have no other.
 See `ses-read-cell-printer' for input forms."
   (interactive
-   (list (ses-read-printer "Default printer: " ses--default-printer)))
+   (list (ses-read-printer "Default printer" ses--default-printer)))
   (unless (eq newval t)
     (ses-begin-change)
     (ses-set-parameter 'ses--default-printer newval)
@@ -3773,7 +3771,7 @@ ses-define-local-printer
      (setq name (intern name))
      (let* ((cur-printer (gethash name ses--local-printer-hashmap))
             (default (and cur-printer (ses--locprn-def cur-printer))))
-            (setq def (ses-read-printer (format "Enter definition of printer %S: " name)
+            (setq def (ses-read-printer (format "Enter definition of printer %S" name)
                                         default)))
             (list name def)))
 
diff --git a/lisp/subr.el b/lisp/subr.el
index ef0e5e6f78..a2c1280fc1 100644
--- a/lisp/subr.el
+++ b/lisp/subr.el
@@ -2806,9 +2806,9 @@ read-number
     (when default1
       (setq prompt
 	    (if (string-match "\\(\\):[ \t]*\\'" prompt)
-		(replace-match (format " (default %s)" default1) t t prompt 1)
+		(replace-match (format minibuffer-default-prompt-format default1) t t prompt 1)
 	      (replace-regexp-in-string "[ \t]*\\'"
-					(format " (default %s) " default1)
+					(format minibuffer-default-prompt-format default1)
 					prompt t t))))
     (while
 	(progn
diff --git a/lisp/term.el b/lisp/term.el
index 6beb17fb66..d41895ad3d 100644
--- a/lisp/term.el
+++ b/lisp/term.el
@@ -2535,7 +2535,7 @@ term-check-source
 ;; then the filename reader will only accept a file that exists.
 ;;
 ;; A typical use:
-;; (interactive (term-get-source "Compile file: " prev-lisp-dir/file
+;; (interactive (term-get-source "Compile file" prev-lisp-dir/file
 ;;                                 '(lisp-mode) t))
 
 ;; This is pretty stupid about strings.  It decides we're in a string
@@ -2566,9 +2566,7 @@ term-get-source
                       (car def)))
 	 (deffile (if sfile-p (file-name-nondirectory stringfile)
                       (cdr def)))
-	 (ans (read-file-name (if deffile (format "%s(default %s) "
-						  prompt    deffile)
-				  prompt)
+	 (ans (read-file-name (format-prompt prompt deffile)
 			      defdir
 			      (concat defdir deffile)
 			      mustmatch-p)))
diff --git a/src/minibuf.c b/src/minibuf.c
index 4b1f4b1ff7..1c5ce52404 100644
--- a/src/minibuf.c
+++ b/src/minibuf.c
@@ -1417,8 +1417,8 @@ DEFUN ("read-buffer", Fread_buffer, Sread_buffer, 1, 4, 0,
 					      STRING_MULTIBYTE (prompt));
 	    }
 
-	  AUTO_STRING (format, "%s (default %s): ");
-	  prompt = CALLN (Fformat, format, prompt,
+	  prompt = CALLN (Ffuncall, intern("format-prompt"),
+			  prompt,
 			  CONSP (def) ? XCAR (def) : def);
 	}
 
-- 
2.27.0

Thread on emacs-devel:
https://lists.gnu.org/archive/html/emacs-devel/2021-03/msg00817.html

Let me know if something is missing, wrong or can be improved in this
patch.

Regards,
Gabriel