From 6af5aad26411ffe21c3fe4bc5438347110910111 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Fri, 14 Aug 2015 15:50:35 -0700
Subject: [PATCH] =?utf8?q?Prefer=20=E2=80=98format=E2=80=99=20to=20?=
 =?utf8?q?=E2=80=98substitute-command-keys=E2=80=99?=
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

* src/character.h (uLSQM, uRSQM): Move here ...
* src/doc.c (uLSQM, uRSQM): ... from here.
* src/doc.c (Fsubstitute_command_keys):
* src/syntax.c (Finternal_describe_syntax_value):
* lisp/cedet/mode-local.el (mode-local-print-binding)
(mode-local-describe-bindings-2):
* lisp/cedet/srecode/srt-mode.el (srecode-macro-help):
* lisp/cus-theme.el (describe-theme-1):
* lisp/descr-text.el (describe-text-properties-1, describe-char):
* lisp/emacs-lisp/cl-extra.el (cl--describe-class):
* lisp/emacs-lisp/cl-generic.el (cl--generic-describe):
* lisp/emacs-lisp/eieio-opt.el (eieio-help-constructor):
* lisp/emacs-lisp/package.el (describe-package-1):
* lisp/faces.el (describe-face):
* lisp/help-fns.el (help-fns--key-bindings)
(help-fns--compiler-macro, help-fns--parent-mode)
(help-fns--obsolete, help-fns--interactive-only)
(describe-function-1, describe-variable):
* lisp/help.el (describe-mode):
Prefer ‘format’ to ‘substitute-command-keys’ when either will do
to implement quoting style.  This generally makes the code simpler.
---
 lisp/cedet/mode-local.el       |  9 +++--
 lisp/cedet/srecode/srt-mode.el |  4 +--
 lisp/cus-theme.el              |  4 +--
 lisp/descr-text.el             | 11 ++-----
 lisp/emacs-lisp/cl-extra.el    | 20 ++++++------
 lisp/emacs-lisp/cl-generic.el  |  4 +--
 lisp/emacs-lisp/eieio-opt.el   |  4 +--
 lisp/emacs-lisp/package.el     |  7 ++--
 lisp/faces.el                  | 14 +++-----
 lisp/help-fns.el               | 60 +++++++++++++---------------------
 lisp/help.el                   |  8 ++---
 src/character.h                |  5 +++
 src/doc.c                      | 11 +++----
 src/syntax.c                   |  7 ++--
 14 files changed, 71 insertions(+), 97 deletions(-)

