Subject: bug#42753: 26.3; `info-lookup.el': Add all manuals delivered by `emacs -Q', for `emacs-lisp-mode'

From: Drew Adams <[email-masked]>
Date: Fri, 7 Aug 2020 15:20:15 -0700 (PDT)

Most of the manuals delivered with Emacs are missing from
`info-look.el', for looking up Emacs-Lisp commands, non-interactive
functions, options, and other variables.

I believe that a fix for this is to replace the :doc-spec value here:

(info-lookup-maybe-add-help
 :mode 'emacs-lisp-mode
 :regexp "[^][()`''',\" \t\n]+"
 :doc-spec '(;; Commands with key sequences appear in nodes as `foo' and
             ;; those without as `M-x foo'.
             ("(emacs)Command Index"  nil "['`']\\(M-x[ \t\n]+\\)?" "['']")
             ;; Variables normally appear in nodes as just `foo'.
             ("(emacs)Variable Index" nil "['`']" "['']")
             ;; Almost all functions, variables, etc appear in nodes as
             ;; " -- Function: foo" etc.  A small number of aliases and
             ;; symbols appear only as `foo', and will miss out on exact
             ;; positions.  Allowing `foo' would hit too many false matches
             ;; for things that should go to Function: etc, and those latter
             ;; are much more important.  Perhaps this could change if some
             ;; sort of fallback match scheme existed.
             ("(elisp)Index"          nil "^ -+ .*: " "\\( \\|$\\)")
             ("(cl)Function Index"    nil "^ -+ .*: " "\\( \\|$\\)")
             ("(cl)Variable Index"    nil "^ -+ .*: " "\\( \\|$\\)")))

with this :doc-spec value:

'(;; Commands with key sequences appear in nodes as `foo' and
  ;; those without as `M-x foo'.
  ("(emacs)Command Index"                nil "['`']\\(M-x[ \t\n]+\\)?" "['']")
  ;; Variables normally appear in nodes as just `foo'.
  ("(emacs)Variable Index"               nil "['`']" "['']")
  ;; Almost all functions, variables, etc appear in nodes as
  ;; " -- Function: foo" etc.  A small number of aliases and
  ;; symbols appear only as `foo', and will miss out on exact
  ;; positions.  Allowing `foo' would hit too many false matches
  ;; for things that should go to Function: etc, and those latter
  ;; are much more important.  Perhaps this could change if some
  ;; sort of fallback match scheme existed.
  ("(elisp)Index"                        nil "^ -+ .*: " "\\( \\|$\\)")
  ("(info)Index"                         nil "^ -+ .*: " "\\( \\|$\\)")
  ("(efaq-w32)Indexes"                   nil "^ -+ .*: " "\\( \\|$\\)")
  ("(eintr)Index"                        nil "^ -+ .*: " "\\( \\|$\\)")
  ("(ccmode)Command and Function Index"  nil "^ -+ .*: " "\\( \\|$\\)")
  ("(ccmode)Variable Index"              nil "^ -+ .*: " "\\( \\|$\\)")
  ("(idlwave)Index"                      nil "^ -+ .*: " "\\( \\|$\\)")
  ("(octave-mode)Lisp Function Index"    nil "^ -+ .*: " "\\( \\|$\\)")
  ("(octave-mode)Variable Index"         nil "^ -+ .*: " "\\( \\|$\\)")
  ("(org)Command and Function Index"     nil "^ -+ .*: " "\\( \\|$\\)")
  ("(org)Variable Index"                 nil "^ -+ .*: " "\\( \\|$\\)")
  ("(vhdl-mode)Command Index"            nil "^ -+ .*: " "\\( \\|$\\)")
  ("(vhdl-mode)Variable Index"           nil "^ -+ .*: " "\\( \\|$\\)")
  ("(eudc)Index"                         nil "^ -+ .*: " "\\( \\|$\\)")
  ("(emacs-gnutls)Function Index"        nil "^ -+ .*: " "\\( \\|$\\)")
  ("(emacs-gnutls)Variable Index"        nil "^ -+ .*: " "\\( \\|$\\)")
  ("(gnus)Index"                         nil "^ -+ .*: " "\\( \\|$\\)")
  ("(mh-e)Command Index"                 nil "^ -+ .*: " "\\( \\|$\\)")
  ("(mh-e)Option Index"                  nil "^ -+ .*: " "\\( \\|$\\)")
  ("(message)Index"                      nil "^ -+ .*: " "\\( \\|$\\)")
  ("(newsticker)Index"                   nil "^ -+ .*: " "\\( \\|$\\)")
  ("(pgg)Function Index"                 nil "^ -+ .*: " "\\( \\|$\\)")
  ("(pgg)Variable Index"                 nil "^ -+ .*: " "\\( \\|$\\)")
  ("(sasl)Function Index"                nil "^ -+ .*: " "\\( \\|$\\)")
  ("(sasl)Variable Index"                nil "^ -+ .*: " "\\( \\|$\\)")
  ("(sc)Command Index"                   nil "^ -+ .*: " "\\( \\|$\\)")
  ("(sc)Variable Index"                  nil "^ -+ .*: " "\\( \\|$\\)")
  ("(sieve)Index"                        nil "^ -+ .*: " "\\( \\|$\\)")
  ("(tramp)Function Index"               nil "^ -+ .*: " "\\( \\|$\\)")
  ("(tramp)Variable Index"               nil "^ -+ .*: " "\\( \\|$\\)")
  ("(autotype)Command Index"             nil "^ -+ .*: " "\\( \\|$\\)")
  ("(autotype)Variable Index"            nil "^ -+ .*: " "\\( \\|$\\)")
  ("(calc)Lisp Function Index"           nil "^ -+ .*: " "\\( \\|$\\)")
  ("(calc)Variable Index"                nil "^ -+ .*: " "\\( \\|$\\)")
  ("(dired-x)Command Index"              nil "^ -+ .*: " "\\( \\|$\\)")
  ("(dired-x)Variable Index"             nil "^ -+ .*: " "\\( \\|$\\)")
  ("(eieio)Function Index"               nil "^ -+ .*: " "\\( \\|$\\)")
  ("(ert)Index"                          nil "^ -+ .*: " "\\( \\|$\\)")
  ("(eww)Lisp Function Index"            nil "^ -+ .*: " "\\( \\|$\\)")
  ("(eww)Variable Index"                 nil "^ -+ .*: " "\\( \\|$\\)")
  ("(epa)Function Index"                 nil "^ -+ .*: " "\\( \\|$\\)")
  ("(epa)Variable Index"                 nil "^ -+ .*: " "\\( \\|$\\)")
  ("(ediff)Index"                        nil "^ -+ .*: " "\\( \\|$\\)")
  ("(eshell)Function and Variable Index" nil "^ -+ .*: " "\\( \\|$\\)")
  ("(flymake)Index"                      nil "^ -+ .*: " "\\( \\|$\\)")
  ("(forms)Index"                        nil "^ -+ .*: " "\\( \\|$\\)")
  ("(htmlfontify)Index"                  nil "^ -+ .*: " "\\( \\|$\\)")
  ("(ido)Variable Index"                 nil "^ -+ .*: " "\\( \\|$\\)")
  ("(pl-cvs)Function and Variable Index" nil "^ -+ .*: " "\\( \\|$\\)")
  ("(reftex)Index"                       nil "^ -+ .*: " "\\( \\|$\\)")
  ("(ses)Index"                          nil "^ -+ .*: " "\\( \\|$\\)")
  ("(srecode)Index"                      nil "^ -+ .*: " "\\( \\|$\\)")
  ("(semantic)Index"                     nil "^ -+ .*: " "\\( \\|$\\)")
  ("(speedbar)Index"                     nil "^ -+ .*: " "\\( \\|$\\)")
  ("(viper)Function Index"               nil "^ -+ .*: " "\\( \\|$\\)")
  ("(viper)Variable Index"               nil "^ -+ .*: " "\\( \\|$\\)")
  ("(wisent)Index"                       nil "^ -+ .*: " "\\( \\|$\\)")
  ("(woman)Command Index"                nil "^ -+ .*: " "\\( \\|$\\)")
  ("(woman)Variable Index"               nil "^ -+ .*: " "\\( \\|$\\)")
  ("(auth)Function Index"                nil "^ -+ .*: " "\\( \\|$\\)")
  ("(auth)Variable Index"                nil "^ -+ .*: " "\\( \\|$\\)")
  ("(cl)Function Index"                  nil "^ -+ .*: " "\\( \\|$\\)")
  ("(cl)Variable Index"                  nil "^ -+ .*: " "\\( \\|$\\)")
  ("(dbus)Index"                         nil "^ -+ .*: " "\\( \\|$\\)")
  ("(mime)Index"                         nil "^ -+ .*: " "\\( \\|$\\)")
  ("(smtpmail)Index"                     nil "^ -+ .*: " "\\( \\|$\\)")
  ("(url)Function Index"                 nil "^ -+ .*: " "\\( \\|$\\)")
  ("(url)Variable Index"                 nil "^ -+ .*: " "\\( \\|$\\)")
  ("(widget)Index"                       nil "^ -+ .*: " "\\( \\|$\\)")
  )

That covers all of the manuals I get with `emacs -Q', which have indexes
with entries for Emacs-Lisp commands, functions, options, and variables.

Please do that, or something similar, so such symbols get picked up by
`info-lookup'.  I used the same order here as the manuals are presented
in the top-level menu.  You may want to change the order.  Another
possible change you might want to make is to use a value similar to the
one for "(emacs)Command Index" for other "(...)Command Index" entries.

["(efaq-w32)Indexes" should probably be included conditionally, for MS
Windows.  And perhaps on other platforms `emacs -Q' gives a different
set of manuals, so other adjustments could be made.]

Note that `info-lookup' is used by 3rd-party libraries, so this will
help them as well.

It seems like there should be an easy way to just _add_ such missing
entries after the fact, e.g., in a 3rd-party library.  For example, I
was thinking that perhaps `info-lookup-add-help' (without the `-maybe')
would take care of that.

But apparently not.  While trying that I found I had to reset the
various global values in `info-look.el' - once the alist and cache are
defined there doesn't seem to be a way (already provided) to update them.
`info-look.el' seems a bit monolithic, in this regard.  But perhaps I'm
missing something.

In GNU Emacs 26.3 (build 1, x86_64-w64-mingw32)
 of 2019-08-29
Repository revision: 96dd0196c28bc36779584e47fffcca433c9309cd
Windowing system distributor `Microsoft Corp.', version 10.0.18362
Configured using:
 `configure --without-dbus --host=x86_64-w64-mingw32
 --without-compress-install 'CFLAGS=-O2 -static -g3''