Subject: PATCH: ambiguous help doc strings

From: "Aaron S. Hawley" <[email-masked]>
Date: Fri, 19 Oct 2012 16:58:06 -0400

I came across a few cross references in doc strings that were for
variables or functions that when followed the *Help* buffer shows the
documentation for both.  This is acceptable for some symbols, but less
for others.  The following patch fixes about 70 or more.  I wrote some
`mapatoms' code that tried to find all such ambiguous help
cross-references to help me track these down.  The alternative is
running M-x checkdoc interactively for every single Lisp file in
Emacs.

(defun ash-ambiguous-help-xrefs ()
  "List of doc strings with imprecise cross-references."
  (interactive)
  (with-help-window (help-buffer)
    (with-current-buffer (help-buffer)
      (help-setup-xref '(ash-ambiguous-help-xrefs)
                         (called-interactively-p 'interactive))
      (let (dups bugs re)
        (mapatoms
         (lambda (s)
           (when (and ;; (and (fboundp s) (boundp s))
                  (< 1 (+ (if (fboundp s) 1 0)
                          (if (boundp s) 1 0)
                          (if (facep s) 0 0))) ;; Who cares.
                  (not ;; (aliasp s)
                   (and (fboundp s) (symbolp (symbol-function s))))
                  ;; The ambiguity is intentional for these,
                  ;; or at least it's acceptable.
                  (null (memq s '(function
                                  buffer-file-name
                                  system-name
                                  window-system
                                  custom-file
                                  user-login-name
                                  sentence-end
                                  keyboard-coding-system))))
             (setq dups (cons s dups)))))
        (setq re (concat (regexp-opt '("variable" "option" "function"
                                       "command" "face") t)
                         "?[ \t\n]*\\(?:of\\|for\\)?[ \t\n]*"
                         "`" (regexp-opt (mapcar 'symbol-name dups) t) "'"))
        (mapatoms
         (lambda (s)
           (mapcar
            (lambda (type)
              (let ((i 0) (d (if (eq type 'function-documentation)
                                 (documentation s)
                               (documentation-property s type))))
                (while (and (stringp d) (string-match re d i)
                            (not (string= (match-string 2 d)
                                          (symbol-name s)))
                            (null (match-string 1 d)))
                  (let ((xref (intern (match-string 2 d))))
                    (when (null (member (cons s xref) bugs))
                      (setq bugs (cons (cons s xref) bugs))))
                  (setq i (match-end 0)))))
            (let (types)
              (when (and (fboundp s) (functionp s))
                (setq types (cons 'function-documentation types)))
              (when (boundp s)
                (setq types (cons 'variable-documentation types)))
              (when (facep s)
                (setq types (cons 'face-documentation types)))
              types))))
        (insert (documentation 'ash-ambiguous-help-xrefs))
        (newline 2) ;; `help-make-xrefs' does `forward-paragraph'
        (dolist (b bugs)
          (insert (format "`%s' alludes to %s" (car b) (cdr b)))
          (newline))))))

In order to check all the doc strings in Emacs, all the libraries in
Emacs need to be loaded.  Unfortunately, Emacs crashes or becomes
unusable when doing this.  Some libraries need to be skipped.  This
could be because a library is loaded more than once since I use
`load-library' rather than `require'.

(defvar ash-skip-libs
  '("loadup" "eudcb-bbdb" "eudc-export" "blessmail" "characters"
    "gnus-vm" ".dir-locals" "edt-mapper" "iso-swed"))

(defun ash-load-everything ()
  "Load all libraries in the load-path and likely kill Emacs.

Loading everything with a beating pulse and most certainly nuke
the current session.  Prepare to die."
  (interactive)
  (let ((libs nil))
    (mapc
     (lambda (s)
       (when (string-match "\\.elc?\\'" s)
         (add-to-list 'libs
                      (replace-match "" t t s)
                      (not 'append) 'string-equal)))
     (locate-file-completion-table
      load-path '("\\.elc\\'" "\\.el\\'") ""
      (lambda (s) (string-match "\\.elc?\\'" s)) t))
    (dolist (skip-lib ash-skip-libs)
      (delete skip-lib libs))
    (dolist (lib libs)
      (load-library lib))))

There was a cross-reference to `top-level' which shouldn't have been.
I also suggest Help Mode use "call" as a hint for a cross-reference to
a function -- only "function" and "command" do now.

The patch is against the sources of 24.2.

Thanks for Emacs,
/a

--- lisp/ChangeLog~	2012-08-24 05:50:49.000000000 -0400
+++ lisp/ChangeLog	2012-10-19 09:40:24.886464600 -0400
@@ -1,0 +1,76 @@
+2012-10-18  Aaron S. Hawley  <[email-masked]>
+
+        * calc/calc.el (calc-highlight-selections-with-faces): Fix doc
+        string cross-reference(s).
+
+        * comint.el (calc-dispatch): Fix doc string cross-reference(s).
+
+        * emacs-lisp/edebug.el (comint-history-isearch-message): Fix doc
+        string cross-reference(s).
+
+        * ffap.el (edebug-eval-defun): Fix doc string cross-reference(s).
+
+        * font-lock.el (ffap-literally): Fix doc string
+        cross-reference(s).
+
+        * help-mode.el (help-xref-symbol-regexp): Add "call" a hint for a
+        cross-reference to a function.
+
+        * info.el (help-xref-symbol-regexp): Fix doc string
+        cross-reference(s).
+
+        * international/mule.el (Info-find-emacs-command-nodes): Fix doc
+        string cross-reference(s).
+
+        * isearch.el (add-to-coding-system-list): Fix doc string
+        cross-reference(s).
+
+        * misearch.el (isearch-fail-pos): Fix doc string
+        cross-reference(s).
+
+        * newcomment.el (multi-isearch-next-buffer-function): Fix doc
+        string cross-reference(s).
+
+        * printing.el (comment-box): Fix doc string cross-reference(s).
+
+        * progmodes/cc-fonts.el (pr-setting-database): Fix doc string
+        cross-reference(s).
+
+        * progmodes/compile.el (pike-font-lock-keywords): Fix doc string
+        cross-reference(s).
+
+        * progmodes/etags.el (compile): Fix doc string cross-reference(s).
+
+        * progmodes/gdb-mi.el (initialize-new-tags-table): Fix doc string
+        cross-reference(s).
+
+        * progmodes/etags.el (initialize-new-tags-table): Fix doc string
+        cross-reference(s).
+
+        * progmodes/gdb-mi.el (initialize-new-tags-table): Fix doc string
+        cross-reference(s).
+
+        * ps-print.el (gdb-restore-windows): Fix doc string
+        cross-reference(s).
+
+        * server.el (ps-n-up-filling-database): Fix doc string
+        cross-reference(s).
+
+        * simple.el (server-log): Fix doc string cross-reference(s).
+
+        * textmodes/flyspell.el (auto-fill-mode): Fix doc string
+        cross-reference(s).
+
+        * textmodes/ispell.el (ispell-accept-output): Fix doc string
+        cross-reference(s).
+
+        * textmodes/sgml-mode.el (ispell-accept-output): Fix doc string
+        cross-reference(s).
+
+        * vc/compare-w.el (html-mode): Fix doc string cross-reference(s).
+
+        * vc/diff.el (compare-windows-dehighlight): Fix doc string
+        cross-reference(s).
+
+        * whitespace.el (diff): Fix doc string cross-reference(s).
+
--- lisp/gnus/ChangeLog~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/gnus/ChangeLog	2012-10-19 09:31:04.620338700 -0400
@@ -1,0 +1,8 @@
+2012-10-18  Aaron S. Hawley  <[email-masked]>
+
+        * gnus-start.el (font-lock-removed-keywords-alist): Fix doc string
+        cross-reference(s).
+
+        * gnus-sum.el (gnus-check-new-newsgroups): Fix doc string
+        cross-reference(s).
+
--- src/ChangeLog~	2012-08-24 05:52:21.000000000 -0400
+++ src/ChangeLog	2012-10-19 09:31:04.291305800 -0400
@@ -1,0 +1,10 @@
+2012-10-18  Aaron S. Hawley  <[email-masked]>
+
+        * insdel.c (Fself_insert_command): Fix doc string
+        cross-reference(s).
+
+        * keyboard.c (syms_of_insdel): Fix doc string cross-reference(s).
+
+        * window.c (syms_of_keyboard, Fwindow_point): Fix doc string
+        cross-reference(s).
+
--- lisp/calc/calc.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/calc/calc.el	2012-10-18 09:54:23.359782600 -0400
@@ -427,9 +427,9 @@
 (defcustom calc-highlight-selections-with-faces
   nil
   "If non-nil, use a separate face to indicate selected sub-formulas.
-If `calc-show-selections' is non-nil, then selected sub-formulas are shown
+If variable `calc-show-selections' is non-nil, then selected
sub-formulas are shown
 by displaying the rest of the formula in `calc-nonselected-face'.
-If `calc-show-selections' is nil, then selected sub-formulas are shown
+If option `calc-show-selections' is nil, then selected sub-formulas are shown
 by displaying the sub-formula in `calc-selected-face'."
   :version "24.1"
   :group 'calc
@@ -1200,7 +1200,7 @@

 ;;;###autoload
 (defun calc-dispatch (&optional arg)
-  "Invoke the GNU Emacs Calculator.  See `calc-dispatch-help' for details."
+  "Invoke the GNU Emacs Calculator.  See function
`calc-dispatch-help' for details."
   (interactive "P")
 ;  (sit-for echo-keystrokes)
   (condition-case err   ; look for other keys bound to calc-dispatch
--- lisp/comint.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/comint.el	2012-10-18 09:54:23.618808500 -0400
@@ -1529,7 +1529,7 @@
 If there are no search errors, this function displays an overlay with
 the Isearch prompt which replaces the original comint prompt.
 Otherwise, it displays the standard Isearch message returned from
-`isearch-message'."
+the function `isearch-message'."
   (if (not (and isearch-success (not isearch-error)))
       ;; Use standard function `isearch-message' when not in comint prompt,
       ;; or search fails, or has an error (like incomplete regexp).
--- lisp/emacs-lisp/edebug.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/emacs-lisp/edebug.el	2012-10-18 09:54:23.772823900 -0400
@@ -471,8 +471,8 @@

 This version, from Edebug, maybe instruments the expression.  But the
 STREAM must be the current buffer to do so.  Whether it instruments is
-also dependent on the values of `edebug-all-defs' and
-`edebug-all-forms'."
+also dependent on the values of the option `edebug-all-defs' and
+the option `edebug-all-forms'."
   (or stream (setq stream standard-input))
   (if (eq stream (current-buffer))
       (edebug-read-and-maybe-wrap-form)
@@ -494,7 +494,7 @@

 With a prefix argument, instrument the code for Edebug.

-Setting `edebug-all-defs' to a non-nil value reverses the meaning of
+Setting option `edebug-all-defs' to a non-nil value reverses the meaning of
 the prefix argument.  Code is then instrumented when this function is
 invoked without a prefix argument

--- lisp/ffap.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/ffap.el	2012-10-18 09:54:23.843831000 -0400
@@ -309,7 +309,7 @@
   "Last value returned by `ffap-next-guess'.")

 (defvar ffap-string-at-point-region '(1 1)
-  "List (BEG END), last region returned by `ffap-string-at-point'.")
+  "List (BEG END), last region returned by the function
`ffap-string-at-point'.")

 (defun ffap-next-guess (&optional back lim)
   "Move point to next file or URL, and return it as a string.
@@ -334,7 +334,7 @@
 Optional argument WRAP says to try wrapping around if necessary.
 Interactively: use a single prefix to search backwards,
 double prefix to wrap forward, triple to wrap backwards.
-Actual search is done by `ffap-next-guess'."
+Actual search is done by the function `ffap-next-guess'."
   (interactive
    (cdr (assq (prefix-numeric-value current-prefix-arg)
 	      '((1) (4 t) (16 nil t) (64 t t)))))
@@ -1004,14 +1004,14 @@
   "Alist of \(MODE CHARS BEG END\), where MODE is a symbol,
 possibly a major-mode name, or one of the symbol
 `file', `url', `machine', and `nocolon'.
-`ffap-string-at-point' uses the data fields as follows:
+Function `ffap-string-at-point' uses the data fields as follows:
 1. find a maximal string of CHARS around point,
 2. strip BEG chars before point from the beginning,
 3. Strip END chars after point from the end.")

 (defvar ffap-string-at-point nil
   ;; Added at suggestion of RHOGEE (for ff-paths), 7/24/95.
-  "Last string returned by `ffap-string-at-point'.")
+  "Last string returned by the function `ffap-string-at-point'.")

 (defun ffap-string-at-point (&optional mode)
   "Return a string of characters from around point.
@@ -1019,7 +1019,7 @@
 syntax parameters in `ffap-string-at-point-mode-alist'.
 If MODE is not found, we use `file' instead of MODE.
 If the region is active, return a string from the region.
-Sets `ffap-string-at-point' and `ffap-string-at-point-region'."
+Sets variable `ffap-string-at-point' and variable
`ffap-string-at-point-region'."
   (let* ((args
 	  (cdr
 	   (or (assq (or mode major-mode) ffap-string-at-point-mode-alist)
@@ -1044,7 +1044,7 @@

 (defun ffap-string-around ()
   ;; Sometimes useful to decide how to treat a string.
-  "Return string of two chars around last `ffap-string-at-point'.
+  "Return string of two chars for last result of function
`ffap-string-at-point'.
 Assumes the buffer has not changed."
   (save-excursion
     (format "%c%c"
@@ -1058,7 +1058,7 @@

 (defun ffap-copy-string-as-kill (&optional mode)
   ;; Requested by MCOOK.  Useful?
-  "Call `ffap-string-at-point', and copy result to `kill-ring'."
+  "Call function `ffap-string-at-point', and copy result to `kill-ring'."
   (interactive)
   (let ((str (ffap-string-at-point mode)))
     (if (equal "" str)
@@ -1369,7 +1369,7 @@
   :version "22.1")

 (defvar ffap-highlight-overlay nil
-  "Overlay used by `ffap-highlight'.")
+  "Overlay used by function `ffap-highlight'.")

 (defun ffap-highlight (&optional remove)
   "If `ffap-highlight' is set, highlight the guess in this buffer.
@@ -1732,7 +1732,7 @@
     (call-interactively 'ffap)))

 (defun ffap-literally ()
-  "Like `ffap' and `find-file-literally'.
+  "Like `ffap' and command `find-file-literally'.
 Only intended for interactive use."
   (interactive)
   (let ((ffap-file-finder 'find-file-literally))
--- lisp/font-lock.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/font-lock.el	2012-10-18 09:54:23.943841000 -0400
@@ -469,7 +469,7 @@
   "Alist of additional `font-lock-keywords' elements for major modes.

 Each element has the form (MODE KEYWORDS . HOW).
-`font-lock-set-defaults' adds the elements in the list KEYWORDS to
+Function `font-lock-set-defaults' adds the elements in the list KEYWORDS to
 `font-lock-keywords' when Font Lock is turned on in major mode MODE.

 If HOW is nil, KEYWORDS are added at the beginning of
@@ -484,7 +484,7 @@
 (defvar font-lock-removed-keywords-alist nil
   "Alist of `font-lock-keywords' elements to be removed for major modes.

-Each element has the form (MODE . KEYWORDS).  `font-lock-set-defaults'
+Each element has the form (MODE . KEYWORDS).  Function `font-lock-set-defaults'
 removes the elements in the list KEYWORDS from `font-lock-keywords'
 when Font Lock is turned on in major mode MODE.

--- lisp/gnus/gnus-start.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/gnus/gnus-start.el	2012-10-18 09:54:24.043851000 -0400
@@ -110,7 +110,7 @@
 groups since the last time it checked:
   1. This variable is `ask-server'.
   2. This variable is a list of select methods (see below).
-  3. `gnus-read-active-file' is nil or `some'.
+  3. Option `gnus-read-active-file' is nil or `some'.
   4. A prefix argument is given to `gnus-find-new-newsgroups' interactively.

 Thus, if this variable is `ask-server' or a list of select methods or
--- lisp/gnus/gnus-sum.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/gnus/gnus-sum.el	2012-10-18 09:54:24.888935500 -0400
@@ -1166,7 +1166,7 @@

 (defcustom gnus-summary-newsgroup-prefix "=> "
   "*String prefixed to the Newsgroup field in the summary
-line when using `gnus-ignored-from-addresses'."
+line when using the option `gnus-ignored-from-addresses'."
   :version "22.1"
   :group 'gnus-summary
   :type 'string)
--- lisp/help-mode.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/help-mode.el	2012-10-18 09:54:25.084955100 -0400
@@ -311,7 +311,7 @@

 (defconst help-xref-symbol-regexp
   (purecopy (concat "\\(\\<\\(\\(variable\\|option\\)\\|"  ; Link to var
- 		    "\\(function\\|command\\)\\|"          ; Link to function
+ 		    "\\(function\\|command\\|call\\)\\|"   ; Link to function
  		    "\\(face\\)\\|"			   ; Link to face
  		    "\\(symbol\\|program\\|property\\)\\|" ; Don't link
 		    "\\(source \\(?:code \\)?\\(?:of\\|for\\)\\)\\)"
--- lisp/info.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/info.el	2012-10-18 09:54:25.130959700 -0400
@@ -4143,7 +4143,7 @@
 The `info-file' property of COMMAND says which Info manual to search.
 If COMMAND has no property, the variable `Info-file-list-for-emacs'
 defines heuristics for which Info manual to try.
-The locations are of the format used in `Info-history', i.e.
+The locations are of the format used in the variable `Info-history', i.e.
 \(FILENAME NODENAME BUFFERPOS), where BUFFERPOS is the line number
 in the first element of the returned list (which is treated specially in
 `Info-goto-emacs-command-node'), and 0 for the rest elements of a list."
--- lisp/international/mule.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/international/mule.el	2012-10-18 09:54:25.175964200 -0400
@@ -890,7 +890,7 @@
 		 (and (vectorp eol-type-1) (vectorp eol-type-2)))))))

 (defun add-to-coding-system-list (coding-system)
-  "Add CODING-SYSTEM to `coding-system-list' while keeping it sorted."
+  "Add CODING-SYSTEM to variable `coding-system-list' while keeping it sorted."
   (if (or (null coding-system-list)
 	  (coding-system-lessp coding-system (car coding-system-list)))
       (setq coding-system-list (cons coding-system coding-system-list))
--- lisp/isearch.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/isearch.el	2012-10-18 09:54:25.255972200 -0400
@@ -168,7 +168,7 @@

 (defvar isearch-message-function nil
   "Function to call to display the search prompt.
-If nil, use `isearch-message'.")
+If nil, use function `isearch-message'.")

 (defvar isearch-wrap-function nil
   "Function to call to wrap the search when search is failed.
@@ -1066,7 +1066,7 @@

 (defun isearch-fail-pos (&optional msg)
   "Return position of first mismatch in search string, or nil if none.
-If MSG is non-nil, use `isearch-message', otherwise `isearch-string'."
+If MSG is non-nil, use variable `isearch-message', otherwise `isearch-string'."
   (let ((cmds isearch-cmds)
 	(curr-msg (if msg isearch-message isearch-string))
 	succ-msg)
--- lisp/misearch.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/misearch.el	2012-10-18 09:54:25.453992000 -0400
@@ -73,7 +73,7 @@
 The first argument of this function is the current buffer where the
 search is currently searching.  It defines the base buffer relative to
 which this function should find the next buffer.  When the isearch
-direction is backward (when `isearch-forward' is nil), this function
+direction is backward (when option `isearch-forward' is nil), this function
 should return the previous buffer to search.

 If the second argument of this function WRAP is non-nil, then it
--- lisp/newcomment.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/newcomment.el	2012-10-18 09:54:25.509997600 -0400
@@ -1180,7 +1180,7 @@
 (defun comment-box (beg end &optional arg)
   "Comment out the BEG .. END region, putting it inside a box.
 The numeric prefix ARG specifies how many characters to add to begin- and
-end- comment markers additionally to what `comment-add' already specifies."
+end- comment markers additionally to what variable `comment-add'
already specifies."
   (interactive "*r\np")
   (comment-normalize-vars)
   (let ((comment-style (if (cadr (assoc comment-style comment-styles))
--- lisp/printing.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/printing.el	2012-10-18 09:54:25.582004800 -0400
@@ -1798,7 +1798,7 @@
 Where:

 SYMBOL		It's a symbol to identify a text printer.  It's for
-		`pr-txt-name' variable setting and for menu selection.
+		setting option `pr-txt-name' and for menu selection.
 		Examples:
 			'prt_06a
 			'my_printer
@@ -1949,7 +1949,7 @@
 Where:

 SYMBOL		It's a symbol to identify a PostScript printer.  It's for
-		`pr-ps-name' variable setting and for menu selection.
+		setting option `pr-ps-name' and for menu selection.
 		Examples:
 			'prt_06a
 			'my_printer
@@ -2933,7 +2933,7 @@

 		The example above has two setting groups: no-duplex and
 		no-duplex-and-landscape.  When setting no-duplex is activated
-		through `inherits-from:' (see `pr-ps-utility', `pr-mode-alist'
+		through `inherits-from:' (see option `pr-ps-utility', `pr-mode-alist'
 		and `pr-ps-printer-alist'), the variables pr-file-duplex and
 		pr-file-tumble are both set to nil.

--- lisp/progmodes/cc-fonts.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/progmodes/cc-fonts.el	2012-10-18 09:54:25.661012700 -0400
@@ -2048,7 +2048,7 @@

 (defconst c-font-lock-keywords-3 (c-lang-const c-matchers-3 c)
   "Accurate normal font locking for C mode.
-Like `c-font-lock-keywords-2' but detects declarations in a more
+Like the variable `c-font-lock-keywords-2' but detects declarations in a more
 accurate way that works in most cases for arbitrary types without the
 need for `c-font-lock-extra-types'.")

@@ -2206,7 +2206,7 @@

 (defconst c++-font-lock-keywords-3 (c-lang-const c-matchers-3 c++)
   "Accurate normal font locking for C++ mode.
-Like `c++-font-lock-keywords-2' but detects declarations in a more
+Like the variable `c++-font-lock-keywords-2' but detects declarations in a more
 accurate way that works in most cases for arbitrary types without the
 need for `c++-font-lock-extra-types'.")

@@ -2312,7 +2312,7 @@

 (defconst objc-font-lock-keywords-3 (c-lang-const c-matchers-3 objc)
   "Accurate normal font locking for Objective-C mode.
-Like `objc-font-lock-keywords-2' but detects declarations in a more
+Like the variable `objc-font-lock-keywords-2' but detects
declarations in a more
 accurate way that works in most cases for arbitrary types without the
 need for `objc-font-lock-extra-types'.")

@@ -2355,7 +2355,7 @@

 (defconst java-font-lock-keywords-3 (c-lang-const c-matchers-3 java)
   "Accurate normal font locking for Java mode.
-Like `java-font-lock-keywords-2' but detects declarations in a more
+Like variable `java-font-lock-keywords-2' but detects declarations in a more
 accurate way that works in most cases for arbitrary types without the
 need for `java-font-lock-extra-types'.")

@@ -2388,7 +2388,7 @@

 (defconst idl-font-lock-keywords-3 (c-lang-const c-matchers-3 idl)
   "Accurate normal font locking for CORBA IDL mode.
-Like `idl-font-lock-keywords-2' but detects declarations in a more
+Like the variable `idl-font-lock-keywords-2' but detects declarations in a more
 accurate way that works in most cases for arbitrary types without the
 need for `idl-font-lock-extra-types'.")

@@ -2421,7 +2421,7 @@

 (defconst pike-font-lock-keywords-3 (c-lang-const c-matchers-3 pike)
   "Accurate normal font locking for Pike mode.
-Like `pike-font-lock-keywords-2' but detects declarations in a more
+Like the variable `pike-font-lock-keywords-2' but detects
declarations in a more
 accurate way that works in most cases for arbitrary types without the
 need for `pike-font-lock-extra-types'.")

--- lisp/progmodes/compile.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/progmodes/compile.el	2012-10-18 09:54:25.943040900 -0400
@@ -1378,7 +1378,7 @@
 If optional second arg COMINT is t the buffer will be in Comint mode with
 `compilation-shell-minor-mode'.

-Interactively, prompts for the command if `compilation-read-command' is
+Interactively, prompts for the command if the variable
`compilation-read-command' is
 non-nil; otherwise uses `compile-command'.  With prefix arg, always prompts.
 Additionally, with universal prefix arg, compilation buffer will be in
 comint mode, i.e. interactive.
--- lisp/progmodes/etags.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/progmodes/etags.el	2012-10-18 09:54:26.042050800 -0400
@@ -204,7 +204,7 @@

 (defvar tags-table-files nil
   "List of file names covered by current tags table.
-nil means it has not yet been computed; use `tags-table-files' to do so.")
+nil means it has not yet been computed; use function
`tags-table-files' to do so.")

 (defvar tags-completion-table nil
   "Obarray of tag names defined in current tags table.")
@@ -229,7 +229,7 @@
 One optional argument, a boolean specifying to return complete path (nil) or
 relative path (non-nil).")
 (defvar tags-table-files-function nil
-  "Function to do the work of `tags-table-files' (which see).")
+  "Function to do the work of function `tags-table-files' (which see).")
 (defvar tags-completion-table-function nil
   "Function to build the `tags-completion-table'.")
 (defvar snarf-tag-function nil
@@ -256,7 +256,7 @@
 (defvar tags-apropos-function nil
   "Function to do the work of `tags-apropos' (which see).")
 (defvar tags-included-tables-function nil
-  "Function to do the work of `tags-included-tables' (which see).")
+  "Function to do the work of function `tags-included-tables' (which see).")
 (defvar verify-tags-table-function nil
   "Function to return t if current buffer contains valid tags file.")
 
--- lisp/progmodes/gdb-mi.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/progmodes/gdb-mi.el	2012-10-18 09:54:26.170063600 -0400
@@ -617,12 +617,12 @@
 options should include \"-i=mi\" to use gdb's MI text interface.
 Note that the old \"--annotate\" option is no longer supported.

-If `gdb-many-windows' is nil (the default value) then gdb just
+If option `gdb-many-windows' is nil (the default value) then gdb just
 pops up the GUD buffer unless `gdb-show-main' is t.  In this case
 it starts with two windows: one displaying the GUD buffer and the
 other with the source file with the main routine of the inferior.

-If `gdb-many-windows' is t, regardless of the value of
+If option `gdb-many-windows' is t, regardless of the value of
 `gdb-show-main', the layout below will appear.  Keybindings are
 shown in some of the buffers.

@@ -4096,7 +4096,7 @@
   (set-window-dedicated-p window t))

 (defun gdb-setup-windows ()
-  "Layout the window pattern for `gdb-many-windows'."
+  "Layout the window pattern for option `gdb-many-windows'."
   (gdb-display-locals-buffer)
   (gdb-display-stack-buffer)
   (delete-other-windows)
@@ -4160,7 +4160,7 @@

 (defun gdb-restore-windows ()
   "Restore the basic arrangement of windows used by gdb.
-This arrangement depends on the value of `gdb-many-windows'."
+This arrangement depends on the value of option `gdb-many-windows'."
   (interactive)
   (switch-to-buffer gud-comint-buffer) ;Select the right window and frame.
   (delete-other-windows)
--- lisp/ps-print.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/ps-print.el	2012-10-18 09:54:26.282074800 -0400
@@ -1959,13 +1959,13 @@

 Any other value is treated as nil.

-If you set `ps-selected-pages' (see it for documentation), first the pages are
-filtered by `ps-selected-pages' and then by `ps-even-or-odd-pages'.  For
+If you set option `ps-selected-pages' (see it for documentation),
first the pages are
+filtered by option `ps-selected-pages' and then by `ps-even-or-odd-pages'.  For
 example, if we have:

    (setq ps-selected-pages '(1 4 (6 . 10) (12 . 16) 20))

-Combining with `ps-even-or-odd-pages' and `ps-n-up-printing', we have:
+Combining with `ps-even-or-odd-pages' and option `ps-n-up-printing', we have:

 `ps-n-up-printing' = 1:
    `ps-even-or-odd-pages'	PAGES PRINTED
@@ -3566,7 +3566,7 @@
 ;;;###autoload
 (defun ps-spool-buffer-with-faces ()
   "Generate and spool a PostScript image of the buffer.
-Like `ps-spool-buffer', but includes font, color, and underline information in
+Like the command `ps-spool-buffer', but includes font, color, and
underline information in
 the generated image.  This command works only if you are using a window system,
 so it has a way to determine color values.

@@ -5369,7 +5369,7 @@
    (KIND XCOL YCOL XLIN YLIN REPEAT END XSTART YSTART)

 Where:
-KIND is a valid value of `ps-n-up-filling'.
+KIND is a valid value of the variable `ps-n-up-filling'.
 XCOL YCOL are the relative position for the next column.
 XLIN YLIN are the relative position for the beginning of next line.
 REPEAT is the number of repetitions for external loop.
--- lisp/server.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/server.el	2012-10-18 09:54:26.330079600 -0400
@@ -328,7 +328,7 @@

 (defconst server-buffer " *server*"
   "Buffer used internally by Emacs's server.
-One use is to log the I/O for debugging purposes (see `server-log'),
+One use is to log the I/O for debugging purposes (see option `server-log'),
 the other is to provide a current buffer in which the process filter can
 safely let-bind buffer-local variables like `default-directory'.")

@@ -336,7 +336,7 @@
   "If non-nil, log the server's inputs and outputs in the `server-buffer'.")

 (defun server-log (string &optional client)
-  "If `server-log' is non-nil, log STRING to `server-buffer'.
+  "If option `server-log' is non-nil, log STRING to `server-buffer'.
 If CLIENT is non-nil, add a description of it to the logged message."
   (when server-log
     (with-current-buffer (get-buffer-create server-buffer)
--- lisp/simple.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/simple.el	2012-10-18 09:54:26.389085500 -0400
@@ -404,10 +404,10 @@

 (defun newline (&optional arg)
   "Insert a newline, and move to left margin of the new line if it's blank.
-If `use-hard-newlines' is non-nil, the newline is marked with the
+If option `use-hard-newlines' is non-nil, the newline is marked with the
 text-property `hard'.
 With ARG, insert that many newlines.
-Call `auto-fill-function' if the current column number is greater
+Call function `auto-fill-function' if the current column number is greater
 than the value of `fill-column' and ARG is nil."
   (interactive "*P")
   (barf-if-buffer-read-only)
@@ -824,7 +824,7 @@
   "Delete the previous N characters (following if N is negative).
 If Transient Mark mode is enabled, the mark is active, and N is 1,
 delete the text in the region and deactivate the mark instead.
-To disable this, set `delete-active-region' to nil.
+To disable this, set option `delete-active-region' to nil.

 Optional second arg KILLFLAG, if non-nil, means to kill (save in
 kill ring) instead of delete.  Interactively, N is the prefix
@@ -860,7 +860,7 @@
   "Delete the following N characters (previous if N is negative).
 If Transient Mark mode is enabled, the mark is active, and N is 1,
 delete the text in the region and deactivate the mark instead.
-To disable this, set `delete-active-region' to nil.
+To disable this, set variable `delete-active-region' to nil.

 Optional second arg KILLFLAG non-nil means to kill (save in kill
 ring) instead of delete.  Interactively, N is the prefix arg, and
@@ -1707,7 +1707,7 @@
 If there are no search errors, this function displays an overlay with
 the isearch prompt which replaces the original minibuffer prompt.
 Otherwise, it displays the standard isearch message returned from
-`isearch-message'."
+the function `isearch-message'."
   (if (not (and (minibufferp) isearch-success (not isearch-error)))
       ;; Use standard function `isearch-message' when not in the minibuffer,
       ;; or search fails, or has an error (like incomplete regexp).
@@ -3520,7 +3520,7 @@
 kill the rest of the current line, even if there are only
 nonblanks there.

-If `kill-whole-line' is non-nil, then this command kills the whole line
+If option `kill-whole-line' is non-nil, then this command kills the whole line
 including its terminating newline, when used at the beginning of a line
 with no argument.  As a consequence, you can always kill a whole line
 by typing \\[move-beginning-of-line] \\[kill-line].
@@ -4296,13 +4296,13 @@
   "Non-nil means vertical motion starting at end of line keeps to
ends of lines.
 This means moving to the end of each line moved onto.
 The beginning of a blank line does not count as the end of a line.
-This has no effect when `line-move-visual' is non-nil."
+This has no effect when the variable `line-move-visual' is non-nil."
   :type 'boolean
   :group 'editing-basics)

 (defcustom goal-column nil
   "Semipermanent goal column for vertical motion, as set by
\\[set-goal-column], or nil.
-A non-nil setting overrides `line-move-visual', which see."
+A non-nil setting overrides the variable `line-move-visual', which see."
   :type '(choice integer
 		 (const :tag "None" nil))
   :group 'editing-basics)
@@ -4313,7 +4313,7 @@
 It is the column where point was at the start of the current run
 of vertical motion commands.

-When moving by visual lines via `line-move-visual', it is a cons
+When moving by visual lines via the function `line-move-visual', it is a cons
 cell (COL . HSCROLL), where COL is the x-position, in pixels,
 divided by the default column width, and HSCROLL is the number of
 columns by which window is scrolled from left margin.
@@ -5377,7 +5377,7 @@
 beyond `current-fill-column' automatically breaks the line at a
 previous space.

-When `auto-fill-mode' is on, the `auto-fill-function' variable is
+When `auto-fill-mode' is on, the variable `auto-fill-function' is
 non-`nil'.

 The value of `normal-auto-fill-function' specifies the function to use
--- lisp/textmodes/flyspell.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/textmodes/flyspell.el	2012-10-18 09:54:26.436090200 -0400
@@ -63,7 +63,7 @@
   "Non-nil means Flyspell reports a repeated word as an error.
 See `flyspell-mark-duplications-exceptions' to add exceptions to this rule.
 Detection of repeated words is not implemented in
-\"large\" regions; see `flyspell-large-region'."
+\"large\" regions; see variable `flyspell-large-region'."
   :group 'flyspell
   :type 'boolean)

@@ -148,7 +148,7 @@
     scroll-up
     scroll-down)
   "The standard list of deplacement commands for Flyspell.
-See `flyspell-deplacement-commands'."
+See variable `flyspell-deplacement-commands'."
   :group 'flyspell
   :version "21.1"
   :type '(repeat (symbol)))
--- lisp/textmodes/ispell.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/textmodes/ispell.el	2012-10-18 09:54:26.487095300 -0400
@@ -1540,7 +1540,7 @@

 (defun ispell-accept-output (&optional timeout-secs timeout-msecs)
   "Wait for output from ispell process, or TIMEOUT-SECS and TIMEOUT-MSECS.
-If asynchronous subprocesses are not supported, call `ispell-filter' and
+If asynchronous subprocesses are not supported, call function
`ispell-filter' and
 pass it the output of the last ispell invocation."
   (if ispell-async-processp
       (accept-process-output ispell-process timeout-secs timeout-msecs)
--- lisp/textmodes/sgml-mode.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/textmodes/sgml-mode.el	2012-10-18 09:54:26.545101100 -0400
@@ -1936,7 +1936,7 @@
     ("ul" . "Unordered list")
     ("var" . "Math variable face")
     ("wbr" . "Enable <br> within <nobr>"))
-  "*Value of `sgml-tag-help' for HTML mode.")
+  "*Value of variable `sgml-tag-help' for HTML mode.")

 
 ;;;###autoload
--- lisp/vc/compare-w.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/vc/compare-w.el	2012-10-18 09:54:26.584105000 -0400
@@ -53,13 +53,13 @@
   :group 'compare-windows)

 (defcustom compare-ignore-whitespace nil
-  "Non-nil means `compare-windows' ignores whitespace."
+  "Non-nil means command `compare-windows' ignores whitespace."
   :type 'boolean
   :group 'compare-windows
   :version "22.1")

 (defcustom compare-ignore-case nil
-  "Non-nil means `compare-windows' ignores case differences."
+  "Non-nil means command `compare-windows' ignores case differences."
   :type 'boolean
   :group 'compare-windows)

@@ -379,7 +379,7 @@
 	(delete-overlay compare-windows-overlay2)))))

 (defun compare-windows-dehighlight ()
-  "Remove highlighting created by `compare-windows-highlight'."
+  "Remove highlighting created by function `compare-windows-highlight'."
   (interactive)
   (remove-hook 'pre-command-hook 'compare-windows-dehighlight)
   (mapc 'delete-overlay compare-windows-overlays1)
--- lisp/vc/diff.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/vc/diff.el	2012-10-18 09:54:26.627109300 -0400
@@ -83,7 +83,7 @@

 When called interactively with a prefix argument, prompt
 interactively for diff switches.  Otherwise, the switches
-specified in `diff-switches' are passed to the diff command."
+specified in the variable `diff-switches' are passed to the diff command."
   (interactive
    (let* ((newf (if (and buffer-file-name (file-exists-p buffer-file-name))
 		    (read-file-name
--- lisp/whitespace.el~	2012-08-23 01:33:42.000000000 -0400
+++ lisp/whitespace.el	2012-10-18 09:54:26.796126200 -0400
@@ -1276,19 +1276,19 @@

 (defvar whitespace-point (point)
   "Used to save locally current point value.
-Used by `whitespace-trailing-regexp' function (which see).")
+Used by function `whitespace-trailing-regexp' (which see).")

 (defvar whitespace-font-lock-refontify nil
   "Used to save locally the font-lock refontify state.
-Used by `whitespace-post-command-hook' function (which see).")
+Used by function `whitespace-post-command-hook' (which see).")

 (defvar whitespace-bob-marker nil
   "Used to save locally the bob marker value.
-Used by `whitespace-post-command-hook' function (which see).")
+Used by function `whitespace-post-command-hook' (which see).")

 (defvar whitespace-eob-marker nil
   "Used to save locally the eob marker value.
-Used by `whitespace-post-command-hook' function (which see).")
+Used by function `whitespace-post-command-hook' (which see).")

 (defvar whitespace-buffer-changed nil
   "Used to indicate locally if buffer changed.
--- src/cmds.c~	2012-08-23 01:33:42.000000000 -0400
+++ src/cmds.c	2012-10-18 09:54:26.835130100 -0400
@@ -270,7 +270,7 @@
 Whichever character you type to run this command is inserted.
 Before insertion, `expand-abbrev' is executed if the inserted character does
 not have word syntax and the previous character in the buffer does.
-After insertion, the value of `auto-fill-function' is called if the
+After insertion, the value of the variable `auto-fill-function' is
called if the
 `auto-fill-chars' table has a non-nil value for the inserted character.
 At the end, it runs `post-self-insert-hook'.  */)
   (Lisp_Object n)
--- src/insdel.c~	2012-08-23 01:33:42.000000000 -0400
+++ src/insdel.c	2012-10-18 09:54:26.914138000 -0400
@@ -2116,7 +2116,7 @@

 DEFUN ("combine-after-change-execute", Fcombine_after_change_execute,
        Scombine_after_change_execute, 0, 0, 0,
-       doc: /* This function is for use internally in
`combine-after-change-calls'.  */)
+       doc: /* This function is for use internally in the function
`combine-after-change-calls'.  */)
   (void)
 {
   int count = SPECPDL_INDEX ();
@@ -2211,7 +2211,7 @@
 	       doc: /* Non-nil means enable debugging checks for invalid
marker positions.  */);
   check_markers_debug_flag = 0;
   DEFVAR_LISP ("combine-after-change-calls", Vcombine_after_change_calls,
-	       doc: /* Used internally by the `combine-after-change-calls'
macro.  */);
+	       doc: /* Used internally by the function
`combine-after-change-calls'.  */);
   Vcombine_after_change_calls = Qnil;

   DEFVAR_BOOL ("inhibit-modification-hooks", inhibit_modification_hooks,
--- src/keyboard.c~	2012-08-23 01:33:42.000000000 -0400
+++ src/keyboard.c	2012-10-18 09:54:26.958142400 -0400
@@ -10249,7 +10249,7 @@
        doc: /* Execute CMD as an editor command.
 CMD must be a symbol that satisfies the `commandp' predicate.
 Optional second arg RECORD-FLAG non-nil
-means unconditionally put this command in `command-history'.
+means unconditionally put this command in the variable `command-history'.
 Otherwise, that is done only if an arg is read using the minibuffer.
 The argument KEYS specifies the value to use instead of (this-command-keys)
 when reading the arguments; if it is nil, (this-command-keys) is used.
@@ -12284,8 +12284,8 @@
 	       Vsaved_region_selection,
 	       doc: /* Contents of active region prior to buffer modification.
 If `select-active-regions' is non-nil, Emacs sets this to the
-text in the region before modifying the buffer.  The next
-`deactivate-mark' call uses this to set the window selection.  */);
+text in the region before modifying the buffer.  The next call to
+the function `deactivate-mark' uses this to set the window selection.  */);
   Vsaved_region_selection = Qnil;

   DEFVAR_LISP ("selection-inhibit-update-commands",
--- src/window.c~	2012-08-23 01:33:42.000000000 -0400
+++ src/window.c	2012-10-18 09:54:26.999146500 -0400
@@ -1248,7 +1248,7 @@

 Note that, when WINDOW is the selected window and its buffer
 is also currently selected, the value returned is the same as (point).
-It would be more strictly correct to return the `top-level' value
+It would be more strictly correct to return the top-level value
 of point, outside of any save-excursion forms.
 But that is hard to define.  */)
   (Lisp_Object window)
@@ -6628,7 +6628,7 @@

 Other values are reserved for future use.

-This variable takes no effect if `window-combination-limit' is non-nil.  */);
+This variable takes no effect if the variable
`window-combination-limit' is non-nil.  */);
   Vwindow_combination_resize = Qnil;

   DEFVAR_LISP ("window-combination-limit", Vwindow_combination_limit,

-- 
In general, we reserve the right to have a poor
memory--the computer, however, is supposed to
remember!  Poor computer.  -- Guy Lewis Steele Jr.