diff --git a/lisp/cedet/mode-local.el b/lisp/cedet/mode-local.el
index 3bdc3ea6155..aa1dd65068f 100644
--- a/lisp/cedet/mode-local.el
+++ b/lisp/cedet/mode-local.el
@@ -629,10 +629,9 @@ SYMBOL is a function that can be overridden."
 (defun mode-local-print-binding (symbol)
   "Print the SYMBOL binding."
   (let ((value (symbol-value symbol)))
-    (princ (format (substitute-command-keys "\n     ‘%s’ value is\n       ")
-                   symbol))
+    (princ (format "\n     ‘%s’ value is\n       " symbol))
     (if (and value (symbolp value))
-        (princ (format (substitute-command-keys "‘%s’") value))
+        (princ (format "‘%s’" value))
       (let ((pt (point)))
         (pp value)
         (save-excursion
@@ -690,7 +689,7 @@ SYMBOL is a function that can be overridden."
       )
      ((symbolp buffer-or-mode)
       (setq mode buffer-or-mode)
-      (princ (format (substitute-command-keys "‘%s’\n") buffer-or-mode))
+      (princ (format "‘%s’\n" buffer-or-mode))
       )
      ((signal 'wrong-type-argument
               (list 'buffer-or-mode buffer-or-mode))))
@@ -700,7 +699,7 @@ SYMBOL is a function that can be overridden."
     (while mode
       (setq table (get mode 'mode-local-symbol-table))
       (when table
-        (princ (format (substitute-command-keys "\n- From ‘%s’\n") mode))
+        (princ (format "\n- From ‘%s’\n" mode))
         (mode-local-print-bindings table))
       (setq mode (get-mode-local-parent mode)))))
 
diff --git a/lisp/cedet/srecode/srt-mode.el b/lisp/cedet/srecode/srt-mode.el
index 48f055561ea..efcfe4ba51d 100644
--- a/lisp/cedet/srecode/srt-mode.el
+++ b/lisp/cedet/srecode/srt-mode.el
@@ -258,9 +258,9 @@ we can tell font lock about them.")
 	    (when (class-abstract-p C)
 	      (throw 'skip nil))
 
-	    (princ (substitute-command-keys "‘"))
+	    (princ (format "‘"))
 	    (princ name)
-	    (princ (substitute-command-keys "’"))
+	    (princ (format "’"))
 	    (when (slot-exists-p C 'key)
 	      (when key
 		(princ " - Character Key: ")
diff --git a/lisp/cus-theme.el b/lisp/cus-theme.el
index bc221e17c4b..f8e5650db78 100644
--- a/lisp/cus-theme.el
+++ b/lisp/cus-theme.el
@@ -492,10 +492,10 @@ It includes all faces in list FACES."
 			 '("" "c")))
 	doc)
     (when fn
-      (princ (substitute-command-keys " in ‘"))
+      (princ (format " in ‘"))
       (help-insert-xref-button (file-name-nondirectory fn)
 			       'help-theme-def fn)
-      (princ (substitute-command-keys "’")))
+      (princ (format "’")))
     (princ ".\n")
     (if (custom-theme-p theme)
 	(progn
diff --git a/lisp/descr-text.el b/lisp/descr-text.el
index 71233d406e1..579278ceaa0 100644
--- a/lisp/descr-text.el
+++ b/lisp/descr-text.el
@@ -161,11 +161,8 @@ otherwise."
       ;; Buttons
       (when (and button (not (widgetp wid-button)))
 	(newline)
-	(insert (substitute-command-keys "Here is a ‘")
-		(format "%S" button-type)
-		(substitute-command-keys "’ button labeled ‘")
-		button-label
-		(substitute-command-keys "’.\n\n")))
+	(insert (format "Here is a ‘%S’ button labeled ‘%s’.\n\n"
+			button-type button-label)))
       ;; Overlays
       (when overlays
 	(newline)
@@ -739,9 +736,7 @@ relevant to POS."
                       (when face
                         (insert (propertize " " 'display '(space :align-to 5))
                                 "face: ")
-                        (insert (substitute-command-keys "‘")
-                                (symbol-name face)
-                                (substitute-command-keys "’\n"))))))
+                        (insert (format "‘%s’\n" face))))))
               (insert "these terminal codes:\n")
               (dotimes (i (length disp-vector))
                 (insert (car (aref disp-vector i))
diff --git a/lisp/emacs-lisp/cl-extra.el b/lisp/emacs-lisp/cl-extra.el
index 9742014db0c..132aaa5cfce 100644
--- a/lisp/emacs-lisp/cl-extra.el
+++ b/lisp/emacs-lisp/cl-extra.el
@@ -752,16 +752,16 @@ including `cl-block' and `cl-eval-when'."
         ;; FIXME: Add a `cl-class-of' or `cl-typeof' or somesuch.
         (metatype (cl--class-name (symbol-value (aref class 0)))))
     (insert (symbol-name type)
-            (substitute-command-keys " is a type (of kind ‘"))
+            (format " is a type (of kind ‘"))
     (help-insert-xref-button (symbol-name metatype)
                              'cl-help-type metatype)
-    (insert (substitute-command-keys "’)"))
+    (insert (format "’)"))
     (when location
-      (insert (substitute-command-keys " in ‘"))
+      (insert (format " in ‘"))
       (help-insert-xref-button
        (help-fns-short-filename location)
        'cl-type-definition type location 'define-type)
-      (insert (substitute-command-keys "’")))
+      (insert (format "’")))
     (insert ".\n")
 
     ;; Parents.
@@ -771,10 +771,10 @@ including `cl-block' and `cl-eval-when'."
         (insert " Inherits from ")
         (while (setq cur (pop pl))
           (setq cur (cl--class-name cur))
-          (insert (substitute-command-keys "‘"))
+          (insert (format "‘"))
           (help-insert-xref-button (symbol-name cur)
                                    'cl-help-type cur)
-          (insert (substitute-command-keys (if pl "’, " "’"))))
+          (insert (format (if pl "’, " "’"))))
         (insert ".\n")))
 
     ;; Children, if available.  ¡For EIEIO!
@@ -785,10 +785,10 @@ including `cl-block' and `cl-eval-when'."
       (when ch
         (insert " Children ")
         (while (setq cur (pop ch))
-          (insert (substitute-command-keys "‘"))
+          (insert (format "‘"))
           (help-insert-xref-button (symbol-name cur)
                                    'cl-help-type cur)
-          (insert (substitute-command-keys (if ch "’, " "’"))))
+          (insert (format (if ch "’, " "’"))))
         (insert ".\n")))
 
     ;; Type's documentation.
@@ -804,10 +804,10 @@ including `cl-block' and `cl-eval-when'."
       (when generics
         (insert (propertize "Specialized Methods:\n\n" 'face 'bold))
         (dolist (generic generics)
-          (insert (substitute-command-keys "‘"))
+          (insert (format "‘"))
           (help-insert-xref-button (symbol-name generic)
                                    'help-function generic)
-          (insert (substitute-command-keys "’"))
+          (insert (format "’"))
           (pcase-dolist (`(,qualifiers ,args ,doc)
                          (cl--generic-method-documentation generic type))
             (insert (format " %s%S\n" qualifiers args)
diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el
index a138697a18b..7ae63b1e6b1 100644
--- a/lisp/emacs-lisp/cl-generic.el
+++ b/lisp/emacs-lisp/cl-generic.el
@@ -864,11 +864,11 @@ MET-NAME is a cons (SYMBOL . SPECIALIZERS)."
                                    (cl--generic-method-specializers method)))
                    (file (find-lisp-object-file-name met-name 'cl-defmethod)))
               (when file
-                (insert (substitute-command-keys " in ‘"))
+                (insert (format " in ‘"))
                 (help-insert-xref-button (help-fns-short-filename file)
                                          'help-function-def met-name file
                                          'cl-defmethod)
-                (insert (substitute-command-keys "’.\n"))))
+                (insert (format "’.\n"))))
             (insert "\n" (or (nth 2 info) "Undocumented") "\n\n")))))))
 
 (defun cl--generic-specializers-apply-to-type-p (specializers type)
diff --git a/lisp/emacs-lisp/eieio-opt.el b/lisp/emacs-lisp/eieio-opt.el
index 0b003360ed5..c4d6d35a13b 100644
--- a/lisp/emacs-lisp/eieio-opt.el
+++ b/lisp/emacs-lisp/eieio-opt.el
@@ -141,11 +141,11 @@ are not abstract."
 	(setq location
 	      (find-lisp-object-file-name ctr def)))
       (when location
-	(insert (substitute-command-keys " in ‘"))
+	(insert (format " in ‘"))
 	(help-insert-xref-button
 	 (help-fns-short-filename location)
 	 'cl-type-definition ctr location 'define-type)
-	(insert (substitute-command-keys "’")))
+	(insert (format "’")))
       (insert ".\nCreates an object of class " (symbol-name ctr) ".")
       (goto-char (point-max))
       (if (autoloadp def)
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index 967720881f6..863a02df252 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -2204,7 +2204,7 @@ Otherwise no newline is inserted."
                                    "Installed"
                                  (capitalize status))
                                'font-lock-face 'package-status-builtin-face))
-           (insert (substitute-command-keys " in ‘"))
+           (insert (format " in ‘"))
            (let ((dir (abbreviate-file-name
                        (file-name-as-directory
                         (if (file-in-directory-p pkg-dir package-user-dir)
@@ -2213,11 +2213,10 @@ Otherwise no newline is inserted."
              (help-insert-xref-button dir 'help-package-def pkg-dir))
            (if (and (package-built-in-p name)
                     (not (package-built-in-p name version)))
-               (insert (substitute-command-keys
-                        "’,\n             shadowing a ")
+               (insert (format "’,\n             shadowing a ")
                        (propertize "built-in package"
                                    'font-lock-face 'package-status-builtin-face))
-             (insert (substitute-command-keys "’")))
+             (insert (format "’")))
            (if signed
                (insert ".")
              (insert " (unsigned)."))
diff --git a/lisp/faces.el b/lisp/faces.el
index 511b3541265..125b14d8085 100644
--- a/lisp/faces.el
+++ b/lisp/faces.el
@@ -1435,12 +1435,10 @@ If FRAME is omitted or nil, use the selected frame."
 		  (when alias
 		    (setq face alias)
 		    (insert
-		     (format (substitute-command-keys
-                              "\n  %s is an alias for the face ‘%s’.\n%s")
+		     (format "\n  %s is an alias for the face ‘%s’.\n%s"
 			     f alias
 			     (if (setq obsolete (get f 'obsolete-face))
-				 (format (substitute-command-keys
-                                          "  This face is obsolete%s; use ‘%s’ instead.\n")
+				 (format "  This face is obsolete%s; use ‘%s’ instead.\n"
 					 (if (stringp obsolete)
 					     (format " since %s" obsolete)
 					   "")
@@ -1458,13 +1456,11 @@ If FRAME is omitted or nil, use the selected frame."
 		    (help-xref-button 1 'help-customize-face f)))
 		(setq file-name (find-lisp-object-file-name f 'defface))
 		(when file-name
-		  (princ (substitute-command-keys "Defined in ‘"))
-		  (princ (file-name-nondirectory file-name))
-		  (princ (substitute-command-keys "’"))
+		  (princ (format "Defined in ‘%s’"
+                                 (file-name-nondirectory file-name)))
 		  ;; Make a hyperlink to the library.
 		  (save-excursion
-		    (re-search-backward
-                     (substitute-command-keys "‘\\([^‘’]+\\)’") nil t)
+		    (re-search-backward (format "‘\\([^‘’]+\\)’") nil t)
 		    (help-xref-button 1 'help-face-def f file-name))
 		  (princ ".")
 		  (terpri)
diff --git a/lisp/help-fns.el b/lisp/help-fns.el
index 0836c7f6710..c97647c2d41 100644
--- a/lisp/help-fns.el
+++ b/lisp/help-fns.el
@@ -297,9 +297,7 @@ suitable file is found, return nil."
             (when remapped
               (princ "Its keys are remapped to ")
               (princ (if (symbolp remapped)
-			 (concat (substitute-command-keys "‘")
-				 (symbol-name remapped)
-				 (substitute-command-keys "’"))
+                         (format "‘%s’" remapped)
 		       "an anonymous command"))
               (princ ".\n"))
 
@@ -333,18 +331,16 @@ suitable file is found, return nil."
       (insert "\nThis function has a compiler macro")
       (if (symbolp handler)
           (progn
-            (insert (format (substitute-command-keys " ‘%s’") handler))
+            (insert (format " ‘%s’" handler))
             (save-excursion
-              (re-search-backward (substitute-command-keys "‘\\([^‘’]+\\)’")
-                                  nil t)
+              (re-search-backward (format "‘\\([^‘’]+\\)’") nil t)
               (help-xref-button 1 'help-function handler)))
         ;; FIXME: Obsolete since 24.4.
         (let ((lib (get function 'compiler-macro-file)))
           (when (stringp lib)
-            (insert (format (substitute-command-keys " in ‘%s’") lib))
+            (insert (format " in ‘%s’" lib))
             (save-excursion
-              (re-search-backward (substitute-command-keys "‘\\([^‘’]+\\)’")
-                                  nil t)
+              (re-search-backward (format "‘\\([^‘’]+\\)’") nil t)
               (help-xref-button 1 'help-function-cmacro function lib)))))
       (insert ".\n"))))
 
@@ -399,13 +395,13 @@ suitable file is found, return nil."
                           (get function
                                'derived-mode-parent))))
     (when parent-mode
-      (insert (substitute-command-keys "\nParent mode: ‘"))
+      (insert (format "\nParent mode: ‘"))
       (let ((beg (point)))
         (insert (format "%s" parent-mode))
         (make-text-button beg (point)
                           'type 'help-function
                           'help-args (list parent-mode)))
-      (insert (substitute-command-keys "’.\n")))))
+      (insert (format "’.\n")))))
 
 (defun help-fns--obsolete (function)
   ;; Ignore lambda constructs, keyboard macros, etc.
@@ -421,9 +417,7 @@ suitable file is found, return nil."
       (when (nth 2 obsolete)
         (insert (format " since %s" (nth 2 obsolete))))
       (insert (cond ((stringp use) (concat ";\n" use))
-                    (use (format (substitute-command-keys
-                                  ";\nuse ‘%s’ instead.")
-                                 use))
+                    (use (format ";\nuse ‘%s’ instead." use))
                     (t "."))
               "\n"))))
 
@@ -459,8 +453,7 @@ FILE is the file where FUNCTION was probably defined."
                           (format ";\nin Lisp code %s" interactive-only))
                          ((and (symbolp 'interactive-only)
                                (not (eq interactive-only t)))
-                          (format (substitute-command-keys
-                                   ";\nin Lisp code use ‘%s’ instead.")
+                          (format ";\nin Lisp code use ‘%s’ instead."
                                   interactive-only))
                          (t "."))
                    "\n")))))
@@ -529,8 +522,7 @@ FILE is the file where FUNCTION was probably defined."
 		 ;; Aliases are Lisp functions, so we need to check
 		 ;; aliases before functions.
 		 (aliased
-		  (format (substitute-command-keys "an alias for ‘%s’")
-                          real-def))
+		  (format "an alias for ‘%s’" real-def))
 		 ((autoloadp def)
 		  (format "%s autoloaded %s"
 			  (if (commandp def) "an interactive" "an")
@@ -564,24 +556,22 @@ FILE is the file where FUNCTION was probably defined."
       (with-current-buffer standard-output
 	(save-excursion
 	  (save-match-data
-	    (when (re-search-backward (substitute-command-keys
-                                       "alias for ‘\\([^‘’]+\\)’")
+	    (when (re-search-backward (format "alias for ‘\\([^‘’]+\\)’")
                                       nil t)
 	      (help-xref-button 1 'help-function real-def)))))
 
       (when file-name
-	(princ (substitute-command-keys " in ‘"))
+	(princ (format " in ‘"))
 	;; We used to add .el to the file name,
 	;; but that's completely wrong when the user used load-file.
 	(princ (if (eq file-name 'C-source)
 		   "C source code"
 		 (help-fns-short-filename file-name)))
-	(princ (substitute-command-keys "’"))
+	(princ (format "’"))
 	;; Make a hyperlink to the library.
 	(with-current-buffer standard-output
 	  (save-excursion
-	    (re-search-backward (substitute-command-keys "‘\\([^‘’]+\\)’")
-                                nil t)
+	    (re-search-backward (format "‘\\([^‘’]+\\)’") nil t)
 	    (help-xref-button 1 'help-function-def function file-name))))
       (princ ".")
       (with-current-buffer (help-buffer)
@@ -714,17 +704,14 @@ it is displayed along with the global value."
 
 	      (if file-name
 		  (progn
-		    (princ (substitute-command-keys
-                            " is a variable defined in ‘"))
+		    (princ (format " is a variable defined in ‘"))
 		    (princ (if (eq file-name 'C-source)
 			       "C source code"
 			     (file-name-nondirectory file-name)))
-		    (princ (substitute-command-keys "’.\n"))
+		    (princ (format "’.\n"))
 		    (with-current-buffer standard-output
 		      (save-excursion
-			(re-search-backward (substitute-command-keys
-                                             "‘\\([^‘’]+\\)’")
-                                            nil t)
+			(re-search-backward (format "‘\\([^‘’]+\\)’") nil t)
 			(help-xref-button 1 'help-variable-def
 					  variable file-name)))
 		    (if valvoid
@@ -854,8 +841,7 @@ if it is given a local binding.\n")))
 	      ;; Mention if it's an alias.
               (unless (eq alias variable)
                 (setq extra-line t)
-                (princ (format (substitute-command-keys
-                                "  This variable is an alias for ‘%s’.\n")
+                (princ (format "  This variable is an alias for ‘%s’.\n"
                                alias)))
 
               (when obsolete
@@ -864,8 +850,7 @@ if it is given a local binding.\n")))
                 (if (nth 2 obsolete)
                     (princ (format " since %s" (nth 2 obsolete))))
 		(princ (cond ((stringp use) (concat ";\n  " use))
-			     (use (format (substitute-command-keys
-                                           ";\n  use ‘%s’ instead.")
+			     (use (format ";\n  use ‘%s’ instead."
                                           (car obsolete)))
 			     (t ".")))
                 (terpri))
@@ -896,7 +881,7 @@ if it is given a local binding.\n")))
                               ;; Otherwise, assume it was set directly.
                               (setq file (car file)
                                     dir-file nil)))
-			(princ (substitute-command-keys
+			(princ (format
                                 (if dir-file
                                     "by the file\n  ‘"
                                   "for the directory\n  ‘")))
@@ -904,7 +889,7 @@ if it is given a local binding.\n")))
 			  (insert-text-button
 			   file 'type 'help-dir-local-var-def
 			   'help-args (list variable file)))
-			(princ (substitute-command-keys "’.\n"))))
+			(princ (format "’.\n"))))
 		  (princ "  This variable's value is file-local.\n")))
 
 	      (when (memq variable ignored-local-variables)
@@ -928,8 +913,7 @@ file-local variable.\n")
 		(princ "if its value\n  satisfies the predicate ")
 		(princ (if (byte-code-function-p safe-var)
 			   "which is a byte-compiled expression.\n"
-			 (format (substitute-command-keys "‘%s’.\n")
-                                 safe-var))))
+			 (format "‘%s’.\n" safe-var))))
 
               (if extra-line (terpri))
 	      (princ "Documentation:\n")
diff --git a/lisp/help.el b/lisp/help.el
index 46136d91003..461a8ab8986 100644
--- a/lisp/help.el
+++ b/lisp/help.el
@@ -964,14 +964,12 @@ documentation for the major and minor modes of that buffer."
 	(let* ((mode major-mode)
 	       (file-name (find-lisp-object-file-name mode nil)))
 	  (when file-name
-	    (princ (concat (substitute-command-keys " defined in ‘")
-                           (file-name-nondirectory file-name)
-                           (substitute-command-keys "’")))
+	    (princ (format " defined in ‘%s’"
+                           (file-name-nondirectory file-name)))
 	    ;; Make a hyperlink to the library.
 	    (with-current-buffer standard-output
 	      (save-excursion
-		(re-search-backward (substitute-command-keys "‘\\([^‘’]+\\)’")
-                                    nil t)
+		(re-search-backward (format "‘\\([^‘’]+\\)’") nil t)
 		(help-xref-button 1 'help-function-def mode file-name)))))
 	(princ ":\n")
 	(princ (documentation major-mode)))))
diff --git a/src/character.h b/src/character.h
index 0b2c419de99..67d4bca4a23 100644
--- a/src/character.h
+++ b/src/character.h
@@ -78,6 +78,11 @@ enum
   OBJECT_REPLACEMENT_CHARACTER = 0xFFFC,
 };
 
+/* UTF-8 encodings.  Use \x escapes, so they are portable to pre-C11
+   compilers and can be concatenated with ordinary string literals.  */
+#define uLSQM "\xE2\x80\x98" /* U+2018 LEFT SINGLE QUOTATION MARK */
+#define uRSQM "\xE2\x80\x99" /* U+2019 RIGHT SINGLE QUOTATION MARK */
+
 /* Nonzero iff C is a character that corresponds to a raw 8-bit
    byte.  */
 #define CHAR_BYTE8_P(c) ((c) > MAX_5_BYTE_CHAR)
diff --git a/src/doc.c b/src/doc.c
index 9f0ddbc5260..977953d53e5 100644
--- a/src/doc.c
+++ b/src/doc.c
@@ -687,8 +687,6 @@ the same file name is found in the `doc-directory'.  */)
 /* Curved quotation marks.  */
 static unsigned char const LSQM[] = { uLSQM0, uLSQM1, uLSQM2 };
 static unsigned char const RSQM[] = { uRSQM0, uRSQM1, uRSQM2 };
-#define uLSQM "\xE2\x80\x98"
-#define uRSQM "\xE2\x80\x99"
 
 /* Return the current effective text quoting style.  */
 enum text_quoting_style
@@ -922,14 +920,13 @@ Otherwise, return a new string.  */)
 	  if (NILP (tem))
 	    {
 	      name = Fsymbol_name (name);
-	      insert1 (Fsubstitute_command_keys
-		       (build_string ("\nUses keymap "uLSQM)));
+	      insert1 (CALLN (Fformat, build_string ("\nUses keymap "uLSQM)));
 	      insert_from_string (name, 0, 0,
 				  SCHARS (name),
 				  SBYTES (name), 1);
-	      insert1 (Fsubstitute_command_keys
-		       (build_string
-			(uRSQM", which is not currently defined.\n")));
+	      insert1 (CALLN (Fformat,
+			      (build_string
+			       (uRSQM", which is not currently defined.\n"))));
 	      if (start[-1] == '<') keymap = Qnil;
 	    }
 	  else if (start[-1] == '<')
diff --git a/src/syntax.c b/src/syntax.c
index d45936b2b28..d543a5f9823 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -1333,9 +1333,10 @@ DEFUN ("internal-describe-syntax-value", Finternal_describe_syntax_value,
     insert_string (" (nestable)");
 
   if (prefix)
-    insert1 (Fsubstitute_command_keys
-	     (build_string
-	      (",\n\t  is a prefix character for `backward-prefix-chars'")));
+    insert1 (CALLN (Fformat,
+		    (build_string
+		     (",\n\t  is a prefix character for "
+		      uLSQM"backward-prefix-chars"uRSQM))));
 
   return syntax;
 }
-- 
2.39.5