From 6af5aad26411ffe21c3fe4bc5438347110910111 Mon Sep 17 00:00:00 2001 From: Paul Eggert 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 3bdc3ea615..aa1dd65068 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 48f055561e..efcfe4ba51 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 bc221e17c4..f8e5650db7 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 71233d406e..579278ceaa 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 9742014db0..132aaa5cfc 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 a138697a18..7ae63b1e6b 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 0b003360ed..c4d6d35a13 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 967720881f..863a02df25 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 511b354126..125b14d808 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 0836c7f671..c97647c2d4 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 46136d9100..461a8ab898 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 0b2c419de9..67d4bca4a2 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 9f0ddbc526..977953d53e 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 d45936b2b2..d543a5f982 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.2