2015-01-16 22:52:15 -05:00
|
|
|
;;; find-func.el --- find the definition of the Emacs Lisp function near point -*- lexical-binding:t -*-
|
1997-10-25 13:18:56 +00:00
|
|
|
|
2018-01-01 00:21:42 -08:00
|
|
|
;; Copyright (C) 1997, 1999, 2001-2018 Free Software Foundation, Inc.
|
1997-10-25 13:18:56 +00:00
|
|
|
|
|
|
|
;; Author: Jens Petersen <petersen@kurims.kyoto-u.ac.jp>
|
|
|
|
;; Maintainer: petersen@kurims.kyoto-u.ac.jp
|
1998-06-29 17:23:25 +00:00
|
|
|
;; Keywords: emacs-lisp, functions, variables
|
1997-10-25 13:18:56 +00:00
|
|
|
;; Created: 97/07/25
|
|
|
|
|
|
|
|
;; This file is part of GNU Emacs.
|
|
|
|
|
2008-05-06 03:21:21 +00:00
|
|
|
;; GNU Emacs is free software: you can redistribute it and/or modify
|
1997-10-25 13:18:56 +00:00
|
|
|
;; it under the terms of the GNU General Public License as published by
|
2008-05-06 03:21:21 +00:00
|
|
|
;; the Free Software Foundation, either version 3 of the License, or
|
|
|
|
;; (at your option) any later version.
|
1997-10-25 13:18:56 +00:00
|
|
|
|
|
|
|
;; GNU Emacs is distributed in the hope that it will be useful,
|
|
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
;; GNU General Public License for more details.
|
|
|
|
|
|
|
|
;; You should have received a copy of the GNU General Public License
|
2017-09-13 15:52:52 -07:00
|
|
|
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
|
1997-10-25 13:18:56 +00:00
|
|
|
|
|
|
|
;;; Commentary:
|
|
|
|
;;
|
|
|
|
;; The funniest thing about this is that I can't imagine why a package
|
|
|
|
;; so obviously useful as this hasn't been written before!!
|
|
|
|
;; ;;; find-func
|
1998-07-14 23:42:21 +00:00
|
|
|
;; (find-function-setup-keys)
|
|
|
|
;;
|
|
|
|
;; or just:
|
|
|
|
;;
|
1998-06-29 17:23:25 +00:00
|
|
|
;; (load "find-func")
|
1997-10-25 13:18:56 +00:00
|
|
|
;;
|
1998-07-14 23:42:21 +00:00
|
|
|
;; if you don't like the given keybindings and away you go! It does
|
1998-06-29 17:23:25 +00:00
|
|
|
;; pretty much what you would expect, putting the cursor at the
|
|
|
|
;; definition of the function or variable at point.
|
1997-10-25 13:18:56 +00:00
|
|
|
;;
|
1998-06-29 17:23:25 +00:00
|
|
|
;; The code started out from `describe-function', `describe-key'
|
1997-10-25 13:18:56 +00:00
|
|
|
;; ("help.el") and `fff-find-loaded-emacs-lisp-function' (Noah Friedman's
|
|
|
|
;; "fff.el").
|
|
|
|
|
2001-07-16 12:23:00 +00:00
|
|
|
;;; Code:
|
1997-10-25 13:18:56 +00:00
|
|
|
|
2017-03-25 22:41:34 -04:00
|
|
|
(eval-when-compile (require 'cl-lib))
|
2016-05-22 21:51:11 +02:00
|
|
|
|
1997-10-25 13:18:56 +00:00
|
|
|
;;; User variables:
|
1998-06-29 17:23:25 +00:00
|
|
|
|
1998-02-22 22:01:28 +00:00
|
|
|
(defgroup find-function nil
|
1998-06-29 17:23:25 +00:00
|
|
|
"Finds the definition of the Emacs Lisp symbol near point."
|
|
|
|
;; :prefix "find-function"
|
1998-02-22 22:01:28 +00:00
|
|
|
:group 'lisp)
|
1997-10-25 13:18:56 +00:00
|
|
|
|
2002-05-16 20:11:23 +00:00
|
|
|
(defconst find-function-space-re "\\(?:\\s-\\|\n\\|;.*\n\\)+")
|
|
|
|
|
1998-06-29 17:23:25 +00:00
|
|
|
(defcustom find-function-regexp
|
1999-01-06 20:03:53 +00:00
|
|
|
;; Match things like (defun foo ...), (defmacro foo ...),
|
|
|
|
;; (define-skeleton foo ...), (define-generic-mode 'foo ...),
|
1999-11-23 19:12:27 +00:00
|
|
|
;; (define-derived-mode foo ...), (define-minor-mode foo)
|
2002-05-16 20:11:23 +00:00
|
|
|
(concat
|
|
|
|
"^\\s-*(\\(def\\(ine-skeleton\\|ine-generic-mode\\|ine-derived-mode\\|\
|
2005-12-04 02:35:20 +00:00
|
|
|
ine\\(?:-global\\)?-minor-mode\\|ine-compilation-mode\\|un-cvs-mode\\|\
|
2015-01-25 02:20:01 +02:00
|
|
|
foo\\|\\(?:[^icfgv]\\|g[^r]\\)\\(\\w\\|\\s_\\)+\\*?\\)\\|easy-mmode-define-[a-z-]+\\|easy-menu-define\\|\
|
2005-12-04 02:35:20 +00:00
|
|
|
menu-bar-make-toggle\\)"
|
2005-03-16 07:41:57 +00:00
|
|
|
find-function-space-re
|
2015-09-17 16:08:20 -07:00
|
|
|
"\\('\\|(quote \\)?%s\\(\\s-\\|$\\|[()]\\)")
|
1999-01-06 20:03:53 +00:00
|
|
|
"The regexp used by `find-function' to search for a function definition.
|
|
|
|
Note it must contain a `%s' at the place where `format'
|
1998-06-29 17:23:25 +00:00
|
|
|
should insert the function name. The default value avoids `defconst',
|
2004-11-16 15:26:30 +00:00
|
|
|
`defgroup', `defvar', `defface'.
|
1997-10-25 13:18:56 +00:00
|
|
|
|
1998-06-29 17:23:25 +00:00
|
|
|
Please send improvements and fixes to the maintainer."
|
|
|
|
:type 'regexp
|
1998-07-14 23:42:21 +00:00
|
|
|
:group 'find-function
|
1999-11-23 19:12:27 +00:00
|
|
|
:version "21.1")
|
1998-06-29 17:23:25 +00:00
|
|
|
|
|
|
|
(defcustom find-variable-regexp
|
2005-12-04 02:35:20 +00:00
|
|
|
(concat
|
|
|
|
"^\\s-*(\\(def[^fumag]\\(\\w\\|\\s_\\)+\\*?\\|\
|
|
|
|
easy-mmode-def\\(map\\|syntax\\)\\|easy-menu-define\\)"
|
|
|
|
find-function-space-re
|
|
|
|
"%s\\(\\s-\\|$\\)")
|
1998-06-29 17:23:25 +00:00
|
|
|
"The regexp used by `find-variable' to search for a variable definition.
|
2005-01-05 01:08:24 +00:00
|
|
|
Note it must contain a `%s' at the place where `format'
|
|
|
|
should insert the variable name. The default value
|
2005-01-03 22:05:12 +00:00
|
|
|
avoids `defun', `defmacro', `defalias', `defadvice', `defgroup', `defface'.
|
1998-06-29 17:23:25 +00:00
|
|
|
|
|
|
|
Please send improvements and fixes to the maintainer."
|
|
|
|
:type 'regexp
|
1998-07-14 23:42:21 +00:00
|
|
|
:group 'find-function
|
2000-10-06 18:35:24 +00:00
|
|
|
:version "21.1")
|
1997-10-25 13:18:56 +00:00
|
|
|
|
2005-01-05 01:08:24 +00:00
|
|
|
(defcustom find-face-regexp
|
|
|
|
(concat"^\\s-*(defface" find-function-space-re "%s\\(\\s-\\|$\\)")
|
|
|
|
"The regexp used by `find-face' to search for a face definition.
|
|
|
|
Note it must contain a `%s' at the place where `format'
|
|
|
|
should insert the face name.
|
|
|
|
|
|
|
|
Please send improvements and fixes to the maintainer."
|
|
|
|
:type 'regexp
|
|
|
|
:group 'find-function
|
2005-02-09 15:50:47 +00:00
|
|
|
:version "22.1")
|
2005-01-05 01:08:24 +00:00
|
|
|
|
2015-08-13 12:54:39 -05:00
|
|
|
(defcustom find-feature-regexp
|
|
|
|
(concat ";;; Code:")
|
|
|
|
"The regexp used by `xref-find-definitions' when searching for a feature definition.
|
2016-07-02 17:17:55 -04:00
|
|
|
Note it may contain up to one `%s' at the place where `format'
|
2015-08-13 12:54:39 -05:00
|
|
|
should insert the feature name."
|
|
|
|
;; We search for ";;; Code" rather than (feature '%s) because the
|
|
|
|
;; former is near the start of the code, and the latter is very
|
|
|
|
;; uninteresting. If the regexp is not found, just goes to
|
|
|
|
;; (point-min), which is acceptable in this case.
|
|
|
|
:type 'regexp
|
|
|
|
:group 'xref
|
2016-05-12 10:35:27 -07:00
|
|
|
:version "25.1")
|
2015-08-13 12:54:39 -05:00
|
|
|
|
|
|
|
(defcustom find-alias-regexp
|
|
|
|
"(defalias +'%s"
|
|
|
|
"The regexp used by `xref-find-definitions' to search for an alias definition.
|
|
|
|
Note it must contain a `%s' at the place where `format'
|
|
|
|
should insert the feature name."
|
|
|
|
:type 'regexp
|
|
|
|
:group 'xref
|
2016-05-12 10:35:27 -07:00
|
|
|
:version "25.1")
|
2015-08-13 12:54:39 -05:00
|
|
|
|
2005-01-05 01:08:24 +00:00
|
|
|
(defvar find-function-regexp-alist
|
|
|
|
'((nil . find-function-regexp)
|
|
|
|
(defvar . find-variable-regexp)
|
2015-08-13 12:54:39 -05:00
|
|
|
(defface . find-face-regexp)
|
|
|
|
(feature . find-feature-regexp)
|
|
|
|
(defalias . find-alias-regexp))
|
2005-01-05 01:08:24 +00:00
|
|
|
"Alist mapping definition types into regexp variables.
|
|
|
|
Each regexp variable's value should actually be a format string
|
2015-01-16 22:52:15 -05:00
|
|
|
to be used to substitute the desired symbol name into the regexp.
|
|
|
|
Instead of regexp variable, types can be mapped to functions as well,
|
|
|
|
in which case the function is called with one argument (the object
|
|
|
|
we're looking for) and it should search for it.")
|
2005-01-05 01:08:24 +00:00
|
|
|
(put 'find-function-regexp-alist 'risky-local-variable t)
|
|
|
|
|
1998-02-22 22:01:28 +00:00
|
|
|
(defcustom find-function-source-path nil
|
1999-01-06 20:03:53 +00:00
|
|
|
"The default list of directories where `find-function' searches.
|
1997-10-25 13:18:56 +00:00
|
|
|
|
1999-01-06 20:03:53 +00:00
|
|
|
If this variable is nil then `find-function' searches `load-path' by
|
1998-02-22 22:01:28 +00:00
|
|
|
default."
|
|
|
|
:type '(repeat directory)
|
|
|
|
:group 'find-function)
|
1997-10-25 13:18:56 +00:00
|
|
|
|
1998-06-29 17:23:25 +00:00
|
|
|
(defcustom find-function-recenter-line 1
|
|
|
|
"The window line-number from which to start displaying a symbol definition.
|
|
|
|
A value of nil implies center the beginning of the definition.
|
2002-09-07 06:45:43 +00:00
|
|
|
See `find-function' and `find-variable'."
|
|
|
|
:type '(choice (const :tag "Center" nil)
|
|
|
|
integer)
|
1998-07-14 23:42:21 +00:00
|
|
|
:group 'find-function
|
1998-08-26 09:41:07 +00:00
|
|
|
:version "20.3")
|
1998-06-29 17:23:25 +00:00
|
|
|
|
|
|
|
(defcustom find-function-after-hook nil
|
|
|
|
"Hook run after finding symbol definition.
|
|
|
|
|
|
|
|
See the functions `find-function' and `find-variable'."
|
2007-12-15 22:39:21 +00:00
|
|
|
:type 'hook
|
1998-07-14 23:42:21 +00:00
|
|
|
:group 'find-function
|
1998-08-26 09:41:07 +00:00
|
|
|
:version "20.3")
|
1998-06-29 17:23:25 +00:00
|
|
|
|
|
|
|
;;; Functions:
|
|
|
|
|
2002-09-09 21:50:36 +00:00
|
|
|
(defun find-library-suffixes ()
|
|
|
|
(let ((suffixes nil))
|
2006-02-27 02:03:00 +00:00
|
|
|
(dolist (suffix (get-load-suffixes) (nreverse suffixes))
|
2002-09-09 21:50:36 +00:00
|
|
|
(unless (string-match "elc" suffix) (push suffix suffixes)))))
|
|
|
|
|
2011-06-30 23:15:02 -04:00
|
|
|
(defun find-library--load-name (library)
|
|
|
|
(let ((name library))
|
|
|
|
(dolist (dir load-path)
|
|
|
|
(let ((rel (file-relative-name library dir)))
|
|
|
|
(if (and (not (string-match "\\`\\.\\./" rel))
|
|
|
|
(< (length rel) (length name)))
|
|
|
|
(setq name rel))))
|
|
|
|
(unless (equal name library) name)))
|
|
|
|
|
2002-09-09 21:50:36 +00:00
|
|
|
(defun find-library-name (library)
|
2009-02-11 02:25:06 +00:00
|
|
|
"Return the absolute file name of the Emacs Lisp source of LIBRARY.
|
|
|
|
LIBRARY should be a string (the name of the library)."
|
2006-11-21 20:06:53 +00:00
|
|
|
;; If the library is byte-compiled, try to find a source library by
|
|
|
|
;; the same name.
|
2016-05-01 18:38:07 +02:00
|
|
|
(when (string-match "\\.el\\(c\\(\\..*\\)?\\)\\'" library)
|
|
|
|
(setq library (replace-match "" t t library)))
|
2011-06-30 23:15:02 -04:00
|
|
|
(or
|
2007-12-05 22:16:17 +00:00
|
|
|
(locate-file library
|
2016-05-01 18:38:07 +02:00
|
|
|
(or find-function-source-path load-path)
|
|
|
|
(find-library-suffixes))
|
2007-12-05 22:16:17 +00:00
|
|
|
(locate-file library
|
2016-05-01 18:38:07 +02:00
|
|
|
(or find-function-source-path load-path)
|
|
|
|
load-file-rep-suffixes)
|
2011-06-30 23:15:02 -04:00
|
|
|
(when (file-name-absolute-p library)
|
|
|
|
(let ((rel (find-library--load-name library)))
|
|
|
|
(when rel
|
|
|
|
(or
|
|
|
|
(locate-file rel
|
|
|
|
(or find-function-source-path load-path)
|
|
|
|
(find-library-suffixes))
|
|
|
|
(locate-file rel
|
|
|
|
(or find-function-source-path load-path)
|
|
|
|
load-file-rep-suffixes)))))
|
2017-03-25 22:41:34 -04:00
|
|
|
(find-library--from-load-history library)
|
2007-12-05 22:16:17 +00:00
|
|
|
(error "Can't find library %s" library)))
|
2002-09-09 21:50:36 +00:00
|
|
|
|
2017-03-25 22:41:34 -04:00
|
|
|
(defun find-library--from-load-history (library)
|
2016-05-01 18:38:07 +02:00
|
|
|
;; In `load-history', the file may be ".elc", ".el", ".el.gz", and
|
2017-03-25 22:41:34 -04:00
|
|
|
;; LIBRARY may be "foo.el" or "foo".
|
|
|
|
(let ((load-re
|
|
|
|
(concat "\\(" (regexp-quote (file-name-sans-extension library)) "\\)"
|
|
|
|
(regexp-opt (get-load-suffixes)) "\\'")))
|
|
|
|
(cl-loop
|
|
|
|
for (file . _) in load-history thereis
|
|
|
|
(and (stringp file) (string-match load-re file)
|
|
|
|
(let ((dir (substring file 0 (match-beginning 1)))
|
|
|
|
(basename (match-string 1 file)))
|
|
|
|
(locate-file basename (list dir) (find-library-suffixes)))))))
|
2016-05-01 18:38:07 +02:00
|
|
|
|
2004-04-29 18:39:14 +00:00
|
|
|
(defvar find-function-C-source-directory
|
|
|
|
(let ((dir (expand-file-name "src" source-directory)))
|
2014-06-25 23:45:10 -07:00
|
|
|
(if (file-accessible-directory-p dir) dir))
|
2004-04-29 18:39:14 +00:00
|
|
|
"Directory where the C source files of Emacs can be found.
|
|
|
|
If nil, do not try to find the source code of functions and variables
|
|
|
|
defined in C.")
|
|
|
|
|
2008-11-15 23:36:26 +00:00
|
|
|
(declare-function ad-get-advice-info "advice" (function))
|
|
|
|
|
|
|
|
(defun find-function-advised-original (func)
|
2015-06-05 01:34:40 +03:00
|
|
|
"Return the original function definition of an advised function FUNC.
|
|
|
|
If FUNC is not a symbol, return it. Else, if it's not advised,
|
|
|
|
return the symbol's function definition."
|
2008-11-15 23:36:26 +00:00
|
|
|
(or (and (symbolp func)
|
2015-06-05 01:34:40 +03:00
|
|
|
(featurep 'nadvice)
|
|
|
|
(let ((ofunc (advice--symbol-function func)))
|
|
|
|
(if (advice--p ofunc)
|
|
|
|
(advice--cd*r ofunc)
|
|
|
|
ofunc)))
|
2008-11-15 23:36:26 +00:00
|
|
|
func))
|
|
|
|
|
2005-01-05 01:08:24 +00:00
|
|
|
(defun find-function-C-source (fun-or-var file type)
|
2006-01-21 20:39:30 +00:00
|
|
|
"Find the source location where FUN-OR-VAR is defined in FILE.
|
2005-01-05 01:08:24 +00:00
|
|
|
TYPE should be nil to find a function, or `defvar' to find a variable."
|
2011-09-06 21:06:09 -04:00
|
|
|
(let ((dir (or find-function-C-source-directory
|
|
|
|
(read-directory-name "Emacs C source dir: " nil nil t))))
|
|
|
|
(setq file (expand-file-name file dir))
|
|
|
|
(if (file-readable-p file)
|
|
|
|
(if (null find-function-C-source-directory)
|
|
|
|
(setq find-function-C-source-directory dir))
|
|
|
|
(error "The C source file %s is not available"
|
|
|
|
(file-name-nondirectory file))))
|
2005-01-05 01:08:24 +00:00
|
|
|
(unless type
|
2008-11-15 23:36:26 +00:00
|
|
|
;; Either or both an alias and its target might be advised.
|
|
|
|
(setq fun-or-var (find-function-advised-original
|
|
|
|
(indirect-function
|
|
|
|
(find-function-advised-original fun-or-var)))))
|
2004-04-29 18:39:14 +00:00
|
|
|
(with-current-buffer (find-file-noselect file)
|
|
|
|
(goto-char (point-min))
|
|
|
|
(unless (re-search-forward
|
2005-01-05 01:08:24 +00:00
|
|
|
(if type
|
2004-04-29 18:39:14 +00:00
|
|
|
(concat "DEFVAR[A-Z_]*[ \t\n]*([ \t\n]*\""
|
|
|
|
(regexp-quote (symbol-name fun-or-var))
|
|
|
|
"\"")
|
|
|
|
(concat "DEFUN[ \t\n]*([ \t\n]*\""
|
2014-02-01 21:25:05 -05:00
|
|
|
(regexp-quote (subr-name (advice--cd*r fun-or-var)))
|
2004-04-29 18:39:14 +00:00
|
|
|
"\""))
|
|
|
|
nil t)
|
|
|
|
(error "Can't find source for %s" fun-or-var))
|
|
|
|
(cons (current-buffer) (match-beginning 0))))
|
|
|
|
|
2002-09-09 21:50:36 +00:00
|
|
|
;;;###autoload
|
2017-05-20 14:41:53 +03:00
|
|
|
(defun find-library (library)
|
2009-02-11 02:25:06 +00:00
|
|
|
"Find the Emacs Lisp source of LIBRARY.
|
2017-05-20 14:41:53 +03:00
|
|
|
|
|
|
|
Interactively, prompt for LIBRARY using the one at or near point."
|
|
|
|
(interactive (list (read-library-name)))
|
|
|
|
(prog1
|
|
|
|
(switch-to-buffer (find-file-noselect (find-library-name library)))
|
|
|
|
(run-hooks 'find-function-after-hook)))
|
|
|
|
|
|
|
|
(defun read-library-name ()
|
|
|
|
"Read and return a library name, defaulting to the one near point.
|
|
|
|
|
|
|
|
A library name is the filename of an Emacs Lisp library located
|
|
|
|
in a directory under `load-path' (or `find-function-source-path',
|
|
|
|
if non-nil)."
|
|
|
|
(let* ((dirs (or find-function-source-path load-path))
|
|
|
|
(suffixes (find-library-suffixes))
|
|
|
|
(table (apply-partially 'locate-file-completion-table
|
|
|
|
dirs suffixes))
|
|
|
|
(def (if (eq (function-called-at-point) 'require)
|
|
|
|
;; `function-called-at-point' may return 'require
|
|
|
|
;; with `point' anywhere on this line. So wrap the
|
|
|
|
;; `save-excursion' below in a `condition-case' to
|
|
|
|
;; avoid reporting a scan-error here.
|
|
|
|
(condition-case nil
|
|
|
|
(save-excursion
|
|
|
|
(backward-up-list)
|
|
|
|
(forward-char)
|
|
|
|
(forward-sexp 2)
|
|
|
|
(thing-at-point 'symbol))
|
|
|
|
(error nil))
|
|
|
|
(thing-at-point 'symbol))))
|
|
|
|
(when (and def (not (test-completion def table)))
|
|
|
|
(setq def nil))
|
|
|
|
(completing-read (if def
|
|
|
|
(format "Library name (default %s): " def)
|
|
|
|
"Library name: ")
|
|
|
|
table nil nil nil nil def)))
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defun find-library-other-window (library)
|
|
|
|
"Find the Emacs Lisp source of LIBRARY in another window.
|
|
|
|
|
|
|
|
See `find-library' for more details."
|
|
|
|
(interactive (list (read-library-name)))
|
|
|
|
(prog1
|
|
|
|
(switch-to-buffer-other-window (find-file-noselect
|
|
|
|
(find-library-name library)))
|
|
|
|
(run-hooks 'find-function-after-hook)))
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defun find-library-other-frame (library)
|
|
|
|
"Find the Emacs Lisp source of LIBRARY in another frame.
|
|
|
|
|
|
|
|
See `find-library' for more details."
|
|
|
|
(interactive (list (read-library-name)))
|
2016-04-27 19:25:21 +02:00
|
|
|
(prog1
|
2017-05-20 14:41:53 +03:00
|
|
|
(switch-to-buffer-other-frame (find-file-noselect
|
|
|
|
(find-library-name library)))
|
2016-04-27 19:25:21 +02:00
|
|
|
(run-hooks 'find-function-after-hook)))
|
2002-09-09 21:50:36 +00:00
|
|
|
|
2002-05-08 16:42:09 +00:00
|
|
|
;;;###autoload
|
2005-01-05 01:08:24 +00:00
|
|
|
(defun find-function-search-for-symbol (symbol type library)
|
|
|
|
"Search for SYMBOL's definition of type TYPE in LIBRARY.
|
2006-07-12 16:03:47 +00:00
|
|
|
Visit the library in a buffer, and return a cons cell (BUFFER . POSITION),
|
|
|
|
or just (BUFFER . nil) if the definition can't be found in the file.
|
|
|
|
|
2005-01-05 01:08:24 +00:00
|
|
|
If TYPE is nil, look for a function definition.
|
|
|
|
Otherwise, TYPE specifies the kind of definition,
|
|
|
|
and it is interpreted via `find-function-regexp-alist'.
|
|
|
|
The search is done in the source for library LIBRARY."
|
1998-06-29 17:23:25 +00:00
|
|
|
(if (null library)
|
Go back to grave quoting in source-code docstrings etc.
This reverts almost all my recent changes to use curved quotes
in docstrings and/or strings used for error diagnostics.
There are a few exceptions, e.g., Bahá’í proper names.
* admin/unidata/unidata-gen.el (unidata-gen-table):
* lisp/abbrev.el (expand-region-abbrevs):
* lisp/align.el (align-region):
* lisp/allout.el (allout-mode, allout-solicit-alternate-bullet)
(outlineify-sticky):
* lisp/apropos.el (apropos-library):
* lisp/bookmark.el (bookmark-default-annotation-text):
* lisp/button.el (button-category-symbol, button-put)
(make-text-button):
* lisp/calc/calc-aent.el (math-read-if, math-read-factor):
* lisp/calc/calc-embed.el (calc-do-embedded):
* lisp/calc/calc-ext.el (calc-user-function-list):
* lisp/calc/calc-graph.el (calc-graph-show-dumb):
* lisp/calc/calc-help.el (calc-describe-key)
(calc-describe-thing, calc-full-help):
* lisp/calc/calc-lang.el (calc-c-language)
(math-parse-fortran-vector-end, math-parse-tex-sum)
(math-parse-eqn-matrix, math-parse-eqn-prime)
(calc-yacas-language, calc-maxima-language, calc-giac-language)
(math-read-giac-subscr, math-read-math-subscr)
(math-read-big-rec, math-read-big-balance):
* lisp/calc/calc-misc.el (calc-help, report-calc-bug):
* lisp/calc/calc-mode.el (calc-auto-why, calc-save-modes)
(calc-auto-recompute):
* lisp/calc/calc-prog.el (calc-fix-token-name)
(calc-read-parse-table-part, calc-user-define-invocation)
(math-do-arg-check):
* lisp/calc/calc-store.el (calc-edit-variable):
* lisp/calc/calc-units.el (math-build-units-table-buffer):
* lisp/calc/calc-vec.el (math-read-brackets):
* lisp/calc/calc-yank.el (calc-edit-mode):
* lisp/calc/calc.el (calc, calc-do, calc-user-invocation):
* lisp/calendar/appt.el (appt-display-message):
* lisp/calendar/diary-lib.el (diary-check-diary-file)
(diary-mail-entries, diary-from-outlook):
* lisp/calendar/icalendar.el (icalendar-export-region)
(icalendar--convert-float-to-ical)
(icalendar--convert-date-to-ical)
(icalendar--convert-ical-to-diary)
(icalendar--convert-recurring-to-diary)
(icalendar--add-diary-entry):
* lisp/calendar/time-date.el (format-seconds):
* lisp/calendar/timeclock.el (timeclock-mode-line-display)
(timeclock-make-hours-explicit, timeclock-log-data):
* lisp/calendar/todo-mode.el (todo-prefix, todo-delete-category)
(todo-item-mark, todo-check-format)
(todo-insert-item--next-param, todo-edit-item--next-key)
(todo-mode):
* lisp/cedet/ede/pmake.el (ede-proj-makefile-insert-dist-rules):
* lisp/cedet/mode-local.el (describe-mode-local-overload)
(mode-local-print-binding, mode-local-describe-bindings-2):
* lisp/cedet/semantic/complete.el (semantic-displayor-show-request):
* lisp/cedet/srecode/srt-mode.el (srecode-macro-help):
* lisp/cus-start.el (standard):
* lisp/cus-theme.el (describe-theme-1):
* lisp/custom.el (custom-add-dependencies, custom-check-theme)
(custom--sort-vars-1, load-theme):
* lisp/descr-text.el (describe-text-properties-1, describe-char):
* lisp/dired-x.el (dired-do-run-mail):
* lisp/dired.el (dired-log):
* lisp/emacs-lisp/advice.el (ad-read-advised-function)
(ad-read-advice-class, ad-read-advice-name, ad-enable-advice)
(ad-disable-advice, ad-remove-advice, ad-set-argument)
(ad-set-arguments, ad--defalias-fset, ad-activate)
(ad-deactivate):
* lisp/emacs-lisp/byte-opt.el (byte-compile-inline-expand)
(byte-compile-unfold-lambda, byte-optimize-form-code-walker)
(byte-optimize-while, byte-optimize-apply):
* lisp/emacs-lisp/byte-run.el (defun, defsubst):
* lisp/emacs-lisp/bytecomp.el (byte-compile-lapcode)
(byte-compile-log-file, byte-compile-format-warn)
(byte-compile-nogroup-warn, byte-compile-arglist-warn)
(byte-compile-cl-warn)
(byte-compile-warn-about-unresolved-functions)
(byte-compile-file, byte-compile--declare-var)
(byte-compile-file-form-defmumble, byte-compile-form)
(byte-compile-normal-call, byte-compile-check-variable)
(byte-compile-variable-ref, byte-compile-variable-set)
(byte-compile-subr-wrong-args, byte-compile-setq-default)
(byte-compile-negation-optimizer)
(byte-compile-condition-case--old)
(byte-compile-condition-case--new, byte-compile-save-excursion)
(byte-compile-defvar, byte-compile-autoload)
(byte-compile-lambda-form)
(byte-compile-make-variable-buffer-local, display-call-tree)
(batch-byte-compile):
* lisp/emacs-lisp/cconv.el (cconv-convert, cconv--analyze-use):
* lisp/emacs-lisp/chart.el (chart-space-usage):
* lisp/emacs-lisp/check-declare.el (check-declare-scan)
(check-declare-warn, check-declare-file)
(check-declare-directory):
* lisp/emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine)
(checkdoc-message-text-engine):
* lisp/emacs-lisp/cl-extra.el (cl-parse-integer)
(cl--describe-class):
* lisp/emacs-lisp/cl-generic.el (cl-defgeneric)
(cl--generic-describe, cl-generic-generalizers):
* lisp/emacs-lisp/cl-macs.el (cl--parse-loop-clause, cl-tagbody)
(cl-symbol-macrolet):
* lisp/emacs-lisp/cl.el (cl-unload-function, flet):
* lisp/emacs-lisp/copyright.el (copyright)
(copyright-update-directory):
* lisp/emacs-lisp/edebug.el (edebug-read-list):
* lisp/emacs-lisp/eieio-base.el (eieio-persistent-read):
* lisp/emacs-lisp/eieio-core.el (eieio--slot-override)
(eieio-oref):
* lisp/emacs-lisp/eieio-opt.el (eieio-help-constructor):
* lisp/emacs-lisp/eieio-speedbar.el:
(eieio-speedbar-child-make-tag-lines)
(eieio-speedbar-child-description):
* lisp/emacs-lisp/eieio.el (defclass, change-class):
* lisp/emacs-lisp/elint.el (elint-file, elint-get-top-forms)
(elint-init-form, elint-check-defalias-form)
(elint-check-let-form):
* lisp/emacs-lisp/ert.el (ert-get-test, ert-results-mode-menu)
(ert-results-pop-to-backtrace-for-test-at-point)
(ert-results-pop-to-messages-for-test-at-point)
(ert-results-pop-to-should-forms-for-test-at-point)
(ert-describe-test):
* lisp/emacs-lisp/find-func.el (find-function-search-for-symbol)
(find-function-library):
* lisp/emacs-lisp/generator.el (iter-yield):
* lisp/emacs-lisp/gv.el (gv-define-simple-setter):
* lisp/emacs-lisp/lisp-mnt.el (lm-verify):
* lisp/emacs-lisp/macroexp.el (macroexp--obsolete-warning):
* lisp/emacs-lisp/map-ynp.el (map-y-or-n-p):
* lisp/emacs-lisp/nadvice.el (advice--make-docstring)
(advice--make, define-advice):
* lisp/emacs-lisp/package-x.el (package-upload-file):
* lisp/emacs-lisp/package.el (package-version-join)
(package-disabled-p, package-activate-1, package-activate)
(package--download-one-archive)
(package--download-and-read-archives)
(package-compute-transaction, package-install-from-archive)
(package-install, package-install-selected-packages)
(package-delete, package-autoremove, describe-package-1)
(package-install-button-action, package-delete-button-action)
(package-menu-hide-package, package-menu--list-to-prompt)
(package-menu--perform-transaction)
(package-menu--find-and-notify-upgrades):
* lisp/emacs-lisp/pcase.el (pcase-exhaustive, pcase--u1):
* lisp/emacs-lisp/re-builder.el (reb-enter-subexp-mode):
* lisp/emacs-lisp/ring.el (ring-previous, ring-next):
* lisp/emacs-lisp/rx.el (rx-check, rx-anything)
(rx-check-any-string, rx-check-any, rx-check-not, rx-=)
(rx-repeat, rx-check-backref, rx-syntax, rx-check-category)
(rx-form):
* lisp/emacs-lisp/smie.el (smie-config-save):
* lisp/emacs-lisp/subr-x.el (internal--check-binding):
* lisp/emacs-lisp/tabulated-list.el (tabulated-list-put-tag):
* lisp/emacs-lisp/testcover.el (testcover-1value):
* lisp/emacs-lisp/timer.el (timer-event-handler):
* lisp/emulation/viper-cmd.el (viper-toggle-parse-sexp-ignore-comments)
(viper-toggle-search-style, viper-kill-buffer)
(viper-brac-function):
* lisp/emulation/viper-macs.el (viper-record-kbd-macro):
* lisp/env.el (setenv):
* lisp/erc/erc-button.el (erc-nick-popup):
* lisp/erc/erc.el (erc-cmd-LOAD, erc-handle-login, english):
* lisp/eshell/em-dirs.el (eshell/cd):
* lisp/eshell/em-glob.el (eshell-glob-regexp)
(eshell-glob-entries):
* lisp/eshell/em-pred.el (eshell-parse-modifiers):
* lisp/eshell/esh-opt.el (eshell-show-usage):
* lisp/facemenu.el (facemenu-add-new-face)
(facemenu-add-new-color):
* lisp/faces.el (read-face-name, read-face-font, describe-face)
(x-resolve-font-name):
* lisp/files-x.el (modify-file-local-variable):
* lisp/files.el (locate-user-emacs-file, find-alternate-file)
(set-auto-mode, hack-one-local-variable--obsolete)
(dir-locals-set-directory-class, write-file, basic-save-buffer)
(delete-directory, copy-directory, recover-session)
(recover-session-finish, insert-directory)
(file-modes-char-to-who, file-modes-symbolic-to-number)
(move-file-to-trash):
* lisp/filesets.el (filesets-add-buffer, filesets-remove-buffer):
* lisp/find-cmd.el (find-generic, find-to-string):
* lisp/finder.el (finder-commentary):
* lisp/font-lock.el (font-lock-fontify-buffer):
* lisp/format.el (format-write-file, format-find-file)
(format-insert-file):
* lisp/frame.el (get-device-terminal, select-frame-by-name):
* lisp/fringe.el (fringe--check-style):
* lisp/gnus/nnmairix.el (nnmairix-widget-create-query):
* 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)
(describe-minor-mode-from-indicator):
* lisp/image.el (image-type):
* lisp/international/ccl.el (ccl-dump):
* lisp/international/fontset.el (x-must-resolve-font-name):
* lisp/international/mule-cmds.el (prefer-coding-system)
(select-safe-coding-system-interactively)
(select-safe-coding-system, activate-input-method)
(toggle-input-method, describe-current-input-method)
(describe-language-environment):
* lisp/international/mule-conf.el (code-offset):
* lisp/international/mule-diag.el (describe-character-set)
(list-input-methods-1):
* lisp/mail/feedmail.el (feedmail-run-the-queue):
* lisp/mouse.el (minor-mode-menu-from-indicator):
* lisp/mpc.el (mpc-playlist-rename):
* lisp/msb.el (msb--choose-menu):
* lisp/net/ange-ftp.el (ange-ftp-shell-command):
* lisp/net/imap.el (imap-interactive-login):
* lisp/net/mairix.el (mairix-widget-create-query):
* lisp/net/newst-backend.el (newsticker--sentinel-work):
* lisp/net/newst-treeview.el (newsticker--treeview-load):
* lisp/net/rlogin.el (rlogin):
* lisp/obsolete/iswitchb.el (iswitchb-possible-new-buffer):
* lisp/obsolete/otodo-mode.el (todo-more-important-p):
* lisp/obsolete/pgg-gpg.el (pgg-gpg-process-region):
* lisp/obsolete/pgg-pgp.el (pgg-pgp-process-region):
* lisp/obsolete/pgg-pgp5.el (pgg-pgp5-process-region):
* lisp/org/ob-core.el (org-babel-goto-named-src-block)
(org-babel-goto-named-result):
* lisp/org/ob-fortran.el (org-babel-fortran-ensure-main-wrap):
* lisp/org/ob-ref.el (org-babel-ref-resolve):
* lisp/org/org-agenda.el (org-agenda-prepare):
* lisp/org/org-clock.el (org-clock-notify-once-if-expired)
(org-clock-resolve):
* lisp/org/org-ctags.el (org-ctags-ask-rebuild-tags-file-then-find-tag):
* lisp/org/org-feed.el (org-feed-parse-atom-entry):
* lisp/org/org-habit.el (org-habit-parse-todo):
* lisp/org/org-mouse.el (org-mouse-popup-global-menu)
(org-mouse-context-menu):
* lisp/org/org-table.el (org-table-edit-formulas):
* lisp/org/ox.el (org-export-async-start):
* lisp/proced.el (proced-log):
* lisp/progmodes/ada-mode.el (ada-get-indent-case)
(ada-check-matching-start, ada-goto-matching-start):
* lisp/progmodes/ada-prj.el (ada-prj-display-page):
* lisp/progmodes/ada-xref.el (ada-find-executable):
* lisp/progmodes/ebrowse.el (ebrowse-tags-apropos):
* lisp/progmodes/etags.el (etags-tags-apropos-additional):
* lisp/progmodes/flymake.el (flymake-parse-err-lines)
(flymake-start-syntax-check-process):
* lisp/progmodes/python.el (python-shell-get-process-or-error)
(python-define-auxiliary-skeleton):
* lisp/progmodes/sql.el (sql-comint):
* lisp/progmodes/verilog-mode.el (verilog-load-file-at-point):
* lisp/progmodes/vhdl-mode.el (vhdl-widget-directory-validate):
* lisp/recentf.el (recentf-open-files):
* lisp/replace.el (query-replace-read-from)
(occur-after-change-function, occur-1):
* lisp/scroll-bar.el (scroll-bar-columns):
* lisp/server.el (server-get-auth-key):
* lisp/simple.el (execute-extended-command)
(undo-outer-limit-truncate, list-processes--refresh)
(compose-mail, set-variable, choose-completion-string)
(define-alternatives):
* lisp/startup.el (site-run-file, tty-handle-args, command-line)
(command-line-1):
* lisp/subr.el (noreturn, define-error, add-to-list)
(read-char-choice, version-to-list):
* lisp/term/common-win.el (x-handle-xrm-switch)
(x-handle-name-switch, x-handle-args):
* lisp/term/x-win.el (x-handle-parent-id, x-handle-smid):
* lisp/textmodes/reftex-ref.el (reftex-label):
* lisp/textmodes/reftex-toc.el (reftex-toc-rename-label):
* lisp/textmodes/two-column.el (2C-split):
* lisp/tutorial.el (tutorial--describe-nonstandard-key)
(tutorial--find-changed-keys):
* lisp/type-break.el (type-break-noninteractive-query):
* lisp/wdired.el (wdired-do-renames, wdired-do-symlink-changes)
(wdired-do-perm-changes):
* lisp/whitespace.el (whitespace-report-region):
Prefer grave quoting in source-code strings used to generate help
and diagnostics.
* lisp/faces.el (face-documentation):
No need to convert quotes, since the result is a docstring.
* lisp/info.el (Info-virtual-index-find-node)
(Info-virtual-index, info-apropos):
Simplify by generating only curved quotes, since info files are
typically that ways nowadays anyway.
* lisp/international/mule-diag.el (list-input-methods):
Don’t assume text quoting style is curved.
* lisp/org/org-bibtex.el (org-bibtex-fields):
Revert my recent changes, going back to the old quoting style.
2015-09-07 08:41:44 -07:00
|
|
|
(error "Don't know where `%s' is defined" symbol))
|
2002-08-13 01:49:40 +00:00
|
|
|
;; Some functions are defined as part of the construct
|
|
|
|
;; that defines something else.
|
2004-04-29 18:39:14 +00:00
|
|
|
(while (and (symbolp symbol) (get symbol 'definition-name))
|
2002-08-13 01:49:40 +00:00
|
|
|
(setq symbol (get symbol 'definition-name)))
|
2008-07-28 13:19:10 +00:00
|
|
|
(if (string-match "\\`src/\\(.*\\.\\(c\\|m\\)\\)\\'" library)
|
2005-01-05 01:08:24 +00:00
|
|
|
(find-function-C-source symbol (match-string 1 library) type)
|
2008-01-29 17:40:19 +00:00
|
|
|
(when (string-match "\\.el\\(c\\)\\'" library)
|
|
|
|
(setq library (substring library 0 (match-beginning 1))))
|
|
|
|
;; Strip extension from .emacs.el to make sure symbol is searched in
|
|
|
|
;; .emacs too.
|
|
|
|
(when (string-match "\\.emacs\\(.el\\)" library)
|
|
|
|
(setq library (substring library 0 (match-beginning 1))))
|
2005-01-05 01:08:24 +00:00
|
|
|
(let* ((filename (find-library-name library))
|
|
|
|
(regexp-symbol (cdr (assq type find-function-regexp-alist))))
|
1998-12-11 17:42:56 +00:00
|
|
|
(with-current-buffer (find-file-noselect filename)
|
2015-01-16 22:52:15 -05:00
|
|
|
(let ((regexp (if (functionp regexp-symbol) regexp-symbol
|
|
|
|
(format (symbol-value regexp-symbol)
|
|
|
|
;; Entry for ` (backquote) macro in loaddefs.el,
|
|
|
|
;; (defalias (quote \`)..., has a \ but
|
|
|
|
;; (symbol-name symbol) doesn't. Add an
|
|
|
|
;; optional \ to catch this.
|
|
|
|
(concat "\\\\?"
|
|
|
|
(regexp-quote (symbol-name symbol))))))
|
2002-05-04 15:42:34 +00:00
|
|
|
(case-fold-search))
|
2017-12-10 13:34:06 +00:00
|
|
|
(save-restriction
|
|
|
|
(widen)
|
|
|
|
(with-syntax-table emacs-lisp-mode-syntax-table
|
|
|
|
(goto-char (point-min))
|
|
|
|
(if (if (functionp regexp)
|
|
|
|
(funcall regexp symbol)
|
|
|
|
(or (re-search-forward regexp nil t)
|
|
|
|
;; `regexp' matches definitions using known forms like
|
|
|
|
;; `defun', or `defvar'. But some functions/variables
|
|
|
|
;; are defined using special macros (or functions), so
|
|
|
|
;; if `regexp' can't find the definition, we look for
|
|
|
|
;; something of the form "(SOMETHING <symbol> ...)".
|
|
|
|
;; This fails to distinguish function definitions from
|
|
|
|
;; variable declarations (or even uses thereof), but is
|
|
|
|
;; a good pragmatic fallback.
|
|
|
|
(re-search-forward
|
|
|
|
(concat "^([^ ]+" find-function-space-re "['(]?"
|
|
|
|
(regexp-quote (symbol-name symbol))
|
|
|
|
"\\_>")
|
|
|
|
nil t)))
|
|
|
|
(progn
|
|
|
|
(beginning-of-line)
|
|
|
|
(cons (current-buffer) (point)))
|
|
|
|
(cons (current-buffer) nil)))))))))
|
1998-06-29 17:23:25 +00:00
|
|
|
|
2014-12-27 16:06:37 +02:00
|
|
|
(defun find-function-library (function &optional lisp-only verbose)
|
2014-12-29 04:21:51 +02:00
|
|
|
"Return the pair (ORIG-FUNCTION . LIBRARY) for FUNCTION.
|
2014-12-27 16:06:37 +02:00
|
|
|
|
2014-12-29 04:21:51 +02:00
|
|
|
ORIG-FUNCTION is the original name, after removing all advice and
|
|
|
|
resolving aliases. LIBRARY is an absolute file name, a relative
|
|
|
|
file name inside the C sources directory, or a name of an
|
|
|
|
autoloaded feature.
|
|
|
|
|
|
|
|
If ORIG-FUNCTION is a built-in function and LISP-ONLY is non-nil,
|
2014-12-27 16:06:37 +02:00
|
|
|
signal an error.
|
|
|
|
|
|
|
|
If VERBOSE is non-nil, and FUNCTION is an alias, display a
|
|
|
|
message about the whole chain of aliases."
|
2016-05-26 19:50:54 -04:00
|
|
|
(let ((def (when (symbolp function)
|
|
|
|
(or (fboundp function)
|
|
|
|
(signal 'void-function (list function)))
|
|
|
|
(find-function-advised-original function)))
|
2014-12-27 16:06:37 +02:00
|
|
|
aliases)
|
|
|
|
;; FIXME for completeness, it might be nice to print something like:
|
|
|
|
;; foo (which is advised), which is an alias for bar (which is advised).
|
2015-01-16 22:52:15 -05:00
|
|
|
(while (and def (symbolp def))
|
2014-12-27 16:06:37 +02:00
|
|
|
(or (eq def function)
|
|
|
|
(not verbose)
|
2015-01-16 22:52:15 -05:00
|
|
|
(setq aliases (if aliases
|
|
|
|
(concat aliases
|
More-conservative ‘format’ quote restyling
Instead of restyling curved quotes for every call to ‘format’,
create a new function ‘format-message’ that does the restyling,
and using the new function instead of ‘format’ only in contexts
where this seems appropriate.
Problem reported by Dmitry Gutov and Andreas Schwab in:
http://lists.gnu.org/archive/html/emacs-devel/2015-08/msg00826.html
http://lists.gnu.org/archive/html/emacs-devel/2015-08/msg00827.html
* doc/lispref/commands.texi (Using Interactive):
* doc/lispref/control.texi (Signaling Errors, Signaling Errors):
* doc/lispref/display.texi (Displaying Messages, Progress):
* doc/lispref/elisp.texi:
* doc/lispref/help.texi (Keys in Documentation):
* doc/lispref/minibuf.texi (Minibuffer Misc):
* doc/lispref/strings.texi (Formatting Strings):
* etc/NEWS:
Document the changes.
* lisp/abbrev.el (expand-region-abbrevs):
* lisp/apropos.el (apropos-library):
* lisp/calc/calc-ext.el (calc-record-message)
(calc-user-function-list):
* lisp/calc/calc-help.el (calc-describe-key, calc-full-help):
* lisp/calc/calc-lang.el (math-read-big-balance):
* lisp/calc/calc-store.el (calc-edit-variable):
* lisp/calc/calc-units.el (math-build-units-table-buffer):
* lisp/calc/calc-yank.el (calc-edit-mode):
* lisp/calendar/icalendar.el (icalendar-export-region)
(icalendar--add-diary-entry):
* lisp/cedet/mode-local.el (mode-local-print-binding)
(mode-local-describe-bindings-2):
* lisp/cedet/semantic/complete.el (semantic-completion-message):
* lisp/cedet/semantic/edit.el (semantic-parse-changes-failed):
* lisp/cedet/semantic/wisent/comp.el (wisent-log):
* lisp/cedet/srecode/insert.el (srecode-insert-show-error-report):
* lisp/descr-text.el (describe-text-properties-1, describe-char):
* lisp/dframe.el (dframe-message):
* lisp/dired-aux.el (dired-query):
* lisp/emacs-lisp/byte-opt.el (byte-compile-log-lap-1):
* lisp/emacs-lisp/bytecomp.el (byte-compile-log)
(byte-compile-log-file, byte-compile-warn, byte-compile-form):
* lisp/emacs-lisp/cconv.el (cconv-convert, cconv--analyze-use)
(cconv-analyze-form):
* lisp/emacs-lisp/check-declare.el (check-declare-warn):
* lisp/emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine):
* lisp/emacs-lisp/cl-macs.el (cl-symbol-macrolet):
* lisp/emacs-lisp/edebug.el (edebug-format):
* lisp/emacs-lisp/eieio-core.el (eieio-oref):
* lisp/emacs-lisp/eldoc.el (eldoc-minibuffer-message)
(eldoc-message):
* lisp/emacs-lisp/elint.el (elint-file, elint-log):
* lisp/emacs-lisp/find-func.el (find-function-library):
* lisp/emacs-lisp/macroexp.el (macroexp--obsolete-warning):
* lisp/emacs-lisp/map-ynp.el (map-y-or-n-p):
* lisp/emacs-lisp/nadvice.el (advice--make-docstring):
* lisp/emacs-lisp/package.el (package-compute-transaction)
(package-install-button-action, package-delete-button-action)
(package-menu--list-to-prompt):
* lisp/emacs-lisp/timer.el (timer-event-handler):
* lisp/emacs-lisp/warnings.el (lwarn, warn):
* lisp/emulation/viper-cmd.el:
(viper-toggle-parse-sexp-ignore-comments)
(viper-kill-buffer, viper-brac-function):
* lisp/emulation/viper-macs.el (viper-record-kbd-macro):
* lisp/facemenu.el (facemenu-add-new-face):
* lisp/faces.el (face-documentation, read-face-name)
(face-read-string, read-face-font, describe-face):
* lisp/files.el (find-alternate-file, hack-local-variables)
(hack-one-local-variable--obsolete, write-file)
(basic-save-buffer, delete-directory):
* lisp/format.el (format-write-file, format-find-file)
(format-insert-file):
* lisp/help-fns.el (help-fns--key-bindings)
(help-fns--compiler-macro, help-fns--obsolete)
(help-fns--interactive-only, describe-function-1)
(describe-variable):
* lisp/help.el (describe-mode):
* lisp/info-xref.el (info-xref-output):
* lisp/info.el (Info-virtual-index-find-node)
(Info-virtual-index, info-apropos):
* lisp/international/kkc.el (kkc-error):
* lisp/international/mule-cmds.el:
(select-safe-coding-system-interactively)
(select-safe-coding-system, describe-input-method):
* lisp/international/mule-conf.el (code-offset):
* lisp/international/mule-diag.el (describe-character-set)
(list-input-methods-1):
* lisp/international/quail.el (quail-error):
* lisp/minibuffer.el (minibuffer-message):
* lisp/mpc.el (mpc--debug):
* lisp/msb.el (msb--choose-menu):
* lisp/net/ange-ftp.el (ange-ftp-message):
* lisp/net/gnutls.el (gnutls-message-maybe):
* lisp/net/newst-backend.el (newsticker--sentinel-work):
* lisp/net/newst-treeview.el (newsticker--treeview-load):
* lisp/net/nsm.el (nsm-query-user):
* lisp/net/rlogin.el (rlogin):
* lisp/net/soap-client.el (soap-warning):
* lisp/net/tramp.el (tramp-debug-message):
* lisp/nxml/nxml-outln.el (nxml-report-outline-error):
* lisp/nxml/nxml-parse.el (nxml-parse-error):
* lisp/nxml/rng-cmpct.el (rng-c-error):
* lisp/nxml/rng-match.el (rng-compile-error):
* lisp/nxml/rng-uri.el (rng-uri-error):
* lisp/obsolete/iswitchb.el (iswitchb-possible-new-buffer):
* lisp/org/org-ctags.el:
(org-ctags-ask-rebuild-tags-file-then-find-tag):
* lisp/proced.el (proced-log):
* lisp/progmodes/ebnf2ps.el (ebnf-log):
* lisp/progmodes/flymake.el (flymake-log):
* lisp/progmodes/vhdl-mode.el (vhdl-warning-when-idle):
* lisp/replace.el (occur-1):
* lisp/simple.el (execute-extended-command)
(undo-outer-limit-truncate, define-alternatives):
* lisp/startup.el (command-line):
* lisp/subr.el (error, user-error, add-to-list):
* lisp/tutorial.el (tutorial--describe-nonstandard-key)
(tutorial--find-changed-keys):
* src/callint.c (Fcall_interactively):
* src/editfns.c (Fmessage, Fmessage_box):
Restyle the quotes of format strings intended for use as a
diagnostic, when restyling seems appropriate.
* lisp/subr.el (format-message): New function.
* src/doc.c (Finternal__text_restyle): New function.
(syms_of_doc): Define it.
2015-08-23 22:38:02 -07:00
|
|
|
(format-message
|
Go back to grave quoting in source-code docstrings etc.
This reverts almost all my recent changes to use curved quotes
in docstrings and/or strings used for error diagnostics.
There are a few exceptions, e.g., Bahá’í proper names.
* admin/unidata/unidata-gen.el (unidata-gen-table):
* lisp/abbrev.el (expand-region-abbrevs):
* lisp/align.el (align-region):
* lisp/allout.el (allout-mode, allout-solicit-alternate-bullet)
(outlineify-sticky):
* lisp/apropos.el (apropos-library):
* lisp/bookmark.el (bookmark-default-annotation-text):
* lisp/button.el (button-category-symbol, button-put)
(make-text-button):
* lisp/calc/calc-aent.el (math-read-if, math-read-factor):
* lisp/calc/calc-embed.el (calc-do-embedded):
* lisp/calc/calc-ext.el (calc-user-function-list):
* lisp/calc/calc-graph.el (calc-graph-show-dumb):
* lisp/calc/calc-help.el (calc-describe-key)
(calc-describe-thing, calc-full-help):
* lisp/calc/calc-lang.el (calc-c-language)
(math-parse-fortran-vector-end, math-parse-tex-sum)
(math-parse-eqn-matrix, math-parse-eqn-prime)
(calc-yacas-language, calc-maxima-language, calc-giac-language)
(math-read-giac-subscr, math-read-math-subscr)
(math-read-big-rec, math-read-big-balance):
* lisp/calc/calc-misc.el (calc-help, report-calc-bug):
* lisp/calc/calc-mode.el (calc-auto-why, calc-save-modes)
(calc-auto-recompute):
* lisp/calc/calc-prog.el (calc-fix-token-name)
(calc-read-parse-table-part, calc-user-define-invocation)
(math-do-arg-check):
* lisp/calc/calc-store.el (calc-edit-variable):
* lisp/calc/calc-units.el (math-build-units-table-buffer):
* lisp/calc/calc-vec.el (math-read-brackets):
* lisp/calc/calc-yank.el (calc-edit-mode):
* lisp/calc/calc.el (calc, calc-do, calc-user-invocation):
* lisp/calendar/appt.el (appt-display-message):
* lisp/calendar/diary-lib.el (diary-check-diary-file)
(diary-mail-entries, diary-from-outlook):
* lisp/calendar/icalendar.el (icalendar-export-region)
(icalendar--convert-float-to-ical)
(icalendar--convert-date-to-ical)
(icalendar--convert-ical-to-diary)
(icalendar--convert-recurring-to-diary)
(icalendar--add-diary-entry):
* lisp/calendar/time-date.el (format-seconds):
* lisp/calendar/timeclock.el (timeclock-mode-line-display)
(timeclock-make-hours-explicit, timeclock-log-data):
* lisp/calendar/todo-mode.el (todo-prefix, todo-delete-category)
(todo-item-mark, todo-check-format)
(todo-insert-item--next-param, todo-edit-item--next-key)
(todo-mode):
* lisp/cedet/ede/pmake.el (ede-proj-makefile-insert-dist-rules):
* lisp/cedet/mode-local.el (describe-mode-local-overload)
(mode-local-print-binding, mode-local-describe-bindings-2):
* lisp/cedet/semantic/complete.el (semantic-displayor-show-request):
* lisp/cedet/srecode/srt-mode.el (srecode-macro-help):
* lisp/cus-start.el (standard):
* lisp/cus-theme.el (describe-theme-1):
* lisp/custom.el (custom-add-dependencies, custom-check-theme)
(custom--sort-vars-1, load-theme):
* lisp/descr-text.el (describe-text-properties-1, describe-char):
* lisp/dired-x.el (dired-do-run-mail):
* lisp/dired.el (dired-log):
* lisp/emacs-lisp/advice.el (ad-read-advised-function)
(ad-read-advice-class, ad-read-advice-name, ad-enable-advice)
(ad-disable-advice, ad-remove-advice, ad-set-argument)
(ad-set-arguments, ad--defalias-fset, ad-activate)
(ad-deactivate):
* lisp/emacs-lisp/byte-opt.el (byte-compile-inline-expand)
(byte-compile-unfold-lambda, byte-optimize-form-code-walker)
(byte-optimize-while, byte-optimize-apply):
* lisp/emacs-lisp/byte-run.el (defun, defsubst):
* lisp/emacs-lisp/bytecomp.el (byte-compile-lapcode)
(byte-compile-log-file, byte-compile-format-warn)
(byte-compile-nogroup-warn, byte-compile-arglist-warn)
(byte-compile-cl-warn)
(byte-compile-warn-about-unresolved-functions)
(byte-compile-file, byte-compile--declare-var)
(byte-compile-file-form-defmumble, byte-compile-form)
(byte-compile-normal-call, byte-compile-check-variable)
(byte-compile-variable-ref, byte-compile-variable-set)
(byte-compile-subr-wrong-args, byte-compile-setq-default)
(byte-compile-negation-optimizer)
(byte-compile-condition-case--old)
(byte-compile-condition-case--new, byte-compile-save-excursion)
(byte-compile-defvar, byte-compile-autoload)
(byte-compile-lambda-form)
(byte-compile-make-variable-buffer-local, display-call-tree)
(batch-byte-compile):
* lisp/emacs-lisp/cconv.el (cconv-convert, cconv--analyze-use):
* lisp/emacs-lisp/chart.el (chart-space-usage):
* lisp/emacs-lisp/check-declare.el (check-declare-scan)
(check-declare-warn, check-declare-file)
(check-declare-directory):
* lisp/emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine)
(checkdoc-message-text-engine):
* lisp/emacs-lisp/cl-extra.el (cl-parse-integer)
(cl--describe-class):
* lisp/emacs-lisp/cl-generic.el (cl-defgeneric)
(cl--generic-describe, cl-generic-generalizers):
* lisp/emacs-lisp/cl-macs.el (cl--parse-loop-clause, cl-tagbody)
(cl-symbol-macrolet):
* lisp/emacs-lisp/cl.el (cl-unload-function, flet):
* lisp/emacs-lisp/copyright.el (copyright)
(copyright-update-directory):
* lisp/emacs-lisp/edebug.el (edebug-read-list):
* lisp/emacs-lisp/eieio-base.el (eieio-persistent-read):
* lisp/emacs-lisp/eieio-core.el (eieio--slot-override)
(eieio-oref):
* lisp/emacs-lisp/eieio-opt.el (eieio-help-constructor):
* lisp/emacs-lisp/eieio-speedbar.el:
(eieio-speedbar-child-make-tag-lines)
(eieio-speedbar-child-description):
* lisp/emacs-lisp/eieio.el (defclass, change-class):
* lisp/emacs-lisp/elint.el (elint-file, elint-get-top-forms)
(elint-init-form, elint-check-defalias-form)
(elint-check-let-form):
* lisp/emacs-lisp/ert.el (ert-get-test, ert-results-mode-menu)
(ert-results-pop-to-backtrace-for-test-at-point)
(ert-results-pop-to-messages-for-test-at-point)
(ert-results-pop-to-should-forms-for-test-at-point)
(ert-describe-test):
* lisp/emacs-lisp/find-func.el (find-function-search-for-symbol)
(find-function-library):
* lisp/emacs-lisp/generator.el (iter-yield):
* lisp/emacs-lisp/gv.el (gv-define-simple-setter):
* lisp/emacs-lisp/lisp-mnt.el (lm-verify):
* lisp/emacs-lisp/macroexp.el (macroexp--obsolete-warning):
* lisp/emacs-lisp/map-ynp.el (map-y-or-n-p):
* lisp/emacs-lisp/nadvice.el (advice--make-docstring)
(advice--make, define-advice):
* lisp/emacs-lisp/package-x.el (package-upload-file):
* lisp/emacs-lisp/package.el (package-version-join)
(package-disabled-p, package-activate-1, package-activate)
(package--download-one-archive)
(package--download-and-read-archives)
(package-compute-transaction, package-install-from-archive)
(package-install, package-install-selected-packages)
(package-delete, package-autoremove, describe-package-1)
(package-install-button-action, package-delete-button-action)
(package-menu-hide-package, package-menu--list-to-prompt)
(package-menu--perform-transaction)
(package-menu--find-and-notify-upgrades):
* lisp/emacs-lisp/pcase.el (pcase-exhaustive, pcase--u1):
* lisp/emacs-lisp/re-builder.el (reb-enter-subexp-mode):
* lisp/emacs-lisp/ring.el (ring-previous, ring-next):
* lisp/emacs-lisp/rx.el (rx-check, rx-anything)
(rx-check-any-string, rx-check-any, rx-check-not, rx-=)
(rx-repeat, rx-check-backref, rx-syntax, rx-check-category)
(rx-form):
* lisp/emacs-lisp/smie.el (smie-config-save):
* lisp/emacs-lisp/subr-x.el (internal--check-binding):
* lisp/emacs-lisp/tabulated-list.el (tabulated-list-put-tag):
* lisp/emacs-lisp/testcover.el (testcover-1value):
* lisp/emacs-lisp/timer.el (timer-event-handler):
* lisp/emulation/viper-cmd.el (viper-toggle-parse-sexp-ignore-comments)
(viper-toggle-search-style, viper-kill-buffer)
(viper-brac-function):
* lisp/emulation/viper-macs.el (viper-record-kbd-macro):
* lisp/env.el (setenv):
* lisp/erc/erc-button.el (erc-nick-popup):
* lisp/erc/erc.el (erc-cmd-LOAD, erc-handle-login, english):
* lisp/eshell/em-dirs.el (eshell/cd):
* lisp/eshell/em-glob.el (eshell-glob-regexp)
(eshell-glob-entries):
* lisp/eshell/em-pred.el (eshell-parse-modifiers):
* lisp/eshell/esh-opt.el (eshell-show-usage):
* lisp/facemenu.el (facemenu-add-new-face)
(facemenu-add-new-color):
* lisp/faces.el (read-face-name, read-face-font, describe-face)
(x-resolve-font-name):
* lisp/files-x.el (modify-file-local-variable):
* lisp/files.el (locate-user-emacs-file, find-alternate-file)
(set-auto-mode, hack-one-local-variable--obsolete)
(dir-locals-set-directory-class, write-file, basic-save-buffer)
(delete-directory, copy-directory, recover-session)
(recover-session-finish, insert-directory)
(file-modes-char-to-who, file-modes-symbolic-to-number)
(move-file-to-trash):
* lisp/filesets.el (filesets-add-buffer, filesets-remove-buffer):
* lisp/find-cmd.el (find-generic, find-to-string):
* lisp/finder.el (finder-commentary):
* lisp/font-lock.el (font-lock-fontify-buffer):
* lisp/format.el (format-write-file, format-find-file)
(format-insert-file):
* lisp/frame.el (get-device-terminal, select-frame-by-name):
* lisp/fringe.el (fringe--check-style):
* lisp/gnus/nnmairix.el (nnmairix-widget-create-query):
* 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)
(describe-minor-mode-from-indicator):
* lisp/image.el (image-type):
* lisp/international/ccl.el (ccl-dump):
* lisp/international/fontset.el (x-must-resolve-font-name):
* lisp/international/mule-cmds.el (prefer-coding-system)
(select-safe-coding-system-interactively)
(select-safe-coding-system, activate-input-method)
(toggle-input-method, describe-current-input-method)
(describe-language-environment):
* lisp/international/mule-conf.el (code-offset):
* lisp/international/mule-diag.el (describe-character-set)
(list-input-methods-1):
* lisp/mail/feedmail.el (feedmail-run-the-queue):
* lisp/mouse.el (minor-mode-menu-from-indicator):
* lisp/mpc.el (mpc-playlist-rename):
* lisp/msb.el (msb--choose-menu):
* lisp/net/ange-ftp.el (ange-ftp-shell-command):
* lisp/net/imap.el (imap-interactive-login):
* lisp/net/mairix.el (mairix-widget-create-query):
* lisp/net/newst-backend.el (newsticker--sentinel-work):
* lisp/net/newst-treeview.el (newsticker--treeview-load):
* lisp/net/rlogin.el (rlogin):
* lisp/obsolete/iswitchb.el (iswitchb-possible-new-buffer):
* lisp/obsolete/otodo-mode.el (todo-more-important-p):
* lisp/obsolete/pgg-gpg.el (pgg-gpg-process-region):
* lisp/obsolete/pgg-pgp.el (pgg-pgp-process-region):
* lisp/obsolete/pgg-pgp5.el (pgg-pgp5-process-region):
* lisp/org/ob-core.el (org-babel-goto-named-src-block)
(org-babel-goto-named-result):
* lisp/org/ob-fortran.el (org-babel-fortran-ensure-main-wrap):
* lisp/org/ob-ref.el (org-babel-ref-resolve):
* lisp/org/org-agenda.el (org-agenda-prepare):
* lisp/org/org-clock.el (org-clock-notify-once-if-expired)
(org-clock-resolve):
* lisp/org/org-ctags.el (org-ctags-ask-rebuild-tags-file-then-find-tag):
* lisp/org/org-feed.el (org-feed-parse-atom-entry):
* lisp/org/org-habit.el (org-habit-parse-todo):
* lisp/org/org-mouse.el (org-mouse-popup-global-menu)
(org-mouse-context-menu):
* lisp/org/org-table.el (org-table-edit-formulas):
* lisp/org/ox.el (org-export-async-start):
* lisp/proced.el (proced-log):
* lisp/progmodes/ada-mode.el (ada-get-indent-case)
(ada-check-matching-start, ada-goto-matching-start):
* lisp/progmodes/ada-prj.el (ada-prj-display-page):
* lisp/progmodes/ada-xref.el (ada-find-executable):
* lisp/progmodes/ebrowse.el (ebrowse-tags-apropos):
* lisp/progmodes/etags.el (etags-tags-apropos-additional):
* lisp/progmodes/flymake.el (flymake-parse-err-lines)
(flymake-start-syntax-check-process):
* lisp/progmodes/python.el (python-shell-get-process-or-error)
(python-define-auxiliary-skeleton):
* lisp/progmodes/sql.el (sql-comint):
* lisp/progmodes/verilog-mode.el (verilog-load-file-at-point):
* lisp/progmodes/vhdl-mode.el (vhdl-widget-directory-validate):
* lisp/recentf.el (recentf-open-files):
* lisp/replace.el (query-replace-read-from)
(occur-after-change-function, occur-1):
* lisp/scroll-bar.el (scroll-bar-columns):
* lisp/server.el (server-get-auth-key):
* lisp/simple.el (execute-extended-command)
(undo-outer-limit-truncate, list-processes--refresh)
(compose-mail, set-variable, choose-completion-string)
(define-alternatives):
* lisp/startup.el (site-run-file, tty-handle-args, command-line)
(command-line-1):
* lisp/subr.el (noreturn, define-error, add-to-list)
(read-char-choice, version-to-list):
* lisp/term/common-win.el (x-handle-xrm-switch)
(x-handle-name-switch, x-handle-args):
* lisp/term/x-win.el (x-handle-parent-id, x-handle-smid):
* lisp/textmodes/reftex-ref.el (reftex-label):
* lisp/textmodes/reftex-toc.el (reftex-toc-rename-label):
* lisp/textmodes/two-column.el (2C-split):
* lisp/tutorial.el (tutorial--describe-nonstandard-key)
(tutorial--find-changed-keys):
* lisp/type-break.el (type-break-noninteractive-query):
* lisp/wdired.el (wdired-do-renames, wdired-do-symlink-changes)
(wdired-do-perm-changes):
* lisp/whitespace.el (whitespace-report-region):
Prefer grave quoting in source-code strings used to generate help
and diagnostics.
* lisp/faces.el (face-documentation):
No need to convert quotes, since the result is a docstring.
* lisp/info.el (Info-virtual-index-find-node)
(Info-virtual-index, info-apropos):
Simplify by generating only curved quotes, since info files are
typically that ways nowadays anyway.
* lisp/international/mule-diag.el (list-input-methods):
Don’t assume text quoting style is curved.
* lisp/org/org-bibtex.el (org-bibtex-fields):
Revert my recent changes, going back to the old quoting style.
2015-09-07 08:41:44 -07:00
|
|
|
", which is an alias for `%s'"
|
More-conservative ‘format’ quote restyling
Instead of restyling curved quotes for every call to ‘format’,
create a new function ‘format-message’ that does the restyling,
and using the new function instead of ‘format’ only in contexts
where this seems appropriate.
Problem reported by Dmitry Gutov and Andreas Schwab in:
http://lists.gnu.org/archive/html/emacs-devel/2015-08/msg00826.html
http://lists.gnu.org/archive/html/emacs-devel/2015-08/msg00827.html
* doc/lispref/commands.texi (Using Interactive):
* doc/lispref/control.texi (Signaling Errors, Signaling Errors):
* doc/lispref/display.texi (Displaying Messages, Progress):
* doc/lispref/elisp.texi:
* doc/lispref/help.texi (Keys in Documentation):
* doc/lispref/minibuf.texi (Minibuffer Misc):
* doc/lispref/strings.texi (Formatting Strings):
* etc/NEWS:
Document the changes.
* lisp/abbrev.el (expand-region-abbrevs):
* lisp/apropos.el (apropos-library):
* lisp/calc/calc-ext.el (calc-record-message)
(calc-user-function-list):
* lisp/calc/calc-help.el (calc-describe-key, calc-full-help):
* lisp/calc/calc-lang.el (math-read-big-balance):
* lisp/calc/calc-store.el (calc-edit-variable):
* lisp/calc/calc-units.el (math-build-units-table-buffer):
* lisp/calc/calc-yank.el (calc-edit-mode):
* lisp/calendar/icalendar.el (icalendar-export-region)
(icalendar--add-diary-entry):
* lisp/cedet/mode-local.el (mode-local-print-binding)
(mode-local-describe-bindings-2):
* lisp/cedet/semantic/complete.el (semantic-completion-message):
* lisp/cedet/semantic/edit.el (semantic-parse-changes-failed):
* lisp/cedet/semantic/wisent/comp.el (wisent-log):
* lisp/cedet/srecode/insert.el (srecode-insert-show-error-report):
* lisp/descr-text.el (describe-text-properties-1, describe-char):
* lisp/dframe.el (dframe-message):
* lisp/dired-aux.el (dired-query):
* lisp/emacs-lisp/byte-opt.el (byte-compile-log-lap-1):
* lisp/emacs-lisp/bytecomp.el (byte-compile-log)
(byte-compile-log-file, byte-compile-warn, byte-compile-form):
* lisp/emacs-lisp/cconv.el (cconv-convert, cconv--analyze-use)
(cconv-analyze-form):
* lisp/emacs-lisp/check-declare.el (check-declare-warn):
* lisp/emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine):
* lisp/emacs-lisp/cl-macs.el (cl-symbol-macrolet):
* lisp/emacs-lisp/edebug.el (edebug-format):
* lisp/emacs-lisp/eieio-core.el (eieio-oref):
* lisp/emacs-lisp/eldoc.el (eldoc-minibuffer-message)
(eldoc-message):
* lisp/emacs-lisp/elint.el (elint-file, elint-log):
* lisp/emacs-lisp/find-func.el (find-function-library):
* lisp/emacs-lisp/macroexp.el (macroexp--obsolete-warning):
* lisp/emacs-lisp/map-ynp.el (map-y-or-n-p):
* lisp/emacs-lisp/nadvice.el (advice--make-docstring):
* lisp/emacs-lisp/package.el (package-compute-transaction)
(package-install-button-action, package-delete-button-action)
(package-menu--list-to-prompt):
* lisp/emacs-lisp/timer.el (timer-event-handler):
* lisp/emacs-lisp/warnings.el (lwarn, warn):
* lisp/emulation/viper-cmd.el:
(viper-toggle-parse-sexp-ignore-comments)
(viper-kill-buffer, viper-brac-function):
* lisp/emulation/viper-macs.el (viper-record-kbd-macro):
* lisp/facemenu.el (facemenu-add-new-face):
* lisp/faces.el (face-documentation, read-face-name)
(face-read-string, read-face-font, describe-face):
* lisp/files.el (find-alternate-file, hack-local-variables)
(hack-one-local-variable--obsolete, write-file)
(basic-save-buffer, delete-directory):
* lisp/format.el (format-write-file, format-find-file)
(format-insert-file):
* lisp/help-fns.el (help-fns--key-bindings)
(help-fns--compiler-macro, help-fns--obsolete)
(help-fns--interactive-only, describe-function-1)
(describe-variable):
* lisp/help.el (describe-mode):
* lisp/info-xref.el (info-xref-output):
* lisp/info.el (Info-virtual-index-find-node)
(Info-virtual-index, info-apropos):
* lisp/international/kkc.el (kkc-error):
* lisp/international/mule-cmds.el:
(select-safe-coding-system-interactively)
(select-safe-coding-system, describe-input-method):
* lisp/international/mule-conf.el (code-offset):
* lisp/international/mule-diag.el (describe-character-set)
(list-input-methods-1):
* lisp/international/quail.el (quail-error):
* lisp/minibuffer.el (minibuffer-message):
* lisp/mpc.el (mpc--debug):
* lisp/msb.el (msb--choose-menu):
* lisp/net/ange-ftp.el (ange-ftp-message):
* lisp/net/gnutls.el (gnutls-message-maybe):
* lisp/net/newst-backend.el (newsticker--sentinel-work):
* lisp/net/newst-treeview.el (newsticker--treeview-load):
* lisp/net/nsm.el (nsm-query-user):
* lisp/net/rlogin.el (rlogin):
* lisp/net/soap-client.el (soap-warning):
* lisp/net/tramp.el (tramp-debug-message):
* lisp/nxml/nxml-outln.el (nxml-report-outline-error):
* lisp/nxml/nxml-parse.el (nxml-parse-error):
* lisp/nxml/rng-cmpct.el (rng-c-error):
* lisp/nxml/rng-match.el (rng-compile-error):
* lisp/nxml/rng-uri.el (rng-uri-error):
* lisp/obsolete/iswitchb.el (iswitchb-possible-new-buffer):
* lisp/org/org-ctags.el:
(org-ctags-ask-rebuild-tags-file-then-find-tag):
* lisp/proced.el (proced-log):
* lisp/progmodes/ebnf2ps.el (ebnf-log):
* lisp/progmodes/flymake.el (flymake-log):
* lisp/progmodes/vhdl-mode.el (vhdl-warning-when-idle):
* lisp/replace.el (occur-1):
* lisp/simple.el (execute-extended-command)
(undo-outer-limit-truncate, define-alternatives):
* lisp/startup.el (command-line):
* lisp/subr.el (error, user-error, add-to-list):
* lisp/tutorial.el (tutorial--describe-nonstandard-key)
(tutorial--find-changed-keys):
* src/callint.c (Fcall_interactively):
* src/editfns.c (Fmessage, Fmessage_box):
Restyle the quotes of format strings intended for use as a
diagnostic, when restyling seems appropriate.
* lisp/subr.el (format-message): New function.
* src/doc.c (Finternal__text_restyle): New function.
(syms_of_doc): Define it.
2015-08-23 22:38:02 -07:00
|
|
|
(symbol-name def)))
|
Go back to grave quoting in source-code docstrings etc.
This reverts almost all my recent changes to use curved quotes
in docstrings and/or strings used for error diagnostics.
There are a few exceptions, e.g., Bahá’í proper names.
* admin/unidata/unidata-gen.el (unidata-gen-table):
* lisp/abbrev.el (expand-region-abbrevs):
* lisp/align.el (align-region):
* lisp/allout.el (allout-mode, allout-solicit-alternate-bullet)
(outlineify-sticky):
* lisp/apropos.el (apropos-library):
* lisp/bookmark.el (bookmark-default-annotation-text):
* lisp/button.el (button-category-symbol, button-put)
(make-text-button):
* lisp/calc/calc-aent.el (math-read-if, math-read-factor):
* lisp/calc/calc-embed.el (calc-do-embedded):
* lisp/calc/calc-ext.el (calc-user-function-list):
* lisp/calc/calc-graph.el (calc-graph-show-dumb):
* lisp/calc/calc-help.el (calc-describe-key)
(calc-describe-thing, calc-full-help):
* lisp/calc/calc-lang.el (calc-c-language)
(math-parse-fortran-vector-end, math-parse-tex-sum)
(math-parse-eqn-matrix, math-parse-eqn-prime)
(calc-yacas-language, calc-maxima-language, calc-giac-language)
(math-read-giac-subscr, math-read-math-subscr)
(math-read-big-rec, math-read-big-balance):
* lisp/calc/calc-misc.el (calc-help, report-calc-bug):
* lisp/calc/calc-mode.el (calc-auto-why, calc-save-modes)
(calc-auto-recompute):
* lisp/calc/calc-prog.el (calc-fix-token-name)
(calc-read-parse-table-part, calc-user-define-invocation)
(math-do-arg-check):
* lisp/calc/calc-store.el (calc-edit-variable):
* lisp/calc/calc-units.el (math-build-units-table-buffer):
* lisp/calc/calc-vec.el (math-read-brackets):
* lisp/calc/calc-yank.el (calc-edit-mode):
* lisp/calc/calc.el (calc, calc-do, calc-user-invocation):
* lisp/calendar/appt.el (appt-display-message):
* lisp/calendar/diary-lib.el (diary-check-diary-file)
(diary-mail-entries, diary-from-outlook):
* lisp/calendar/icalendar.el (icalendar-export-region)
(icalendar--convert-float-to-ical)
(icalendar--convert-date-to-ical)
(icalendar--convert-ical-to-diary)
(icalendar--convert-recurring-to-diary)
(icalendar--add-diary-entry):
* lisp/calendar/time-date.el (format-seconds):
* lisp/calendar/timeclock.el (timeclock-mode-line-display)
(timeclock-make-hours-explicit, timeclock-log-data):
* lisp/calendar/todo-mode.el (todo-prefix, todo-delete-category)
(todo-item-mark, todo-check-format)
(todo-insert-item--next-param, todo-edit-item--next-key)
(todo-mode):
* lisp/cedet/ede/pmake.el (ede-proj-makefile-insert-dist-rules):
* lisp/cedet/mode-local.el (describe-mode-local-overload)
(mode-local-print-binding, mode-local-describe-bindings-2):
* lisp/cedet/semantic/complete.el (semantic-displayor-show-request):
* lisp/cedet/srecode/srt-mode.el (srecode-macro-help):
* lisp/cus-start.el (standard):
* lisp/cus-theme.el (describe-theme-1):
* lisp/custom.el (custom-add-dependencies, custom-check-theme)
(custom--sort-vars-1, load-theme):
* lisp/descr-text.el (describe-text-properties-1, describe-char):
* lisp/dired-x.el (dired-do-run-mail):
* lisp/dired.el (dired-log):
* lisp/emacs-lisp/advice.el (ad-read-advised-function)
(ad-read-advice-class, ad-read-advice-name, ad-enable-advice)
(ad-disable-advice, ad-remove-advice, ad-set-argument)
(ad-set-arguments, ad--defalias-fset, ad-activate)
(ad-deactivate):
* lisp/emacs-lisp/byte-opt.el (byte-compile-inline-expand)
(byte-compile-unfold-lambda, byte-optimize-form-code-walker)
(byte-optimize-while, byte-optimize-apply):
* lisp/emacs-lisp/byte-run.el (defun, defsubst):
* lisp/emacs-lisp/bytecomp.el (byte-compile-lapcode)
(byte-compile-log-file, byte-compile-format-warn)
(byte-compile-nogroup-warn, byte-compile-arglist-warn)
(byte-compile-cl-warn)
(byte-compile-warn-about-unresolved-functions)
(byte-compile-file, byte-compile--declare-var)
(byte-compile-file-form-defmumble, byte-compile-form)
(byte-compile-normal-call, byte-compile-check-variable)
(byte-compile-variable-ref, byte-compile-variable-set)
(byte-compile-subr-wrong-args, byte-compile-setq-default)
(byte-compile-negation-optimizer)
(byte-compile-condition-case--old)
(byte-compile-condition-case--new, byte-compile-save-excursion)
(byte-compile-defvar, byte-compile-autoload)
(byte-compile-lambda-form)
(byte-compile-make-variable-buffer-local, display-call-tree)
(batch-byte-compile):
* lisp/emacs-lisp/cconv.el (cconv-convert, cconv--analyze-use):
* lisp/emacs-lisp/chart.el (chart-space-usage):
* lisp/emacs-lisp/check-declare.el (check-declare-scan)
(check-declare-warn, check-declare-file)
(check-declare-directory):
* lisp/emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine)
(checkdoc-message-text-engine):
* lisp/emacs-lisp/cl-extra.el (cl-parse-integer)
(cl--describe-class):
* lisp/emacs-lisp/cl-generic.el (cl-defgeneric)
(cl--generic-describe, cl-generic-generalizers):
* lisp/emacs-lisp/cl-macs.el (cl--parse-loop-clause, cl-tagbody)
(cl-symbol-macrolet):
* lisp/emacs-lisp/cl.el (cl-unload-function, flet):
* lisp/emacs-lisp/copyright.el (copyright)
(copyright-update-directory):
* lisp/emacs-lisp/edebug.el (edebug-read-list):
* lisp/emacs-lisp/eieio-base.el (eieio-persistent-read):
* lisp/emacs-lisp/eieio-core.el (eieio--slot-override)
(eieio-oref):
* lisp/emacs-lisp/eieio-opt.el (eieio-help-constructor):
* lisp/emacs-lisp/eieio-speedbar.el:
(eieio-speedbar-child-make-tag-lines)
(eieio-speedbar-child-description):
* lisp/emacs-lisp/eieio.el (defclass, change-class):
* lisp/emacs-lisp/elint.el (elint-file, elint-get-top-forms)
(elint-init-form, elint-check-defalias-form)
(elint-check-let-form):
* lisp/emacs-lisp/ert.el (ert-get-test, ert-results-mode-menu)
(ert-results-pop-to-backtrace-for-test-at-point)
(ert-results-pop-to-messages-for-test-at-point)
(ert-results-pop-to-should-forms-for-test-at-point)
(ert-describe-test):
* lisp/emacs-lisp/find-func.el (find-function-search-for-symbol)
(find-function-library):
* lisp/emacs-lisp/generator.el (iter-yield):
* lisp/emacs-lisp/gv.el (gv-define-simple-setter):
* lisp/emacs-lisp/lisp-mnt.el (lm-verify):
* lisp/emacs-lisp/macroexp.el (macroexp--obsolete-warning):
* lisp/emacs-lisp/map-ynp.el (map-y-or-n-p):
* lisp/emacs-lisp/nadvice.el (advice--make-docstring)
(advice--make, define-advice):
* lisp/emacs-lisp/package-x.el (package-upload-file):
* lisp/emacs-lisp/package.el (package-version-join)
(package-disabled-p, package-activate-1, package-activate)
(package--download-one-archive)
(package--download-and-read-archives)
(package-compute-transaction, package-install-from-archive)
(package-install, package-install-selected-packages)
(package-delete, package-autoremove, describe-package-1)
(package-install-button-action, package-delete-button-action)
(package-menu-hide-package, package-menu--list-to-prompt)
(package-menu--perform-transaction)
(package-menu--find-and-notify-upgrades):
* lisp/emacs-lisp/pcase.el (pcase-exhaustive, pcase--u1):
* lisp/emacs-lisp/re-builder.el (reb-enter-subexp-mode):
* lisp/emacs-lisp/ring.el (ring-previous, ring-next):
* lisp/emacs-lisp/rx.el (rx-check, rx-anything)
(rx-check-any-string, rx-check-any, rx-check-not, rx-=)
(rx-repeat, rx-check-backref, rx-syntax, rx-check-category)
(rx-form):
* lisp/emacs-lisp/smie.el (smie-config-save):
* lisp/emacs-lisp/subr-x.el (internal--check-binding):
* lisp/emacs-lisp/tabulated-list.el (tabulated-list-put-tag):
* lisp/emacs-lisp/testcover.el (testcover-1value):
* lisp/emacs-lisp/timer.el (timer-event-handler):
* lisp/emulation/viper-cmd.el (viper-toggle-parse-sexp-ignore-comments)
(viper-toggle-search-style, viper-kill-buffer)
(viper-brac-function):
* lisp/emulation/viper-macs.el (viper-record-kbd-macro):
* lisp/env.el (setenv):
* lisp/erc/erc-button.el (erc-nick-popup):
* lisp/erc/erc.el (erc-cmd-LOAD, erc-handle-login, english):
* lisp/eshell/em-dirs.el (eshell/cd):
* lisp/eshell/em-glob.el (eshell-glob-regexp)
(eshell-glob-entries):
* lisp/eshell/em-pred.el (eshell-parse-modifiers):
* lisp/eshell/esh-opt.el (eshell-show-usage):
* lisp/facemenu.el (facemenu-add-new-face)
(facemenu-add-new-color):
* lisp/faces.el (read-face-name, read-face-font, describe-face)
(x-resolve-font-name):
* lisp/files-x.el (modify-file-local-variable):
* lisp/files.el (locate-user-emacs-file, find-alternate-file)
(set-auto-mode, hack-one-local-variable--obsolete)
(dir-locals-set-directory-class, write-file, basic-save-buffer)
(delete-directory, copy-directory, recover-session)
(recover-session-finish, insert-directory)
(file-modes-char-to-who, file-modes-symbolic-to-number)
(move-file-to-trash):
* lisp/filesets.el (filesets-add-buffer, filesets-remove-buffer):
* lisp/find-cmd.el (find-generic, find-to-string):
* lisp/finder.el (finder-commentary):
* lisp/font-lock.el (font-lock-fontify-buffer):
* lisp/format.el (format-write-file, format-find-file)
(format-insert-file):
* lisp/frame.el (get-device-terminal, select-frame-by-name):
* lisp/fringe.el (fringe--check-style):
* lisp/gnus/nnmairix.el (nnmairix-widget-create-query):
* 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)
(describe-minor-mode-from-indicator):
* lisp/image.el (image-type):
* lisp/international/ccl.el (ccl-dump):
* lisp/international/fontset.el (x-must-resolve-font-name):
* lisp/international/mule-cmds.el (prefer-coding-system)
(select-safe-coding-system-interactively)
(select-safe-coding-system, activate-input-method)
(toggle-input-method, describe-current-input-method)
(describe-language-environment):
* lisp/international/mule-conf.el (code-offset):
* lisp/international/mule-diag.el (describe-character-set)
(list-input-methods-1):
* lisp/mail/feedmail.el (feedmail-run-the-queue):
* lisp/mouse.el (minor-mode-menu-from-indicator):
* lisp/mpc.el (mpc-playlist-rename):
* lisp/msb.el (msb--choose-menu):
* lisp/net/ange-ftp.el (ange-ftp-shell-command):
* lisp/net/imap.el (imap-interactive-login):
* lisp/net/mairix.el (mairix-widget-create-query):
* lisp/net/newst-backend.el (newsticker--sentinel-work):
* lisp/net/newst-treeview.el (newsticker--treeview-load):
* lisp/net/rlogin.el (rlogin):
* lisp/obsolete/iswitchb.el (iswitchb-possible-new-buffer):
* lisp/obsolete/otodo-mode.el (todo-more-important-p):
* lisp/obsolete/pgg-gpg.el (pgg-gpg-process-region):
* lisp/obsolete/pgg-pgp.el (pgg-pgp-process-region):
* lisp/obsolete/pgg-pgp5.el (pgg-pgp5-process-region):
* lisp/org/ob-core.el (org-babel-goto-named-src-block)
(org-babel-goto-named-result):
* lisp/org/ob-fortran.el (org-babel-fortran-ensure-main-wrap):
* lisp/org/ob-ref.el (org-babel-ref-resolve):
* lisp/org/org-agenda.el (org-agenda-prepare):
* lisp/org/org-clock.el (org-clock-notify-once-if-expired)
(org-clock-resolve):
* lisp/org/org-ctags.el (org-ctags-ask-rebuild-tags-file-then-find-tag):
* lisp/org/org-feed.el (org-feed-parse-atom-entry):
* lisp/org/org-habit.el (org-habit-parse-todo):
* lisp/org/org-mouse.el (org-mouse-popup-global-menu)
(org-mouse-context-menu):
* lisp/org/org-table.el (org-table-edit-formulas):
* lisp/org/ox.el (org-export-async-start):
* lisp/proced.el (proced-log):
* lisp/progmodes/ada-mode.el (ada-get-indent-case)
(ada-check-matching-start, ada-goto-matching-start):
* lisp/progmodes/ada-prj.el (ada-prj-display-page):
* lisp/progmodes/ada-xref.el (ada-find-executable):
* lisp/progmodes/ebrowse.el (ebrowse-tags-apropos):
* lisp/progmodes/etags.el (etags-tags-apropos-additional):
* lisp/progmodes/flymake.el (flymake-parse-err-lines)
(flymake-start-syntax-check-process):
* lisp/progmodes/python.el (python-shell-get-process-or-error)
(python-define-auxiliary-skeleton):
* lisp/progmodes/sql.el (sql-comint):
* lisp/progmodes/verilog-mode.el (verilog-load-file-at-point):
* lisp/progmodes/vhdl-mode.el (vhdl-widget-directory-validate):
* lisp/recentf.el (recentf-open-files):
* lisp/replace.el (query-replace-read-from)
(occur-after-change-function, occur-1):
* lisp/scroll-bar.el (scroll-bar-columns):
* lisp/server.el (server-get-auth-key):
* lisp/simple.el (execute-extended-command)
(undo-outer-limit-truncate, list-processes--refresh)
(compose-mail, set-variable, choose-completion-string)
(define-alternatives):
* lisp/startup.el (site-run-file, tty-handle-args, command-line)
(command-line-1):
* lisp/subr.el (noreturn, define-error, add-to-list)
(read-char-choice, version-to-list):
* lisp/term/common-win.el (x-handle-xrm-switch)
(x-handle-name-switch, x-handle-args):
* lisp/term/x-win.el (x-handle-parent-id, x-handle-smid):
* lisp/textmodes/reftex-ref.el (reftex-label):
* lisp/textmodes/reftex-toc.el (reftex-toc-rename-label):
* lisp/textmodes/two-column.el (2C-split):
* lisp/tutorial.el (tutorial--describe-nonstandard-key)
(tutorial--find-changed-keys):
* lisp/type-break.el (type-break-noninteractive-query):
* lisp/wdired.el (wdired-do-renames, wdired-do-symlink-changes)
(wdired-do-perm-changes):
* lisp/whitespace.el (whitespace-report-region):
Prefer grave quoting in source-code strings used to generate help
and diagnostics.
* lisp/faces.el (face-documentation):
No need to convert quotes, since the result is a docstring.
* lisp/info.el (Info-virtual-index-find-node)
(Info-virtual-index, info-apropos):
Simplify by generating only curved quotes, since info files are
typically that ways nowadays anyway.
* lisp/international/mule-diag.el (list-input-methods):
Don’t assume text quoting style is curved.
* lisp/org/org-bibtex.el (org-bibtex-fields):
Revert my recent changes, going back to the old quoting style.
2015-09-07 08:41:44 -07:00
|
|
|
(format-message "`%s' is an alias for `%s'"
|
More-conservative ‘format’ quote restyling
Instead of restyling curved quotes for every call to ‘format’,
create a new function ‘format-message’ that does the restyling,
and using the new function instead of ‘format’ only in contexts
where this seems appropriate.
Problem reported by Dmitry Gutov and Andreas Schwab in:
http://lists.gnu.org/archive/html/emacs-devel/2015-08/msg00826.html
http://lists.gnu.org/archive/html/emacs-devel/2015-08/msg00827.html
* doc/lispref/commands.texi (Using Interactive):
* doc/lispref/control.texi (Signaling Errors, Signaling Errors):
* doc/lispref/display.texi (Displaying Messages, Progress):
* doc/lispref/elisp.texi:
* doc/lispref/help.texi (Keys in Documentation):
* doc/lispref/minibuf.texi (Minibuffer Misc):
* doc/lispref/strings.texi (Formatting Strings):
* etc/NEWS:
Document the changes.
* lisp/abbrev.el (expand-region-abbrevs):
* lisp/apropos.el (apropos-library):
* lisp/calc/calc-ext.el (calc-record-message)
(calc-user-function-list):
* lisp/calc/calc-help.el (calc-describe-key, calc-full-help):
* lisp/calc/calc-lang.el (math-read-big-balance):
* lisp/calc/calc-store.el (calc-edit-variable):
* lisp/calc/calc-units.el (math-build-units-table-buffer):
* lisp/calc/calc-yank.el (calc-edit-mode):
* lisp/calendar/icalendar.el (icalendar-export-region)
(icalendar--add-diary-entry):
* lisp/cedet/mode-local.el (mode-local-print-binding)
(mode-local-describe-bindings-2):
* lisp/cedet/semantic/complete.el (semantic-completion-message):
* lisp/cedet/semantic/edit.el (semantic-parse-changes-failed):
* lisp/cedet/semantic/wisent/comp.el (wisent-log):
* lisp/cedet/srecode/insert.el (srecode-insert-show-error-report):
* lisp/descr-text.el (describe-text-properties-1, describe-char):
* lisp/dframe.el (dframe-message):
* lisp/dired-aux.el (dired-query):
* lisp/emacs-lisp/byte-opt.el (byte-compile-log-lap-1):
* lisp/emacs-lisp/bytecomp.el (byte-compile-log)
(byte-compile-log-file, byte-compile-warn, byte-compile-form):
* lisp/emacs-lisp/cconv.el (cconv-convert, cconv--analyze-use)
(cconv-analyze-form):
* lisp/emacs-lisp/check-declare.el (check-declare-warn):
* lisp/emacs-lisp/checkdoc.el (checkdoc-this-string-valid-engine):
* lisp/emacs-lisp/cl-macs.el (cl-symbol-macrolet):
* lisp/emacs-lisp/edebug.el (edebug-format):
* lisp/emacs-lisp/eieio-core.el (eieio-oref):
* lisp/emacs-lisp/eldoc.el (eldoc-minibuffer-message)
(eldoc-message):
* lisp/emacs-lisp/elint.el (elint-file, elint-log):
* lisp/emacs-lisp/find-func.el (find-function-library):
* lisp/emacs-lisp/macroexp.el (macroexp--obsolete-warning):
* lisp/emacs-lisp/map-ynp.el (map-y-or-n-p):
* lisp/emacs-lisp/nadvice.el (advice--make-docstring):
* lisp/emacs-lisp/package.el (package-compute-transaction)
(package-install-button-action, package-delete-button-action)
(package-menu--list-to-prompt):
* lisp/emacs-lisp/timer.el (timer-event-handler):
* lisp/emacs-lisp/warnings.el (lwarn, warn):
* lisp/emulation/viper-cmd.el:
(viper-toggle-parse-sexp-ignore-comments)
(viper-kill-buffer, viper-brac-function):
* lisp/emulation/viper-macs.el (viper-record-kbd-macro):
* lisp/facemenu.el (facemenu-add-new-face):
* lisp/faces.el (face-documentation, read-face-name)
(face-read-string, read-face-font, describe-face):
* lisp/files.el (find-alternate-file, hack-local-variables)
(hack-one-local-variable--obsolete, write-file)
(basic-save-buffer, delete-directory):
* lisp/format.el (format-write-file, format-find-file)
(format-insert-file):
* lisp/help-fns.el (help-fns--key-bindings)
(help-fns--compiler-macro, help-fns--obsolete)
(help-fns--interactive-only, describe-function-1)
(describe-variable):
* lisp/help.el (describe-mode):
* lisp/info-xref.el (info-xref-output):
* lisp/info.el (Info-virtual-index-find-node)
(Info-virtual-index, info-apropos):
* lisp/international/kkc.el (kkc-error):
* lisp/international/mule-cmds.el:
(select-safe-coding-system-interactively)
(select-safe-coding-system, describe-input-method):
* lisp/international/mule-conf.el (code-offset):
* lisp/international/mule-diag.el (describe-character-set)
(list-input-methods-1):
* lisp/international/quail.el (quail-error):
* lisp/minibuffer.el (minibuffer-message):
* lisp/mpc.el (mpc--debug):
* lisp/msb.el (msb--choose-menu):
* lisp/net/ange-ftp.el (ange-ftp-message):
* lisp/net/gnutls.el (gnutls-message-maybe):
* lisp/net/newst-backend.el (newsticker--sentinel-work):
* lisp/net/newst-treeview.el (newsticker--treeview-load):
* lisp/net/nsm.el (nsm-query-user):
* lisp/net/rlogin.el (rlogin):
* lisp/net/soap-client.el (soap-warning):
* lisp/net/tramp.el (tramp-debug-message):
* lisp/nxml/nxml-outln.el (nxml-report-outline-error):
* lisp/nxml/nxml-parse.el (nxml-parse-error):
* lisp/nxml/rng-cmpct.el (rng-c-error):
* lisp/nxml/rng-match.el (rng-compile-error):
* lisp/nxml/rng-uri.el (rng-uri-error):
* lisp/obsolete/iswitchb.el (iswitchb-possible-new-buffer):
* lisp/org/org-ctags.el:
(org-ctags-ask-rebuild-tags-file-then-find-tag):
* lisp/proced.el (proced-log):
* lisp/progmodes/ebnf2ps.el (ebnf-log):
* lisp/progmodes/flymake.el (flymake-log):
* lisp/progmodes/vhdl-mode.el (vhdl-warning-when-idle):
* lisp/replace.el (occur-1):
* lisp/simple.el (execute-extended-command)
(undo-outer-limit-truncate, define-alternatives):
* lisp/startup.el (command-line):
* lisp/subr.el (error, user-error, add-to-list):
* lisp/tutorial.el (tutorial--describe-nonstandard-key)
(tutorial--find-changed-keys):
* src/callint.c (Fcall_interactively):
* src/editfns.c (Fmessage, Fmessage_box):
Restyle the quotes of format strings intended for use as a
diagnostic, when restyling seems appropriate.
* lisp/subr.el (format-message): New function.
* src/doc.c (Finternal__text_restyle): New function.
(syms_of_doc): Define it.
2015-08-23 22:38:02 -07:00
|
|
|
function (symbol-name def)))))
|
2015-06-05 01:34:40 +03:00
|
|
|
(setq function (find-function-advised-original function)
|
|
|
|
def (find-function-advised-original function)))
|
2014-12-27 16:06:37 +02:00
|
|
|
(if aliases
|
|
|
|
(message "%s" aliases))
|
2014-12-29 04:21:51 +02:00
|
|
|
(cons function
|
|
|
|
(cond
|
|
|
|
((autoloadp def) (nth 1 def))
|
|
|
|
((subrp def)
|
|
|
|
(if lisp-only
|
|
|
|
(error "%s is a built-in function" function))
|
|
|
|
(help-C-file-name def 'subr))
|
|
|
|
((symbol-file function 'defun))))))
|
2014-12-27 16:06:37 +02:00
|
|
|
|
1998-07-29 23:04:24 +00:00
|
|
|
;;;###autoload
|
2011-08-21 13:43:31 -04:00
|
|
|
(defun find-function-noselect (function &optional lisp-only)
|
1999-01-06 20:03:53 +00:00
|
|
|
"Return a pair (BUFFER . POINT) pointing to the definition of FUNCTION.
|
1997-10-25 13:18:56 +00:00
|
|
|
|
2006-01-21 20:39:30 +00:00
|
|
|
Finds the source file containing the definition of FUNCTION
|
1998-06-29 17:23:25 +00:00
|
|
|
in a buffer and the point of the definition. The buffer is
|
2006-07-12 16:03:47 +00:00
|
|
|
not selected. If the function definition can't be found in
|
|
|
|
the buffer, returns (BUFFER).
|
1997-10-25 13:18:56 +00:00
|
|
|
|
2011-08-21 13:43:31 -04:00
|
|
|
If FUNCTION is a built-in function, this function normally
|
|
|
|
attempts to find it in the Emacs C sources; however, if LISP-ONLY
|
|
|
|
is non-nil, signal an error instead.
|
|
|
|
|
1998-06-29 17:23:25 +00:00
|
|
|
If the file where FUNCTION is defined is not known, then it is
|
2006-11-03 15:09:49 +00:00
|
|
|
searched for in `find-function-source-path' if non-nil, otherwise
|
1998-06-29 17:23:25 +00:00
|
|
|
in `load-path'."
|
1997-10-25 13:18:56 +00:00
|
|
|
(if (not function)
|
2008-11-15 23:36:26 +00:00
|
|
|
(error "You didn't specify a function"))
|
2014-12-29 04:21:51 +02:00
|
|
|
(let ((func-lib (find-function-library function lisp-only t)))
|
|
|
|
(find-function-search-for-symbol (car func-lib) nil (cdr func-lib))))
|
1997-10-25 13:18:56 +00:00
|
|
|
|
2005-01-05 01:08:24 +00:00
|
|
|
(defun find-function-read (&optional type)
|
1998-06-29 17:23:25 +00:00
|
|
|
"Read and return an interned symbol, defaulting to the one near point.
|
1997-10-25 13:18:56 +00:00
|
|
|
|
2005-01-05 01:08:24 +00:00
|
|
|
If TYPE is nil, insist on a symbol with a function definition.
|
|
|
|
Otherwise TYPE should be `defvar' or `defface'.
|
|
|
|
If TYPE is nil, defaults using `function-called-at-point',
|
|
|
|
otherwise uses `variable-at-point'."
|
2011-11-08 16:06:47 +01:00
|
|
|
(let* ((symb1 (cond ((null type) (function-called-at-point))
|
|
|
|
((eq type 'defvar) (variable-at-point))
|
|
|
|
(t (variable-at-point t))))
|
|
|
|
(symb (unless (eq symb1 0) symb1))
|
|
|
|
(predicate (cdr (assq type '((nil . fboundp)
|
|
|
|
(defvar . boundp)
|
|
|
|
(defface . facep)))))
|
|
|
|
(prompt-type (cdr (assq type '((nil . "function")
|
|
|
|
(defvar . "variable")
|
|
|
|
(defface . "face")))))
|
|
|
|
(prompt (concat "Find " prompt-type
|
|
|
|
(and symb (format " (default %s)" symb))
|
|
|
|
": "))
|
|
|
|
(enable-recursive-minibuffers t))
|
|
|
|
(list (intern (completing-read
|
|
|
|
prompt obarray predicate
|
|
|
|
t nil nil (and symb (symbol-name symb)))))))
|
1997-10-25 13:18:56 +00:00
|
|
|
|
2005-01-05 01:08:24 +00:00
|
|
|
(defun find-function-do-it (symbol type switch-fn)
|
1999-01-06 20:03:53 +00:00
|
|
|
"Find Emacs Lisp SYMBOL in a buffer and display it.
|
2005-01-05 01:08:24 +00:00
|
|
|
TYPE is nil to search for a function definition,
|
|
|
|
or else `defvar' or `defface'.
|
|
|
|
|
|
|
|
The variable `find-function-recenter-line' controls how
|
|
|
|
to recenter the display. SWITCH-FN is the function to call
|
|
|
|
to display and select the buffer.
|
|
|
|
See also `find-function-after-hook'.
|
1998-06-29 17:23:25 +00:00
|
|
|
|
2005-01-05 01:08:24 +00:00
|
|
|
Set mark before moving, if the buffer already existed."
|
1998-07-14 23:42:21 +00:00
|
|
|
(let* ((orig-point (point))
|
1998-06-29 17:23:25 +00:00
|
|
|
(orig-buffers (buffer-list))
|
1998-07-14 23:42:21 +00:00
|
|
|
(buffer-point (save-excursion
|
2005-01-05 01:08:24 +00:00
|
|
|
(find-definition-noselect symbol type)))
|
1998-07-14 23:42:21 +00:00
|
|
|
(new-buf (car buffer-point))
|
|
|
|
(new-point (cdr buffer-point)))
|
1998-06-29 17:23:25 +00:00
|
|
|
(when buffer-point
|
1998-07-14 23:42:21 +00:00
|
|
|
(when (memq new-buf orig-buffers)
|
1998-06-29 17:23:25 +00:00
|
|
|
(push-mark orig-point))
|
1998-07-14 23:42:21 +00:00
|
|
|
(funcall switch-fn new-buf)
|
2006-07-12 16:03:47 +00:00
|
|
|
(when new-point (goto-char new-point))
|
1998-06-29 17:23:25 +00:00
|
|
|
(recenter find-function-recenter-line)
|
2000-11-03 22:40:21 +00:00
|
|
|
(run-hooks 'find-function-after-hook))))
|
1997-10-25 13:18:56 +00:00
|
|
|
|
1997-10-25 13:32:06 +00:00
|
|
|
;;;###autoload
|
1998-06-29 17:23:25 +00:00
|
|
|
(defun find-function (function)
|
1999-01-07 19:24:50 +00:00
|
|
|
"Find the definition of the FUNCTION near point.
|
1997-10-25 13:18:56 +00:00
|
|
|
|
2006-01-21 20:39:30 +00:00
|
|
|
Finds the source file containing the definition of the function
|
2005-01-05 19:31:57 +00:00
|
|
|
near point (selected by `function-called-at-point') in a buffer and
|
2005-01-05 01:08:24 +00:00
|
|
|
places point before the definition.
|
|
|
|
Set mark before moving, if the buffer already existed.
|
1997-10-25 13:18:56 +00:00
|
|
|
|
1998-06-29 17:23:25 +00:00
|
|
|
The library where FUNCTION is defined is searched for in
|
2006-11-03 15:09:49 +00:00
|
|
|
`find-function-source-path', if non-nil, otherwise in `load-path'.
|
1998-06-29 17:23:25 +00:00
|
|
|
See also `find-function-recenter-line' and `find-function-after-hook'."
|
|
|
|
(interactive (find-function-read))
|
|
|
|
(find-function-do-it function nil 'switch-to-buffer))
|
1997-10-25 13:18:56 +00:00
|
|
|
|
1997-10-25 13:32:06 +00:00
|
|
|
;;;###autoload
|
1998-06-29 17:23:25 +00:00
|
|
|
(defun find-function-other-window (function)
|
1999-01-07 19:24:50 +00:00
|
|
|
"Find, in another window, the definition of FUNCTION near point.
|
1997-10-25 13:18:56 +00:00
|
|
|
|
1998-06-29 17:23:25 +00:00
|
|
|
See `find-function' for more details."
|
|
|
|
(interactive (find-function-read))
|
|
|
|
(find-function-do-it function nil 'switch-to-buffer-other-window))
|
1997-10-25 13:18:56 +00:00
|
|
|
|
1997-10-25 13:32:06 +00:00
|
|
|
;;;###autoload
|
1998-06-29 17:23:25 +00:00
|
|
|
(defun find-function-other-frame (function)
|
2006-01-21 20:39:30 +00:00
|
|
|
"Find, in another frame, the definition of FUNCTION near point.
|
1997-10-25 13:18:56 +00:00
|
|
|
|
1998-06-29 17:23:25 +00:00
|
|
|
See `find-function' for more details."
|
|
|
|
(interactive (find-function-read))
|
|
|
|
(find-function-do-it function nil 'switch-to-buffer-other-frame))
|
|
|
|
|
1998-11-07 02:05:38 +00:00
|
|
|
;;;###autoload
|
2001-10-30 04:51:55 +00:00
|
|
|
(defun find-variable-noselect (variable &optional file)
|
2006-01-21 20:39:30 +00:00
|
|
|
"Return a pair `(BUFFER . POINT)' pointing to the definition of VARIABLE.
|
1998-06-29 17:23:25 +00:00
|
|
|
|
2006-01-21 20:39:30 +00:00
|
|
|
Finds the library containing the definition of VARIABLE in a buffer and
|
|
|
|
the point of the definition. The buffer is not selected.
|
2006-07-12 16:03:47 +00:00
|
|
|
If the variable's definition can't be found in the buffer, return (BUFFER).
|
1998-06-29 17:23:25 +00:00
|
|
|
|
2001-10-30 04:51:55 +00:00
|
|
|
The library where VARIABLE is defined is searched for in FILE or
|
2006-11-03 15:09:49 +00:00
|
|
|
`find-function-source-path', if non-nil, otherwise in `load-path'."
|
1998-06-29 17:23:25 +00:00
|
|
|
(if (not variable)
|
2006-01-21 20:39:30 +00:00
|
|
|
(error "You didn't specify a variable")
|
|
|
|
(let ((library (or file
|
|
|
|
(symbol-file variable 'defvar)
|
|
|
|
(help-C-file-name variable 'var))))
|
|
|
|
(find-function-search-for-symbol variable 'defvar library))))
|
1998-06-29 17:23:25 +00:00
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defun find-variable (variable)
|
2006-12-09 12:57:03 +00:00
|
|
|
"Find the definition of the VARIABLE at or before point.
|
1998-06-29 17:23:25 +00:00
|
|
|
|
2006-01-21 20:39:30 +00:00
|
|
|
Finds the library containing the definition of the variable
|
1998-06-29 17:23:25 +00:00
|
|
|
near point (selected by `variable-at-point') in a buffer and
|
2005-01-05 01:08:24 +00:00
|
|
|
places point before the definition.
|
|
|
|
|
|
|
|
Set mark before moving, if the buffer already existed.
|
1998-06-29 17:23:25 +00:00
|
|
|
|
|
|
|
The library where VARIABLE is defined is searched for in
|
2006-11-03 15:09:49 +00:00
|
|
|
`find-function-source-path', if non-nil, otherwise in `load-path'.
|
1998-06-29 17:23:25 +00:00
|
|
|
See also `find-function-recenter-line' and `find-function-after-hook'."
|
2005-01-05 19:31:57 +00:00
|
|
|
(interactive (find-function-read 'defvar))
|
|
|
|
(find-function-do-it variable 'defvar 'switch-to-buffer))
|
1997-10-25 13:18:56 +00:00
|
|
|
|
1998-06-29 17:23:25 +00:00
|
|
|
;;;###autoload
|
|
|
|
(defun find-variable-other-window (variable)
|
1999-01-07 19:24:50 +00:00
|
|
|
"Find, in another window, the definition of VARIABLE near point.
|
1998-06-29 17:23:25 +00:00
|
|
|
|
|
|
|
See `find-variable' for more details."
|
2005-01-05 19:31:57 +00:00
|
|
|
(interactive (find-function-read 'defvar))
|
|
|
|
(find-function-do-it variable 'defvar 'switch-to-buffer-other-window))
|
1998-06-29 17:23:25 +00:00
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defun find-variable-other-frame (variable)
|
2006-01-21 20:39:30 +00:00
|
|
|
"Find, in another frame, the definition of VARIABLE near point.
|
1998-06-29 17:23:25 +00:00
|
|
|
|
|
|
|
See `find-variable' for more details."
|
2005-01-05 19:31:57 +00:00
|
|
|
(interactive (find-function-read 'defvar))
|
|
|
|
(find-function-do-it variable 'defvar 'switch-to-buffer-other-frame))
|
1997-10-25 13:18:56 +00:00
|
|
|
|
2005-01-05 01:08:24 +00:00
|
|
|
;;;###autoload
|
|
|
|
(defun find-definition-noselect (symbol type &optional file)
|
|
|
|
"Return a pair `(BUFFER . POINT)' pointing to the definition of SYMBOL.
|
2006-07-12 16:03:47 +00:00
|
|
|
If the definition can't be found in the buffer, return (BUFFER).
|
2006-01-21 20:39:30 +00:00
|
|
|
TYPE says what type of definition: nil for a function, `defvar' for a
|
2006-02-05 05:58:26 +00:00
|
|
|
variable, `defface' for a face. This function does not switch to the
|
2006-01-21 20:39:30 +00:00
|
|
|
buffer nor display it.
|
2005-01-05 01:08:24 +00:00
|
|
|
|
|
|
|
The library where SYMBOL is defined is searched for in FILE or
|
2006-11-03 15:09:49 +00:00
|
|
|
`find-function-source-path', if non-nil, otherwise in `load-path'."
|
2006-01-21 20:39:30 +00:00
|
|
|
(cond
|
|
|
|
((not symbol)
|
|
|
|
(error "You didn't specify a symbol"))
|
|
|
|
((null type)
|
|
|
|
(find-function-noselect symbol))
|
|
|
|
((eq type 'defvar)
|
|
|
|
(find-variable-noselect symbol file))
|
|
|
|
(t
|
2005-01-05 01:08:24 +00:00
|
|
|
(let ((library (or file (symbol-file symbol type))))
|
2006-01-21 20:39:30 +00:00
|
|
|
(find-function-search-for-symbol symbol type library)))))
|
2005-01-05 01:08:24 +00:00
|
|
|
|
2005-01-07 02:52:29 +00:00
|
|
|
;; For symmetry, this should be called find-face; but some programs
|
|
|
|
;; assume that, if that name is defined, it means something else.
|
2005-01-05 01:08:24 +00:00
|
|
|
;;;###autoload
|
2005-01-07 02:52:29 +00:00
|
|
|
(defun find-face-definition (face)
|
2005-01-05 01:08:24 +00:00
|
|
|
"Find the definition of FACE. FACE defaults to the name near point.
|
|
|
|
|
|
|
|
Finds the Emacs Lisp library containing the definition of the face
|
|
|
|
near point (selected by `variable-at-point') in a buffer and
|
|
|
|
places point before the definition.
|
|
|
|
|
|
|
|
Set mark before moving, if the buffer already existed.
|
|
|
|
|
|
|
|
The library where FACE is defined is searched for in
|
2006-11-03 15:09:49 +00:00
|
|
|
`find-function-source-path', if non-nil, otherwise in `load-path'.
|
2005-01-05 01:08:24 +00:00
|
|
|
See also `find-function-recenter-line' and `find-function-after-hook'."
|
|
|
|
(interactive (find-function-read 'defface))
|
|
|
|
(find-function-do-it face 'defface 'switch-to-buffer))
|
|
|
|
|
2015-06-22 03:23:38 +03:00
|
|
|
(defun find-function-on-key-do-it (key find-fn)
|
1997-10-25 13:18:56 +00:00
|
|
|
"Find the function that KEY invokes. KEY is a string.
|
2015-06-22 03:23:38 +03:00
|
|
|
Set mark before moving, if the buffer already existed.
|
|
|
|
|
|
|
|
FIND-FN is the function to call to navigate to the function."
|
2003-05-19 14:47:46 +00:00
|
|
|
(let (defn)
|
|
|
|
(save-excursion
|
|
|
|
(let* ((event (and (eventp key) (aref key 0))) ; Null event OK below.
|
|
|
|
(start (event-start event))
|
|
|
|
(modifiers (event-modifiers event))
|
|
|
|
(window (and (or (memq 'click modifiers) (memq 'down modifiers)
|
|
|
|
(memq 'drag modifiers))
|
|
|
|
(posn-window start))))
|
|
|
|
;; For a mouse button event, go to the button it applies to
|
|
|
|
;; to get the right key bindings. And go to the right place
|
|
|
|
;; in case the keymap depends on where you clicked.
|
|
|
|
(when (windowp window)
|
|
|
|
(set-buffer (window-buffer window))
|
|
|
|
(goto-char (posn-point start)))
|
|
|
|
(setq defn (key-binding key))))
|
|
|
|
(let ((key-desc (key-description key)))
|
|
|
|
(if (or (null defn) (integerp defn))
|
|
|
|
(message "%s is unbound" key-desc)
|
|
|
|
(if (consp defn)
|
|
|
|
(message "%s runs %s" key-desc (prin1-to-string defn))
|
2015-06-22 03:23:38 +03:00
|
|
|
(funcall find-fn defn))))))
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defun find-function-on-key (key)
|
|
|
|
"Find the function that KEY invokes. KEY is a string.
|
|
|
|
Set mark before moving, if the buffer already existed."
|
|
|
|
(interactive "kFind function on key: ")
|
|
|
|
(find-function-on-key-do-it key #'find-function))
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defun find-function-on-key-other-window (key)
|
|
|
|
"Find, in the other window, the function that KEY invokes.
|
|
|
|
See `find-function-on-key'."
|
|
|
|
(interactive "kFind function on key: ")
|
|
|
|
(find-function-on-key-do-it key #'find-function-other-window))
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defun find-function-on-key-other-frame (key)
|
|
|
|
"Find, in the other frame, the function that KEY invokes.
|
|
|
|
See `find-function-on-key'."
|
|
|
|
(interactive "kFind function on key: ")
|
|
|
|
(find-function-on-key-do-it key #'find-function-other-frame))
|
1998-06-29 17:23:25 +00:00
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defun find-function-at-point ()
|
|
|
|
"Find directly the function at point in the other window."
|
|
|
|
(interactive)
|
2005-01-05 19:31:57 +00:00
|
|
|
(let ((symb (function-called-at-point)))
|
1998-06-29 17:23:25 +00:00
|
|
|
(when symb
|
|
|
|
(find-function-other-window symb))))
|
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defun find-variable-at-point ()
|
2006-01-21 20:39:30 +00:00
|
|
|
"Find directly the variable at point in the other window."
|
1998-06-29 17:23:25 +00:00
|
|
|
(interactive)
|
|
|
|
(let ((symb (variable-at-point)))
|
|
|
|
(when (and symb (not (equal symb 0)))
|
|
|
|
(find-variable-other-window symb))))
|
1997-10-25 13:18:56 +00:00
|
|
|
|
1998-07-14 23:42:21 +00:00
|
|
|
;;;###autoload
|
|
|
|
(defun find-function-setup-keys ()
|
|
|
|
"Define some key bindings for the find-function family of functions."
|
|
|
|
(define-key ctl-x-map "F" 'find-function)
|
|
|
|
(define-key ctl-x-4-map "F" 'find-function-other-window)
|
|
|
|
(define-key ctl-x-5-map "F" 'find-function-other-frame)
|
|
|
|
(define-key ctl-x-map "K" 'find-function-on-key)
|
2015-06-22 03:23:38 +03:00
|
|
|
(define-key ctl-x-4-map "K" 'find-function-on-key-other-window)
|
|
|
|
(define-key ctl-x-5-map "K" 'find-function-on-key-other-frame)
|
1998-07-14 23:42:21 +00:00
|
|
|
(define-key ctl-x-map "V" 'find-variable)
|
|
|
|
(define-key ctl-x-4-map "V" 'find-variable-other-window)
|
|
|
|
(define-key ctl-x-5-map "V" 'find-variable-other-frame))
|
|
|
|
|
1997-10-25 13:18:56 +00:00
|
|
|
(provide 'find-func)
|
|
|
|
|
|
|
|
;;; find-func.el ends here
|