annotate lisp/info.el @ 24419:30e478cd167e

(shell-command-default-error-buffer): Renamed from shell-command-on-region-default-error-buffer. (shell-command-on-region): Mention in echo area when there is some error output. Mention success or failure, too. Accumulate multiple error outputs going forward, with formfeed in between. Display the error buffer when we have put something in it. (shell-command): Add the ERROR-BUFFER argument feature.
author Karl Heuer <kwzh@gnu.org>
date Mon, 01 Mar 1999 03:19:32 +0000
parents baf6798c9df8
children 2db3b19a94bb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
754
b096f4af925c *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 732
diff changeset
1 ;;; info.el --- info package for Emacs.
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 754
diff changeset
2
24196
baf6798c9df8 (Info-directory-list): Don't set path-separator now
Dave Love <fx@gnu.org>
parents: 23981
diff changeset
3 ;; Copyright (C) 1985, 86, 92, 93, 94, 95, 96, 97, 98, 99 Free Software
17154
01faa9b0043e Re-fix copyright dates.
Karl Heuer <kwzh@gnu.org>
parents: 17153
diff changeset
4 ;; Foundation, Inc.
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 811
diff changeset
5
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 754
diff changeset
6 ;; Maintainer: FSF
811
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
7 ;; Keywords: help
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 754
diff changeset
8
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 754
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 ;; any later version.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19 ;; GNU General Public License for more details.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13990
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13990
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13990
diff changeset
24 ;; Boston, MA 02111-1307, USA.
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 754
diff changeset
26 ;;; Commentary:
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 754
diff changeset
27
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13990
diff changeset
28 ;; Note that nowadays we expect info files to be made using makeinfo.
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 754
diff changeset
29
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 754
diff changeset
30 ;;; Code:
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 754
diff changeset
31
17430
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
32 (defgroup info nil
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
33 "Info subsystem"
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
34 :group 'help
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
35 :group 'docs)
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
36
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
37
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38 (defvar Info-history nil
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39 "List of info nodes user has visited.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
40 Each element of list is a list (FILENAME NODENAME BUFFERPOS).")
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41
17430
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
42 (defcustom Info-enable-edit nil
3084
a4341d92948a (Info-edit, Info-last-search, Info-enable-edit):
Richard M. Stallman <rms@gnu.org>
parents: 3047
diff changeset
43 "*Non-nil means the \\<Info-mode-map>\\[Info-edit] command in Info can edit the current node.
680
f99c8512cd41 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 660
diff changeset
44 This is convenient if you want to write info files by hand.
f99c8512cd41 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 660
diff changeset
45 However, we recommend that you not do this.
f99c8512cd41 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 660
diff changeset
46 It is better to write a Texinfo file and generate the Info file from that,
17430
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
47 because that gives you a printed manual as well."
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
48 :type 'boolean
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
49 :group 'info)
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50
15177
4935ada40f67 (Info-enable-active-nodes): Default to nil. Mark it risky.
Richard M. Stallman <rms@gnu.org>
parents: 15126
diff changeset
51 (defvar Info-enable-active-nodes nil
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 "Non-nil allows Info to execute Lisp code associated with nodes.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53 The Lisp code is executed when the node is selected.")
15177
4935ada40f67 (Info-enable-active-nodes): Default to nil. Mark it risky.
Richard M. Stallman <rms@gnu.org>
parents: 15126
diff changeset
54 (put 'Info-enable-active-nodes 'risky-local-variable t)
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55
17430
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
56 (defcustom Info-fontify t
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
57 "*Non-nil enables highlighting and fonts in Info nodes."
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
58 :type 'boolean
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
59 :group 'info)
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
60
19043
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
61 (defface info-node
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
62 '((t (:bold t :italic t)))
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
63 "Face for Info node names."
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
64 :group 'info)
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
65
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
66 (defface info-menu-5
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
67 '((t (:underline t)))
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
68 "Face for the fifth and tenth `*' in an Info menu."
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
69 :group 'info)
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
70
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
71 (defface info-xref
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
72 '((t (:bold t)))
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
73 "Face for Info cross-references."
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
74 :group 'info)
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
75
17430
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
76 (defcustom Info-fontify-maximum-menu-size 30000
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
77 "*Maximum size of menu to fontify if `Info-fontify' is non-nil."
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
78 :type 'integer
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
79 :group 'info)
8480
7f28030d9529 (Info-additional-directory-list): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8461
diff changeset
80
3330
4fd13e6109e3 (Info-mode-map): Correct Info-top to Info-top-node.
Richard M. Stallman <rms@gnu.org>
parents: 3313
diff changeset
81 (defvar Info-directory-list
5482
27603dcb6260 (Info-directory-list): Change last elt to ../info (expanded).
Richard M. Stallman <rms@gnu.org>
parents: 5271
diff changeset
82 (let ((path (getenv "INFOPATH"))
13620
e5b36a1526dd (Info-directory-list): Use source-directory.
Richard M. Stallman <rms@gnu.org>
parents: 13566
diff changeset
83 (source (expand-file-name "info/" source-directory))
11781
fe6619d546fd (Info-directory-list): Use installation-directory,
Richard M. Stallman <rms@gnu.org>
parents: 11759
diff changeset
84 (sibling (if installation-directory
13620
e5b36a1526dd (Info-directory-list): Use source-directory.
Richard M. Stallman <rms@gnu.org>
parents: 13566
diff changeset
85 (expand-file-name "info/" installation-directory)))
e5b36a1526dd (Info-directory-list): Use source-directory.
Richard M. Stallman <rms@gnu.org>
parents: 13566
diff changeset
86 alternative)
3330
4fd13e6109e3 (Info-mode-map): Correct Info-top to Info-top-node.
Richard M. Stallman <rms@gnu.org>
parents: 3313
diff changeset
87 (if path
24196
baf6798c9df8 (Info-directory-list): Don't set path-separator now
Dave Love <fx@gnu.org>
parents: 23981
diff changeset
88 (split-string path (regexp-quote path-separator))
13620
e5b36a1526dd (Info-directory-list): Use source-directory.
Richard M. Stallman <rms@gnu.org>
parents: 13566
diff changeset
89 (if (and sibling (file-exists-p sibling))
e5b36a1526dd (Info-directory-list): Use source-directory.
Richard M. Stallman <rms@gnu.org>
parents: 13566
diff changeset
90 (setq alternative sibling)
e5b36a1526dd (Info-directory-list): Use source-directory.
Richard M. Stallman <rms@gnu.org>
parents: 13566
diff changeset
91 (setq alternative source))
e5b36a1526dd (Info-directory-list): Use source-directory.
Richard M. Stallman <rms@gnu.org>
parents: 13566
diff changeset
92 (if (or (member alternative Info-default-directory-list)
e5b36a1526dd (Info-directory-list): Use source-directory.
Richard M. Stallman <rms@gnu.org>
parents: 13566
diff changeset
93 (not (file-exists-p alternative))
9782
7224fba93c27 (Info-directory-list): Treat windows-nt like ms-dos.
Richard M. Stallman <rms@gnu.org>
parents: 9588
diff changeset
94 ;; On DOS/NT, we use movable executables always,
7990
6be46752d57f (Info-directory-list): For msdos, don't check for
Richard M. Stallman <rms@gnu.org>
parents: 7928
diff changeset
95 ;; and we must always find the Info dir at run time.
9782
7224fba93c27 (Info-directory-list): Treat windows-nt like ms-dos.
Richard M. Stallman <rms@gnu.org>
parents: 9588
diff changeset
96 (if (or (eq system-type 'ms-dos) (eq system-type 'windows-nt))
7990
6be46752d57f (Info-directory-list): For msdos, don't check for
Richard M. Stallman <rms@gnu.org>
parents: 7928
diff changeset
97 nil
6be46752d57f (Info-directory-list): For msdos, don't check for
Richard M. Stallman <rms@gnu.org>
parents: 7928
diff changeset
98 ;; Use invocation-directory for Info only if we used it for
6be46752d57f (Info-directory-list): For msdos, don't check for
Richard M. Stallman <rms@gnu.org>
parents: 7928
diff changeset
99 ;; exec-directory also.
6be46752d57f (Info-directory-list): For msdos, don't check for
Richard M. Stallman <rms@gnu.org>
parents: 7928
diff changeset
100 (not (string= exec-directory
11781
fe6619d546fd (Info-directory-list): Use installation-directory,
Richard M. Stallman <rms@gnu.org>
parents: 11759
diff changeset
101 (expand-file-name "lib-src/"
fe6619d546fd (Info-directory-list): Use installation-directory,
Richard M. Stallman <rms@gnu.org>
parents: 11759
diff changeset
102 installation-directory)))))
5482
27603dcb6260 (Info-directory-list): Change last elt to ../info (expanded).
Richard M. Stallman <rms@gnu.org>
parents: 5271
diff changeset
103 Info-default-directory-list
24196
baf6798c9df8 (Info-directory-list): Don't set path-separator now
Dave Love <fx@gnu.org>
parents: 23981
diff changeset
104 ;; Substitute the alternative for occurences of the
baf6798c9df8 (Info-directory-list): Don't set path-separator now
Dave Love <fx@gnu.org>
parents: 23981
diff changeset
105 ;; installation directory. The latter occurs last, but maybe
baf6798c9df8 (Info-directory-list): Don't set path-separator now
Dave Love <fx@gnu.org>
parents: 23981
diff changeset
106 ;; more than once, so that it overrides /usr/info in
baf6798c9df8 (Info-directory-list): Don't set path-separator now
Dave Love <fx@gnu.org>
parents: 23981
diff changeset
107 ;; particular.
baf6798c9df8 (Info-directory-list): Don't set path-separator now
Dave Love <fx@gnu.org>
parents: 23981
diff changeset
108 (let ((instdir (car (last Info-default-directory-list))))
baf6798c9df8 (Info-directory-list): Don't set path-separator now
Dave Love <fx@gnu.org>
parents: 23981
diff changeset
109 (mapcar (lambda (dir)
baf6798c9df8 (Info-directory-list): Don't set path-separator now
Dave Love <fx@gnu.org>
parents: 23981
diff changeset
110 (if (string= dir instdir)
baf6798c9df8 (Info-directory-list): Don't set path-separator now
Dave Love <fx@gnu.org>
parents: 23981
diff changeset
111 alternative
baf6798c9df8 (Info-directory-list): Don't set path-separator now
Dave Love <fx@gnu.org>
parents: 23981
diff changeset
112 dir))
baf6798c9df8 (Info-directory-list): Don't set path-separator now
Dave Love <fx@gnu.org>
parents: 23981
diff changeset
113 Info-default-directory-list)))))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114 "List of directories to search for Info documentation files.
540
0840eff2ecd5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 359
diff changeset
115 nil means not yet initialized. In this case, Info uses the environment
1979
0582c70595f1 * info.el (Info-directory-list): Doc fix; it is set according to
Jim Blandy <jimb@redhat.com>
parents: 1971
diff changeset
116 variable INFOPATH to initialize it, or `Info-default-directory-list'
7739
f2747ec591fd (Info-directory-list): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 7572
diff changeset
117 if there is no INFOPATH variable in the environment.
f2747ec591fd (Info-directory-list): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 7572
diff changeset
118 The last element of `Info-default-directory-list' is the directory
7753
198dd616a588 (Info-directory-list): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 7739
diff changeset
119 where Emacs installs the Info files that come with it.
8461
c88361c3b940 (Info-directory-list): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8369
diff changeset
120
c88361c3b940 (Info-directory-list): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8369
diff changeset
121 If you run the Emacs executable from the `src' directory in the Emacs
c88361c3b940 (Info-directory-list): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8369
diff changeset
122 source tree, the `info' directory in the source tree is used as the last
c88361c3b940 (Info-directory-list): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8369
diff changeset
123 element, in place of the installation Info directory. This is useful
c88361c3b940 (Info-directory-list): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8369
diff changeset
124 when you run a version of Emacs without installing it.")
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125
17430
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
126 (defcustom Info-additional-directory-list nil
8480
7f28030d9529 (Info-additional-directory-list): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8461
diff changeset
127 "List of additional directories to search for Info documentation files.
17430
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
128 These directories are not searched for merging the `dir' file."
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
129 :type '(repeat directory)
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
130 :group 'info)
8480
7f28030d9529 (Info-additional-directory-list): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8461
diff changeset
131
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132 (defvar Info-current-file nil
12646
cd83cf47be08 (Info-current-file): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12433
diff changeset
133 "Info file that Info is now looking at, or nil.
cd83cf47be08 (Info-current-file): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12433
diff changeset
134 This is the name that was specified in Info, not the actual file name.
cd83cf47be08 (Info-current-file): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 12433
diff changeset
135 It doesn't contain directory names or file name extensions added by Info.")
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 (defvar Info-current-subfile nil
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138 "Info subfile that is actually in the *info* buffer now,
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139 or nil if current info file is not split into subfiles.")
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
141 (defvar Info-current-node nil
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
142 "Name of node that Info is now looking at, or nil.")
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143
16981
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
144 (defvar Info-tag-table-marker nil
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145 "Marker pointing at beginning of current Info file's tag table.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
146 Marker points nowhere if file has no tag table.")
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147
16981
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
148 (defvar Info-tag-table-buffer nil
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
149 "Buffer used for indirect tag tables.")
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
150
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
151 (defvar Info-current-file-completions nil
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
152 "Cached completion list for current Info file.")
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
153
2561
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
154 (defvar Info-index-alternatives nil
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
155 "List of possible matches for last Info-index command.")
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
156
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
157 (defvar Info-standalone nil
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
158 "Non-nil if Emacs was started solely as an Info browser.")
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
159
12927
d3cda9e7c55f (Info-suffix-list): For MS-DOS, use gunzip as the only uncompressor,
Richard M. Stallman <rms@gnu.org>
parents: 12892
diff changeset
160 (defvar Info-suffix-list
19937
f497e74a29aa (Info-suffix-list): Add suffixes for MS-DOS version
Richard M. Stallman <rms@gnu.org>
parents: 19821
diff changeset
161 ;; The MS-DOS list should work both when long file names are
f497e74a29aa (Info-suffix-list): Add suffixes for MS-DOS version
Richard M. Stallman <rms@gnu.org>
parents: 19821
diff changeset
162 ;; supported (Windows 9X), and when only 8+3 file names are available.
12927
d3cda9e7c55f (Info-suffix-list): For MS-DOS, use gunzip as the only uncompressor,
Richard M. Stallman <rms@gnu.org>
parents: 12892
diff changeset
163 (if (eq system-type 'ms-dos)
d3cda9e7c55f (Info-suffix-list): For MS-DOS, use gunzip as the only uncompressor,
Richard M. Stallman <rms@gnu.org>
parents: 12892
diff changeset
164 '( (".gz" . "gunzip")
d3cda9e7c55f (Info-suffix-list): For MS-DOS, use gunzip as the only uncompressor,
Richard M. Stallman <rms@gnu.org>
parents: 12892
diff changeset
165 (".z" . "gunzip")
19937
f497e74a29aa (Info-suffix-list): Add suffixes for MS-DOS version
Richard M. Stallman <rms@gnu.org>
parents: 19821
diff changeset
166 (".inz" . "gunzip")
f497e74a29aa (Info-suffix-list): Add suffixes for MS-DOS version
Richard M. Stallman <rms@gnu.org>
parents: 19821
diff changeset
167 (".igz" . "gunzip")
f497e74a29aa (Info-suffix-list): Add suffixes for MS-DOS version
Richard M. Stallman <rms@gnu.org>
parents: 19821
diff changeset
168 (".info.Z" . "gunzip")
f497e74a29aa (Info-suffix-list): Add suffixes for MS-DOS version
Richard M. Stallman <rms@gnu.org>
parents: 19821
diff changeset
169 (".info.gz" . "gunzip")
f497e74a29aa (Info-suffix-list): Add suffixes for MS-DOS version
Richard M. Stallman <rms@gnu.org>
parents: 19821
diff changeset
170 ("-info.Z" . "gunzip")
f497e74a29aa (Info-suffix-list): Add suffixes for MS-DOS version
Richard M. Stallman <rms@gnu.org>
parents: 19821
diff changeset
171 ("-info.gz" . "gunzip")
f497e74a29aa (Info-suffix-list): Add suffixes for MS-DOS version
Richard M. Stallman <rms@gnu.org>
parents: 19821
diff changeset
172 ("/index.gz". "gunzip")
f497e74a29aa (Info-suffix-list): Add suffixes for MS-DOS version
Richard M. Stallman <rms@gnu.org>
parents: 19821
diff changeset
173 ("/index.z" . "gunzip")
13004
0ed37da6f0f3 (Info-suffix-list): Add .inf to MSDOS list.
Richard M. Stallman <rms@gnu.org>
parents: 12947
diff changeset
174 (".inf" . nil)
19937
f497e74a29aa (Info-suffix-list): Add suffixes for MS-DOS version
Richard M. Stallman <rms@gnu.org>
parents: 19821
diff changeset
175 (".info" . nil)
f497e74a29aa (Info-suffix-list): Add suffixes for MS-DOS version
Richard M. Stallman <rms@gnu.org>
parents: 19821
diff changeset
176 ("-info" . nil)
f497e74a29aa (Info-suffix-list): Add suffixes for MS-DOS version
Richard M. Stallman <rms@gnu.org>
parents: 19821
diff changeset
177 ("/index" . nil)
12927
d3cda9e7c55f (Info-suffix-list): For MS-DOS, use gunzip as the only uncompressor,
Richard M. Stallman <rms@gnu.org>
parents: 12892
diff changeset
178 ("" . nil))
17941
2465a6a42a60 (Info-suffix-list): Accept -info as suffix;
Richard M. Stallman <rms@gnu.org>
parents: 17859
diff changeset
179 '( (".info.Z". "uncompress")
2465a6a42a60 (Info-suffix-list): Accept -info as suffix;
Richard M. Stallman <rms@gnu.org>
parents: 17859
diff changeset
180 (".info.Y". "unyabba")
2465a6a42a60 (Info-suffix-list): Accept -info as suffix;
Richard M. Stallman <rms@gnu.org>
parents: 17859
diff changeset
181 (".info.gz". "gunzip")
2465a6a42a60 (Info-suffix-list): Accept -info as suffix;
Richard M. Stallman <rms@gnu.org>
parents: 17859
diff changeset
182 (".info.z". "gunzip")
2465a6a42a60 (Info-suffix-list): Accept -info as suffix;
Richard M. Stallman <rms@gnu.org>
parents: 17859
diff changeset
183 (".info". nil)
2465a6a42a60 (Info-suffix-list): Accept -info as suffix;
Richard M. Stallman <rms@gnu.org>
parents: 17859
diff changeset
184 ("-info.Z". "uncompress")
2465a6a42a60 (Info-suffix-list): Accept -info as suffix;
Richard M. Stallman <rms@gnu.org>
parents: 17859
diff changeset
185 ("-info.Y". "unyabba")
2465a6a42a60 (Info-suffix-list): Accept -info as suffix;
Richard M. Stallman <rms@gnu.org>
parents: 17859
diff changeset
186 ("-info.gz". "gunzip")
2465a6a42a60 (Info-suffix-list): Accept -info as suffix;
Richard M. Stallman <rms@gnu.org>
parents: 17859
diff changeset
187 ("-info.z". "gunzip")
2465a6a42a60 (Info-suffix-list): Accept -info as suffix;
Richard M. Stallman <rms@gnu.org>
parents: 17859
diff changeset
188 ("-info". nil)
2465a6a42a60 (Info-suffix-list): Accept -info as suffix;
Richard M. Stallman <rms@gnu.org>
parents: 17859
diff changeset
189 ("/index.Z". "uncompress")
2465a6a42a60 (Info-suffix-list): Accept -info as suffix;
Richard M. Stallman <rms@gnu.org>
parents: 17859
diff changeset
190 ("/index.Y". "unyabba")
2465a6a42a60 (Info-suffix-list): Accept -info as suffix;
Richard M. Stallman <rms@gnu.org>
parents: 17859
diff changeset
191 ("/index.gz". "gunzip")
2465a6a42a60 (Info-suffix-list): Accept -info as suffix;
Richard M. Stallman <rms@gnu.org>
parents: 17859
diff changeset
192 ("/index.z". "gunzip")
2465a6a42a60 (Info-suffix-list): Accept -info as suffix;
Richard M. Stallman <rms@gnu.org>
parents: 17859
diff changeset
193 ("/index". nil)
2465a6a42a60 (Info-suffix-list): Accept -info as suffix;
Richard M. Stallman <rms@gnu.org>
parents: 17859
diff changeset
194 (".Z". "uncompress")
2465a6a42a60 (Info-suffix-list): Accept -info as suffix;
Richard M. Stallman <rms@gnu.org>
parents: 17859
diff changeset
195 (".Y". "unyabba")
2465a6a42a60 (Info-suffix-list): Accept -info as suffix;
Richard M. Stallman <rms@gnu.org>
parents: 17859
diff changeset
196 (".gz". "gunzip")
2465a6a42a60 (Info-suffix-list): Accept -info as suffix;
Richard M. Stallman <rms@gnu.org>
parents: 17859
diff changeset
197 (".z". "gunzip")
2465a6a42a60 (Info-suffix-list): Accept -info as suffix;
Richard M. Stallman <rms@gnu.org>
parents: 17859
diff changeset
198 ("". nil)))
2561
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
199 "List of file name suffixes and associated decoding commands.
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
200 Each entry should be (SUFFIX . STRING); the file is given to
6566
248eede22658 (Info-suffix-list): Put empty string last.
Karl Heuer <kwzh@gnu.org>
parents: 6537
diff changeset
201 the command as standard input. If STRING is nil, no decoding is done.
248eede22658 (Info-suffix-list): Put empty string last.
Karl Heuer <kwzh@gnu.org>
parents: 6537
diff changeset
202 Because the SUFFIXes are tried in order, the empty string should
248eede22658 (Info-suffix-list): Put empty string last.
Karl Heuer <kwzh@gnu.org>
parents: 6537
diff changeset
203 be last in the list.")
2561
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
204
13562
80870ef96f18 (info-insert-file-contents-1): Various rewrites.
Richard M. Stallman <rms@gnu.org>
parents: 13287
diff changeset
205 ;; Concatenate SUFFIX onto FILENAME. SUFFIX should start with a dot.
12927
d3cda9e7c55f (Info-suffix-list): For MS-DOS, use gunzip as the only uncompressor,
Richard M. Stallman <rms@gnu.org>
parents: 12892
diff changeset
206 ;; First, on ms-dos, delete some of the extension in FILENAME
d3cda9e7c55f (Info-suffix-list): For MS-DOS, use gunzip as the only uncompressor,
Richard M. Stallman <rms@gnu.org>
parents: 12892
diff changeset
207 ;; to make room.
d3cda9e7c55f (Info-suffix-list): For MS-DOS, use gunzip as the only uncompressor,
Richard M. Stallman <rms@gnu.org>
parents: 12892
diff changeset
208 (defun info-insert-file-contents-1 (filename suffix)
d3cda9e7c55f (Info-suffix-list): For MS-DOS, use gunzip as the only uncompressor,
Richard M. Stallman <rms@gnu.org>
parents: 12892
diff changeset
209 (if (not (eq system-type 'ms-dos))
d3cda9e7c55f (Info-suffix-list): For MS-DOS, use gunzip as the only uncompressor,
Richard M. Stallman <rms@gnu.org>
parents: 12892
diff changeset
210 (concat filename suffix)
d3cda9e7c55f (Info-suffix-list): For MS-DOS, use gunzip as the only uncompressor,
Richard M. Stallman <rms@gnu.org>
parents: 12892
diff changeset
211 (let* ((sans-exts (file-name-sans-extension filename))
13562
80870ef96f18 (info-insert-file-contents-1): Various rewrites.
Richard M. Stallman <rms@gnu.org>
parents: 13287
diff changeset
212 ;; How long is the extension in FILENAME (not counting the dot).
80870ef96f18 (info-insert-file-contents-1): Various rewrites.
Richard M. Stallman <rms@gnu.org>
parents: 13287
diff changeset
213 (ext-len (max 0 (- (length filename) (length sans-exts) 1)))
80870ef96f18 (info-insert-file-contents-1): Various rewrites.
Richard M. Stallman <rms@gnu.org>
parents: 13287
diff changeset
214 ext-left)
13004
0ed37da6f0f3 (Info-suffix-list): Add .inf to MSDOS list.
Richard M. Stallman <rms@gnu.org>
parents: 12947
diff changeset
215 ;; SUFFIX starts with a dot. If FILENAME already has one,
14577
39a431eafb34 (info-insert-file-contents-1) [MSDOS]: Remove leading
Karl Heuer <kwzh@gnu.org>
parents: 14560
diff changeset
216 ;; get rid of the one in SUFFIX (unless suffix is empty).
13562
80870ef96f18 (info-insert-file-contents-1): Various rewrites.
Richard M. Stallman <rms@gnu.org>
parents: 13287
diff changeset
217 (or (and (<= ext-len 0)
13004
0ed37da6f0f3 (Info-suffix-list): Add .inf to MSDOS list.
Richard M. Stallman <rms@gnu.org>
parents: 12947
diff changeset
218 (not (eq (aref filename (1- (length filename))) ?.)))
14577
39a431eafb34 (info-insert-file-contents-1) [MSDOS]: Remove leading
Karl Heuer <kwzh@gnu.org>
parents: 14560
diff changeset
219 (= (length suffix) 0)
13004
0ed37da6f0f3 (Info-suffix-list): Add .inf to MSDOS list.
Richard M. Stallman <rms@gnu.org>
parents: 12947
diff changeset
220 (setq suffix (substring suffix 1)))
13562
80870ef96f18 (info-insert-file-contents-1): Various rewrites.
Richard M. Stallman <rms@gnu.org>
parents: 13287
diff changeset
221 ;; How many chars of that extension should we keep?
80870ef96f18 (info-insert-file-contents-1): Various rewrites.
Richard M. Stallman <rms@gnu.org>
parents: 13287
diff changeset
222 (setq ext-left (min ext-len (max 0 (- 3 (length suffix)))))
12927
d3cda9e7c55f (Info-suffix-list): For MS-DOS, use gunzip as the only uncompressor,
Richard M. Stallman <rms@gnu.org>
parents: 12892
diff changeset
223 ;; Get rid of the rest of the extension, and add SUFFIX.
d3cda9e7c55f (Info-suffix-list): For MS-DOS, use gunzip as the only uncompressor,
Richard M. Stallman <rms@gnu.org>
parents: 12892
diff changeset
224 (concat (substring filename 0 (- (length filename)
d3cda9e7c55f (Info-suffix-list): For MS-DOS, use gunzip as the only uncompressor,
Richard M. Stallman <rms@gnu.org>
parents: 12892
diff changeset
225 (- ext-len ext-left)))
d3cda9e7c55f (Info-suffix-list): For MS-DOS, use gunzip as the only uncompressor,
Richard M. Stallman <rms@gnu.org>
parents: 12892
diff changeset
226 suffix))))
d3cda9e7c55f (Info-suffix-list): For MS-DOS, use gunzip as the only uncompressor,
Richard M. Stallman <rms@gnu.org>
parents: 12892
diff changeset
227
22067
5665490a6f9e (Info-find-node): Use info-file-exists-p
Richard M. Stallman <rms@gnu.org>
parents: 21910
diff changeset
228 (defun info-file-exists-p (filename)
5665490a6f9e (Info-find-node): Use info-file-exists-p
Richard M. Stallman <rms@gnu.org>
parents: 21910
diff changeset
229 (and (file-exists-p filename)
5665490a6f9e (Info-find-node): Use info-file-exists-p
Richard M. Stallman <rms@gnu.org>
parents: 21910
diff changeset
230 (not (file-directory-p filename))))
5665490a6f9e (Info-find-node): Use info-file-exists-p
Richard M. Stallman <rms@gnu.org>
parents: 21910
diff changeset
231
2561
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
232 (defun info-insert-file-contents (filename &optional visit)
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
233 "Insert the contents of an info file in the current buffer.
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
234 Do the right thing if the file has been compressed or zipped."
6566
248eede22658 (Info-suffix-list): Put empty string last.
Karl Heuer <kwzh@gnu.org>
parents: 6537
diff changeset
235 (let ((tail Info-suffix-list)
248eede22658 (Info-suffix-list): Put empty string last.
Karl Heuer <kwzh@gnu.org>
parents: 6537
diff changeset
236 fullname decoder)
248eede22658 (Info-suffix-list): Put empty string last.
Karl Heuer <kwzh@gnu.org>
parents: 6537
diff changeset
237 (if (file-exists-p filename)
12927
d3cda9e7c55f (Info-suffix-list): For MS-DOS, use gunzip as the only uncompressor,
Richard M. Stallman <rms@gnu.org>
parents: 12892
diff changeset
238 ;; FILENAME exists--see if that name contains a suffix.
d3cda9e7c55f (Info-suffix-list): For MS-DOS, use gunzip as the only uncompressor,
Richard M. Stallman <rms@gnu.org>
parents: 12892
diff changeset
239 ;; If so, set DECODE accordingly.
6566
248eede22658 (Info-suffix-list): Put empty string last.
Karl Heuer <kwzh@gnu.org>
parents: 6537
diff changeset
240 (progn
248eede22658 (Info-suffix-list): Put empty string last.
Karl Heuer <kwzh@gnu.org>
parents: 6537
diff changeset
241 (while (and tail
248eede22658 (Info-suffix-list): Put empty string last.
Karl Heuer <kwzh@gnu.org>
parents: 6537
diff changeset
242 (not (string-match
248eede22658 (Info-suffix-list): Put empty string last.
Karl Heuer <kwzh@gnu.org>
parents: 6537
diff changeset
243 (concat (regexp-quote (car (car tail))) "$")
248eede22658 (Info-suffix-list): Put empty string last.
Karl Heuer <kwzh@gnu.org>
parents: 6537
diff changeset
244 filename)))
248eede22658 (Info-suffix-list): Put empty string last.
Karl Heuer <kwzh@gnu.org>
parents: 6537
diff changeset
245 (setq tail (cdr tail)))
248eede22658 (Info-suffix-list): Put empty string last.
Karl Heuer <kwzh@gnu.org>
parents: 6537
diff changeset
246 (setq fullname filename
248eede22658 (Info-suffix-list): Put empty string last.
Karl Heuer <kwzh@gnu.org>
parents: 6537
diff changeset
247 decoder (cdr (car tail))))
12927
d3cda9e7c55f (Info-suffix-list): For MS-DOS, use gunzip as the only uncompressor,
Richard M. Stallman <rms@gnu.org>
parents: 12892
diff changeset
248 ;; Try adding suffixes to FILENAME and see if we can find something.
6566
248eede22658 (Info-suffix-list): Put empty string last.
Karl Heuer <kwzh@gnu.org>
parents: 6537
diff changeset
249 (while (and tail
22067
5665490a6f9e (Info-find-node): Use info-file-exists-p
Richard M. Stallman <rms@gnu.org>
parents: 21910
diff changeset
250 (not (info-file-exists-p (info-insert-file-contents-1
5665490a6f9e (Info-find-node): Use info-file-exists-p
Richard M. Stallman <rms@gnu.org>
parents: 21910
diff changeset
251 filename (car (car tail))))))
6566
248eede22658 (Info-suffix-list): Put empty string last.
Karl Heuer <kwzh@gnu.org>
parents: 6537
diff changeset
252 (setq tail (cdr tail)))
12927
d3cda9e7c55f (Info-suffix-list): For MS-DOS, use gunzip as the only uncompressor,
Richard M. Stallman <rms@gnu.org>
parents: 12892
diff changeset
253 ;; If we found a file with a suffix, set DECODER according to the suffix
d3cda9e7c55f (Info-suffix-list): For MS-DOS, use gunzip as the only uncompressor,
Richard M. Stallman <rms@gnu.org>
parents: 12892
diff changeset
254 ;; and set FULLNAME to the file's actual name.
13004
0ed37da6f0f3 (Info-suffix-list): Add .inf to MSDOS list.
Richard M. Stallman <rms@gnu.org>
parents: 12947
diff changeset
255 (setq fullname (info-insert-file-contents-1 filename (car (car tail)))
6566
248eede22658 (Info-suffix-list): Put empty string last.
Karl Heuer <kwzh@gnu.org>
parents: 6537
diff changeset
256 decoder (cdr (car tail)))
248eede22658 (Info-suffix-list): Put empty string last.
Karl Heuer <kwzh@gnu.org>
parents: 6537
diff changeset
257 (or tail
12927
d3cda9e7c55f (Info-suffix-list): For MS-DOS, use gunzip as the only uncompressor,
Richard M. Stallman <rms@gnu.org>
parents: 12892
diff changeset
258 (error "Can't find %s or any compressed version of it" filename)))
9588
7d465ccfd45b (info-insert-file-contents): Always check for conflict with jka-compr.
Richard M. Stallman <rms@gnu.org>
parents: 9572
diff changeset
259 ;; check for conflict with jka-compr
7d465ccfd45b (info-insert-file-contents): Always check for conflict with jka-compr.
Richard M. Stallman <rms@gnu.org>
parents: 9572
diff changeset
260 (if (and (featurep 'jka-compr)
7d465ccfd45b (info-insert-file-contents): Always check for conflict with jka-compr.
Richard M. Stallman <rms@gnu.org>
parents: 9572
diff changeset
261 (jka-compr-installed-p)
7d465ccfd45b (info-insert-file-contents): Always check for conflict with jka-compr.
Richard M. Stallman <rms@gnu.org>
parents: 9572
diff changeset
262 (jka-compr-get-compression-info fullname))
7d465ccfd45b (info-insert-file-contents): Always check for conflict with jka-compr.
Richard M. Stallman <rms@gnu.org>
parents: 9572
diff changeset
263 (setq decoder nil))
6566
248eede22658 (Info-suffix-list): Put empty string last.
Karl Heuer <kwzh@gnu.org>
parents: 6537
diff changeset
264 (if decoder
19937
f497e74a29aa (Info-suffix-list): Add suffixes for MS-DOS version
Richard M. Stallman <rms@gnu.org>
parents: 19821
diff changeset
265 (progn
f497e74a29aa (Info-suffix-list): Add suffixes for MS-DOS version
Richard M. Stallman <rms@gnu.org>
parents: 19821
diff changeset
266 (insert-file-contents-literally fullname visit)
f497e74a29aa (Info-suffix-list): Add suffixes for MS-DOS version
Richard M. Stallman <rms@gnu.org>
parents: 19821
diff changeset
267 (let ((buffer-read-only nil)
f497e74a29aa (Info-suffix-list): Add suffixes for MS-DOS version
Richard M. Stallman <rms@gnu.org>
parents: 19821
diff changeset
268 (coding-system-for-write 'no-conversion)
f497e74a29aa (Info-suffix-list): Add suffixes for MS-DOS version
Richard M. Stallman <rms@gnu.org>
parents: 19821
diff changeset
269 (default-directory (or (file-name-directory fullname)
f497e74a29aa (Info-suffix-list): Add suffixes for MS-DOS version
Richard M. Stallman <rms@gnu.org>
parents: 19821
diff changeset
270 default-directory)))
f497e74a29aa (Info-suffix-list): Add suffixes for MS-DOS version
Richard M. Stallman <rms@gnu.org>
parents: 19821
diff changeset
271 (call-process-region (point-min) (point-max) decoder t t)))
f497e74a29aa (Info-suffix-list): Add suffixes for MS-DOS version
Richard M. Stallman <rms@gnu.org>
parents: 19821
diff changeset
272 (insert-file-contents fullname visit))))
2561
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
273
22471
39efe6bebb46 (info-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22331
diff changeset
274 ;;;###autoload
39efe6bebb46 (info-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22331
diff changeset
275 (defun info-other-window (&optional file)
39efe6bebb46 (info-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22331
diff changeset
276 "Like `info' but show the Info buffer in another window."
39efe6bebb46 (info-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22331
diff changeset
277 (interactive (if current-prefix-arg
39efe6bebb46 (info-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22331
diff changeset
278 (list (read-file-name "Info file name: " nil nil t))))
39efe6bebb46 (info-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22331
diff changeset
279 (let (same-window-buffer-names)
39efe6bebb46 (info-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22331
diff changeset
280 (info file)))
39efe6bebb46 (info-other-window): New function.
Richard M. Stallman <rms@gnu.org>
parents: 22331
diff changeset
281
10978
e3da01bbdc14 (same-window-buffer-names): Set this only in loaddefs.el,
Richard M. Stallman <rms@gnu.org>
parents: 10957
diff changeset
282 ;;;###autoload (add-hook 'same-window-buffer-names "*info*")
10957
6d3568e33019 (Info-menu): Bind beg with let.
Richard M. Stallman <rms@gnu.org>
parents: 10918
diff changeset
283
6d3568e33019 (Info-menu): Bind beg with let.
Richard M. Stallman <rms@gnu.org>
parents: 10918
diff changeset
284 ;;;###autoload
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285 (defun info (&optional file)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286 "Enter Info, the documentation browser.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 Optional argument FILE specifies the file to examine;
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288 the default is the top-level directory of Info.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 In interactive use, a prefix argument directs this command
14529
6c886dde14b8 (info): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 14424
diff changeset
291 to read a file name from the minibuffer.
6c886dde14b8 (info): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 14424
diff changeset
292
6c886dde14b8 (info): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 14424
diff changeset
293 The search path for Info files is in the variable `Info-directory-list'.
6c886dde14b8 (info): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 14424
diff changeset
294 The top-level Info directory is made by combining all the files named `dir'
6c886dde14b8 (info): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 14424
diff changeset
295 in all the directories in that path."
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
296 (interactive (if current-prefix-arg
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297 (list (read-file-name "Info file name: " nil nil t))))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298 (if file
23175
ea4f70068321 (info): Don't add parens if FILE already has them.
Karl Heuer <kwzh@gnu.org>
parents: 23038
diff changeset
299 (progn
ea4f70068321 (info): Don't add parens if FILE already has them.
Karl Heuer <kwzh@gnu.org>
parents: 23038
diff changeset
300 (pop-to-buffer "*info*")
ea4f70068321 (info): Don't add parens if FILE already has them.
Karl Heuer <kwzh@gnu.org>
parents: 23038
diff changeset
301 ;; If argument already contains parentheses, don't add another set
ea4f70068321 (info): Don't add parens if FILE already has them.
Karl Heuer <kwzh@gnu.org>
parents: 23038
diff changeset
302 ;; since the argument will then be parsed improperly. This also
ea4f70068321 (info): Don't add parens if FILE already has them.
Karl Heuer <kwzh@gnu.org>
parents: 23038
diff changeset
303 ;; has the added benefit of allowing node names to be included
ea4f70068321 (info): Don't add parens if FILE already has them.
Karl Heuer <kwzh@gnu.org>
parents: 23038
diff changeset
304 ;; following the parenthesized filename.
ea4f70068321 (info): Don't add parens if FILE already has them.
Karl Heuer <kwzh@gnu.org>
parents: 23038
diff changeset
305 (if (and (stringp file) (string-match "(.*)" file))
ea4f70068321 (info): Don't add parens if FILE already has them.
Karl Heuer <kwzh@gnu.org>
parents: 23038
diff changeset
306 (Info-goto-node file)
ea4f70068321 (info): Don't add parens if FILE already has them.
Karl Heuer <kwzh@gnu.org>
parents: 23038
diff changeset
307 (Info-goto-node (concat "(" file ")"))))
21704
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
308 (if (get-buffer "*info*")
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
309 (pop-to-buffer "*info*")
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
310 (Info-directory))))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
311
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
312 ;;;###autoload
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
313 (defun info-standalone ()
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
314 "Run Emacs as a standalone Info reader.
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
315 Usage: emacs -f info-standalone [filename]
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
316 In standalone mode, \\<Info-mode-map>\\[Info-exit] exits Emacs itself."
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
317 (setq Info-standalone t)
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
318 (if (and command-line-args-left
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
319 (not (string-match "^-" (car command-line-args-left))))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
320 (condition-case err
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
321 (progn
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
322 (info (car command-line-args-left))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
323 (setq command-line-args-left (cdr command-line-args-left)))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
324 (error (send-string-to-terminal
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
325 (format "%s\n" (if (eq (car-safe err) 'error)
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
326 (nth 1 err) err)))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
327 (save-buffers-kill-emacs)))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
328 (info)))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
329
23923
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
330 ;; See if the the accessible portion of the buffer begins with a node
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
331 ;; delimiter, and the node header line which follows matches REGEXP.
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
332 ;; Typically, this test will be followed by a loop that examines the
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
333 ;; rest of the buffer with (search-forward "\n\^_"), and it's a pity
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
334 ;; to have the overhead of this special test inside the loop.
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
335
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
336 ;; This function changes match-data, but supposedly the caller might
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
337 ;; want to use the results of re-search-backward.
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
338
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
339 ;; The return value is the value of point at the beginning of matching
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
340 ;; REGERXP, if the function succeeds, nil otherwise.
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
341 (defun Info-node-at-bob-matching (regexp)
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
342 (and (bobp) ; are we at beginning of buffer?
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
343 (looking-at "\^_") ; does it begin with node delimiter?
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
344 (let (beg)
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
345 (forward-line 1)
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
346 (setq beg (point))
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
347 (forward-line 1) ; does the line after delimiter match REGEXP?
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
348 (re-search-backward regexp beg t))))
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
349
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
350 ;; Go to an info node specified as separate filename and nodename.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
351 ;; no-going-back is non-nil if recovering from an error in this function;
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
352 ;; it says do not attempt further (recursive) error recovery.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
353 (defun Info-find-node (filename nodename &optional no-going-back)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
354 ;; Convert filename to lower case if not found as specified.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
355 ;; Expand it.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
356 (if filename
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
357 (let (temp temp-downcase found)
22692
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
358 (setq filename (substitute-in-file-name filename))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
359 (if (string= (downcase filename) "dir")
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
360 (setq found t)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
361 (let ((dirs (if (string-match "^\\./" filename)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
362 ;; If specified name starts with `./'
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
363 ;; then just try current directory.
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
364 '("./")
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
365 (if (file-name-absolute-p filename)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
366 ;; No point in searching for an
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
367 ;; absolute file name
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
368 '(nil)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
369 (if Info-additional-directory-list
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
370 (append Info-directory-list
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
371 Info-additional-directory-list)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
372 Info-directory-list)))))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
373 ;; Search the directory list for file FILENAME.
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
374 (while (and dirs (not found))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
375 (setq temp (expand-file-name filename (car dirs)))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
376 (setq temp-downcase
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
377 (expand-file-name (downcase filename) (car dirs)))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
378 ;; Try several variants of specified name.
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
379 (let ((suffix-list Info-suffix-list))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
380 (while (and suffix-list (not found))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
381 (cond ((info-file-exists-p
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
382 (info-insert-file-contents-1
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
383 temp (car (car suffix-list))))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
384 (setq found temp))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
385 ((info-file-exists-p
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
386 (info-insert-file-contents-1
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
387 temp-downcase (car (car suffix-list))))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
388 (setq found temp-downcase)))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
389 (setq suffix-list (cdr suffix-list))))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
390 (setq dirs (cdr dirs)))))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
391 (if found
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
392 (setq filename found)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
393 (error "Info file %s does not exist" filename))))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
394 ;; Record the node we are leaving.
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
395 (if (and Info-current-file (not no-going-back))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
396 (setq Info-history
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
397 (cons (list Info-current-file Info-current-node (point))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
398 Info-history)))
21704
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
399 ;; Go into info buffer.
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
400 (or (eq major-mode 'Info-mode) (pop-to-buffer "*info*"))
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
401 (buffer-disable-undo (current-buffer))
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
402 (or (eq major-mode 'Info-mode)
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
403 (Info-mode))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
404 (widen)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
405 (setq Info-current-node nil)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
406 (unwind-protect
22951
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
407 ;; Bind case-fold-search in case the user sets it to nil.
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
408 (let ((case-fold-search t))
22692
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
409 ;; Switch files if necessary
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
410 (or (null filename)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
411 (equal Info-current-file filename)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
412 (let ((buffer-read-only nil))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
413 (setq Info-current-file nil
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
414 Info-current-subfile nil
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
415 Info-current-file-completions nil
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
416 buffer-file-name nil)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
417 (erase-buffer)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
418 (if (eq filename t)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
419 (Info-insert-dir)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
420 (info-insert-file-contents filename t)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
421 (setq default-directory (file-name-directory filename)))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
422 (set-buffer-modified-p nil)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
423 ;; See whether file has a tag table. Record the location if yes.
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
424 (goto-char (point-max))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
425 (forward-line -8)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
426 ;; Use string-equal, not equal, to ignore text props.
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
427 (if (not (or (string-equal nodename "*")
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
428 (not
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
429 (search-forward "\^_\nEnd tag table\n" nil t))))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
430 (let (pos)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
431 ;; We have a tag table. Find its beginning.
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
432 ;; Is this an indirect file?
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
433 (search-backward "\nTag table:\n")
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
434 (setq pos (point))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
435 (if (save-excursion
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
436 (forward-line 2)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
437 (looking-at "(Indirect)\n"))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
438 ;; It is indirect. Copy it to another buffer
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
439 ;; and record that the tag table is in that buffer.
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
440 (let ((buf (current-buffer))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
441 (tagbuf
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
442 (or Info-tag-table-buffer
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
443 (generate-new-buffer " *info tag table*"))))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
444 (setq Info-tag-table-buffer tagbuf)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
445 (save-excursion
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
446 (set-buffer tagbuf)
1484
6c2a714566d3 Rename buffer-flush-undo to buffer-disable-undo.
Richard M. Stallman <rms@gnu.org>
parents: 1477
diff changeset
447 (buffer-disable-undo (current-buffer))
22692
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
448 (setq case-fold-search t)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
449 (erase-buffer)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
450 (insert-buffer-substring buf))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
451 (set-marker Info-tag-table-marker
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
452 (match-end 0) tagbuf))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
453 (set-marker Info-tag-table-marker pos)))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
454 (set-marker Info-tag-table-marker nil))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
455 (setq Info-current-file
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
456 (if (eq filename t) "dir" filename))))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
457 ;; Use string-equal, not equal, to ignore text props.
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
458 (if (string-equal nodename "*")
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
459 (progn (setq Info-current-node nodename)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
460 (Info-set-mode-line))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
461 ;; Possibilities:
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
462 ;;
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
463 ;; 1. Anchor found in tag table
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
464 ;; 2. Anchor *not* in tag table
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
465 ;;
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
466 ;; 3. Node found in tag table
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
467 ;; 4. Node *not* found in tag table, but found in file
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
468 ;; 5. Node *not* in tag table, and *not* in file
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
469 ;;
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
470 ;; *Or* the same, but in an indirect subfile.
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
471
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
472 ;; Search file for a suitable node.
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
473 (let ((guesspos (point-min))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
474 (regexp
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
475 (concat "\\(Node:\\|Ref:\\) *"
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
476 (regexp-quote nodename)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
477 " *[,\t\n\177]")))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
478
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
479 ;; First, search a tag table, if any
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
480 (if (marker-position Info-tag-table-marker)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
481
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
482 (let (found-in-tag-table
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
483 found-mode
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
484 (m Info-tag-table-marker))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
485 (save-excursion
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
486 (set-buffer (marker-buffer m))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
487 (goto-char m)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
488 (beginning-of-line) ; so re-search will work.
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
489
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
490 ;; Search tag table
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
491 (setq found-in-tag-table
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
492 (re-search-forward regexp nil t))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
493 (if found-in-tag-table
23904
74c3c643e90c (Info-find-node): Add 1 to the position read from the
Eli Zaretskii <eliz@gnu.org>
parents: 23819
diff changeset
494 (setq guesspos (1+ (read (current-buffer)))))
22692
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
495 (setq found-mode major-mode))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
496
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
497 ;; Indirect file among split files
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
498 (if found-in-tag-table
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
499 (progn
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
500 ;; If this is an indirect file, determine
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
501 ;; which file really holds this node and
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
502 ;; read it in.
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
503 (if (not (eq found-mode 'Info-mode))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
504 ;; Note that the current buffer must be
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
505 ;; the *info* buffer on entry to
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
506 ;; Info-read-subfile. Thus the hackery
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
507 ;; above.
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
508 (setq guesspos (Info-read-subfile guesspos)))))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
509
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
510 ;; Handle anchor
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
511 (if (and found-in-tag-table
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
512 (string-equal "Ref:" (match-string 1)))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
513 (goto-char guesspos)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
514
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
515 ;; Else we may have a node, which we search for:
22902
18839ab53285 (Info-find-node): Once again, use byte-to-position.
Richard M. Stallman <rms@gnu.org>
parents: 22894
diff changeset
516 (goto-char (max (point-min)
18839ab53285 (Info-find-node): Once again, use byte-to-position.
Richard M. Stallman <rms@gnu.org>
parents: 22894
diff changeset
517 (- (byte-to-position guesspos) 1000)))
22692
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
518 ;; Now search from our advised position
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
519 ;; (or from beg of buffer)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
520 ;; to find the actual node.
23923
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
521 ;; First, check whether the node is right
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
522 ;; where we are, in case the buffer begins
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
523 ;; with a node.
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
524 (or (Info-node-at-bob-matching regexp)
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
525 (catch 'foo
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
526 (while (search-forward "\n\^_" nil t)
23904
74c3c643e90c (Info-find-node): Add 1 to the position read from the
Eli Zaretskii <eliz@gnu.org>
parents: 23819
diff changeset
527 (forward-line 1)
23923
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
528 (let ((beg (point)))
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
529 (forward-line 1)
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
530 (if (re-search-backward regexp beg t)
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
531 (progn
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
532 (beginning-of-line)
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
533 (throw 'foo t)))))
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
534 (error
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
535 "No such anchor in tag table or node in tag table or file: %s"
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
536 nodename)))))
23416
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
537 (goto-char (max (point-min) (- guesspos 1000)))
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
538 ;; Now search from our advised position (or from beg of buffer)
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
539 ;; to find the actual node.
23923
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
540 ;; First, check whether the node is right where we are, in case
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
541 ;; the buffer begins with a node.
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
542 (or (Info-node-at-bob-matching regexp)
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
543 (catch 'foo
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
544 (while (search-forward "\n\^_" nil t)
23904
74c3c643e90c (Info-find-node): Add 1 to the position read from the
Eli Zaretskii <eliz@gnu.org>
parents: 23819
diff changeset
545 (forward-line 1)
23923
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
546 (let ((beg (point)))
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
547 (forward-line 1)
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
548 (if (re-search-backward regexp beg t)
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
549 (throw 'foo t))))
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
550 (error "No such node: %s" nodename)))))
22863
58584d6a8237 (Info-find-node): Position at the beginning of the node
Richard M. Stallman <rms@gnu.org>
parents: 22761
diff changeset
551 (Info-select-node)
58584d6a8237 (Info-find-node): Position at the beginning of the node
Richard M. Stallman <rms@gnu.org>
parents: 22761
diff changeset
552 (goto-char (point-min))))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
553 ;; If we did not finish finding the specified node,
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
554 ;; go back to the previous one.
6716
9ce2d1a2c155 (Info-find-node): Don't try to backstep if no history.
Karl Heuer <kwzh@gnu.org>
parents: 6624
diff changeset
555 (or Info-current-node no-going-back (null Info-history)
22692
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
556 (let ((hist (car Info-history)))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
557 (setq Info-history (cdr Info-history))
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
558 (Info-find-node (nth 0 hist) (nth 1 hist) t)
578a6d997580 (Info-find-node): Handle cross references to an @anchor.
Richard M. Stallman <rms@gnu.org>
parents: 22643
diff changeset
559 (goto-char (nth 2 hist))))))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
560
1979
0582c70595f1 * info.el (Info-directory-list): Doc fix; it is set according to
Jim Blandy <jimb@redhat.com>
parents: 1971
diff changeset
561 ;; Cache the contents of the (virtual) dir file, once we have merged
0582c70595f1 * info.el (Info-directory-list): Doc fix; it is set according to
Jim Blandy <jimb@redhat.com>
parents: 1971
diff changeset
562 ;; it for the first time, so we can save time subsequently.
1971
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
563 (defvar Info-dir-contents nil)
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
564
1979
0582c70595f1 * info.el (Info-directory-list): Doc fix; it is set according to
Jim Blandy <jimb@redhat.com>
parents: 1971
diff changeset
565 ;; Cache for the directory we decided to use for the default-directory
0582c70595f1 * info.el (Info-directory-list): Doc fix; it is set according to
Jim Blandy <jimb@redhat.com>
parents: 1971
diff changeset
566 ;; of the merged dir text.
0582c70595f1 * info.el (Info-directory-list): Doc fix; it is set according to
Jim Blandy <jimb@redhat.com>
parents: 1971
diff changeset
567 (defvar Info-dir-contents-directory nil)
0582c70595f1 * info.el (Info-directory-list): Doc fix; it is set according to
Jim Blandy <jimb@redhat.com>
parents: 1971
diff changeset
568
3836
04f1cff889f4 (Info-insert-dir): Record file attributes of files used.
Richard M. Stallman <rms@gnu.org>
parents: 3565
diff changeset
569 ;; Record the file attributes of all the files from which we
04f1cff889f4 (Info-insert-dir): Record file attributes of files used.
Richard M. Stallman <rms@gnu.org>
parents: 3565
diff changeset
570 ;; constructed Info-dir-contents.
04f1cff889f4 (Info-insert-dir): Record file attributes of files used.
Richard M. Stallman <rms@gnu.org>
parents: 3565
diff changeset
571 (defvar Info-dir-file-attributes nil)
04f1cff889f4 (Info-insert-dir): Record file attributes of files used.
Richard M. Stallman <rms@gnu.org>
parents: 3565
diff changeset
572
23416
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
573 (defvar Info-dir-file-name nil)
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
574
1971
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
575 ;; Construct the Info directory node by merging the files named `dir'
1979
0582c70595f1 * info.el (Info-directory-list): Doc fix; it is set according to
Jim Blandy <jimb@redhat.com>
parents: 1971
diff changeset
576 ;; from various directories. Set the *info* buffer's
0582c70595f1 * info.el (Info-directory-list): Doc fix; it is set according to
Jim Blandy <jimb@redhat.com>
parents: 1971
diff changeset
577 ;; default-directory to the first directory we actually get any text
0582c70595f1 * info.el (Info-directory-list): Doc fix; it is set according to
Jim Blandy <jimb@redhat.com>
parents: 1971
diff changeset
578 ;; from.
1971
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
579 (defun Info-insert-dir ()
3836
04f1cff889f4 (Info-insert-dir): Record file attributes of files used.
Richard M. Stallman <rms@gnu.org>
parents: 3565
diff changeset
580 (if (and Info-dir-contents Info-dir-file-attributes
04f1cff889f4 (Info-insert-dir): Record file attributes of files used.
Richard M. Stallman <rms@gnu.org>
parents: 3565
diff changeset
581 ;; Verify that none of the files we used has changed
04f1cff889f4 (Info-insert-dir): Record file attributes of files used.
Richard M. Stallman <rms@gnu.org>
parents: 3565
diff changeset
582 ;; since we used it.
04f1cff889f4 (Info-insert-dir): Record file attributes of files used.
Richard M. Stallman <rms@gnu.org>
parents: 3565
diff changeset
583 (eval (cons 'and
04f1cff889f4 (Info-insert-dir): Record file attributes of files used.
Richard M. Stallman <rms@gnu.org>
parents: 3565
diff changeset
584 (mapcar '(lambda (elt)
23981
bba55b2f2577 (Info-insert-dir): Chase symlinks for file-attributes.
Richard M. Stallman <rms@gnu.org>
parents: 23923
diff changeset
585 (let ((curr (file-attributes
bba55b2f2577 (Info-insert-dir): Chase symlinks for file-attributes.
Richard M. Stallman <rms@gnu.org>
parents: 23923
diff changeset
586 ;; Handle symlinks
bba55b2f2577 (Info-insert-dir): Chase symlinks for file-attributes.
Richard M. Stallman <rms@gnu.org>
parents: 23923
diff changeset
587 (file-truename (car elt)))))
bba55b2f2577 (Info-insert-dir): Chase symlinks for file-attributes.
Richard M. Stallman <rms@gnu.org>
parents: 23923
diff changeset
588
7911
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
589 ;; Don't compare the access time.
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
590 (if curr (setcar (nthcdr 4 curr) 0))
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
591 (setcar (nthcdr 4 (cdr elt)) 0)
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
592 (equal (cdr elt) curr)))
3836
04f1cff889f4 (Info-insert-dir): Record file attributes of files used.
Richard M. Stallman <rms@gnu.org>
parents: 3565
diff changeset
593 Info-dir-file-attributes))))
23416
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
594 (progn
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
595 (insert Info-dir-contents)
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
596 (goto-char (point-min)))
1971
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
597 (let ((dirs Info-directory-list)
22951
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
598 ;; Bind this in case the user sets it to nil.
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
599 (case-fold-search t)
23416
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
600 ;; This is set non-nil if we find a problem in some input files.
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
601 problems
3212
cd8f8468a190 (Info-insert-dir): Ignore duplicate directories.
Richard M. Stallman <rms@gnu.org>
parents: 3127
diff changeset
602 buffers buffer others nodes dirs-done)
1979
0582c70595f1 * info.el (Info-directory-list): Doc fix; it is set according to
Jim Blandy <jimb@redhat.com>
parents: 1971
diff changeset
603
7911
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
604 (setq Info-dir-file-attributes nil)
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
605
1979
0582c70595f1 * info.el (Info-directory-list): Doc fix; it is set according to
Jim Blandy <jimb@redhat.com>
parents: 1971
diff changeset
606 ;; Search the directory list for the directory file.
1971
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
607 (while dirs
5271
c415cc48a084 (Info-insert-dir): Compute truename just once for each dir.
Richard M. Stallman <rms@gnu.org>
parents: 5146
diff changeset
608 (let ((truename (file-truename (expand-file-name (car dirs)))))
c415cc48a084 (Info-insert-dir): Compute truename just once for each dir.
Richard M. Stallman <rms@gnu.org>
parents: 5146
diff changeset
609 (or (member truename dirs-done)
c415cc48a084 (Info-insert-dir): Compute truename just once for each dir.
Richard M. Stallman <rms@gnu.org>
parents: 5146
diff changeset
610 (member (directory-file-name truename) dirs-done)
c415cc48a084 (Info-insert-dir): Compute truename just once for each dir.
Richard M. Stallman <rms@gnu.org>
parents: 5146
diff changeset
611 ;; Try several variants of specified name.
c415cc48a084 (Info-insert-dir): Compute truename just once for each dir.
Richard M. Stallman <rms@gnu.org>
parents: 5146
diff changeset
612 ;; Try upcasing, appending `.info', or both.
7911
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
613 (let* (file
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
614 (attrs
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
615 (or
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
616 (progn (setq file (expand-file-name "dir" truename))
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
617 (file-attributes file))
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
618 (progn (setq file (expand-file-name "DIR" truename))
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
619 (file-attributes file))
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
620 (progn (setq file (expand-file-name "dir.info" truename))
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
621 (file-attributes file))
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
622 (progn (setq file (expand-file-name "DIR.INFO" truename))
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
623 (file-attributes file)))))
5271
c415cc48a084 (Info-insert-dir): Compute truename just once for each dir.
Richard M. Stallman <rms@gnu.org>
parents: 5146
diff changeset
624 (setq dirs-done
c415cc48a084 (Info-insert-dir): Compute truename just once for each dir.
Richard M. Stallman <rms@gnu.org>
parents: 5146
diff changeset
625 (cons truename
c415cc48a084 (Info-insert-dir): Compute truename just once for each dir.
Richard M. Stallman <rms@gnu.org>
parents: 5146
diff changeset
626 (cons (directory-file-name truename)
c415cc48a084 (Info-insert-dir): Compute truename just once for each dir.
Richard M. Stallman <rms@gnu.org>
parents: 5146
diff changeset
627 dirs-done)))
7911
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
628 (if attrs
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
629 (save-excursion
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
630 (or buffers
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
631 (message "Composing main Info directory..."))
20421
6d1f6745878f (Info-insert-dir): Use leading space in buffer name.
Karl Heuer <kwzh@gnu.org>
parents: 19937
diff changeset
632 (set-buffer (generate-new-buffer " info dir"))
22863
58584d6a8237 (Info-find-node): Position at the beginning of the node
Richard M. Stallman <rms@gnu.org>
parents: 22761
diff changeset
633 (condition-case nil
58584d6a8237 (Info-find-node): Position at the beginning of the node
Richard M. Stallman <rms@gnu.org>
parents: 22761
diff changeset
634 (progn
58584d6a8237 (Info-find-node): Position at the beginning of the node
Richard M. Stallman <rms@gnu.org>
parents: 22761
diff changeset
635 (insert-file-contents file)
23416
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
636 (make-local-variable 'Info-dir-file-name)
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
637 (setq Info-dir-file-name file)
22863
58584d6a8237 (Info-find-node): Position at the beginning of the node
Richard M. Stallman <rms@gnu.org>
parents: 22761
diff changeset
638 (setq buffers (cons (current-buffer) buffers)
58584d6a8237 (Info-find-node): Position at the beginning of the node
Richard M. Stallman <rms@gnu.org>
parents: 22761
diff changeset
639 Info-dir-file-attributes
58584d6a8237 (Info-find-node): Position at the beginning of the node
Richard M. Stallman <rms@gnu.org>
parents: 22761
diff changeset
640 (cons (cons file attrs)
58584d6a8237 (Info-find-node): Position at the beginning of the node
Richard M. Stallman <rms@gnu.org>
parents: 22761
diff changeset
641 Info-dir-file-attributes)))
58584d6a8237 (Info-find-node): Position at the beginning of the node
Richard M. Stallman <rms@gnu.org>
parents: 22761
diff changeset
642 (error (kill-buffer (current-buffer))))))))
16462
de67834f456d (Info-insert-dir): Ensure directory ends with slash.
Karl Heuer <kwzh@gnu.org>
parents: 16399
diff changeset
643 (or (cdr dirs) (setq Info-dir-contents-directory
de67834f456d (Info-insert-dir): Ensure directory ends with slash.
Karl Heuer <kwzh@gnu.org>
parents: 16399
diff changeset
644 (file-name-as-directory (car dirs))))
7911
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
645 (setq dirs (cdr dirs))))
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
646
6716
9ce2d1a2c155 (Info-find-node): Don't try to backstep if no history.
Karl Heuer <kwzh@gnu.org>
parents: 6624
diff changeset
647 (or buffers
14664
f77b58df548c (Info-index): If fail, go back to original node.
Richard M. Stallman <rms@gnu.org>
parents: 14577
diff changeset
648 (error "Can't find the Info directory node"))
1979
0582c70595f1 * info.el (Info-directory-list): Doc fix; it is set according to
Jim Blandy <jimb@redhat.com>
parents: 1971
diff changeset
649 ;; Distinguish the dir file that comes with Emacs from all the
3212
cd8f8468a190 (Info-insert-dir): Ignore duplicate directories.
Richard M. Stallman <rms@gnu.org>
parents: 3127
diff changeset
650 ;; others. Yes, that is really what this is supposed to do.
cd8f8468a190 (Info-insert-dir): Ignore duplicate directories.
Richard M. Stallman <rms@gnu.org>
parents: 3127
diff changeset
651 ;; If it doesn't work, fix it.
1971
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
652 (setq buffer (car buffers)
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
653 others (cdr buffers))
1979
0582c70595f1 * info.el (Info-directory-list): Doc fix; it is set according to
Jim Blandy <jimb@redhat.com>
parents: 1971
diff changeset
654
15304
d78c3fd6a0ab (Info-insert-dir): Fix default directory.
Karl Heuer <kwzh@gnu.org>
parents: 15177
diff changeset
655 ;; Insert the entire original dir file as a start; note that we've
d78c3fd6a0ab (Info-insert-dir): Fix default directory.
Karl Heuer <kwzh@gnu.org>
parents: 15177
diff changeset
656 ;; already saved its default directory to use as the default
d78c3fd6a0ab (Info-insert-dir): Fix default directory.
Karl Heuer <kwzh@gnu.org>
parents: 15177
diff changeset
657 ;; directory for the whole concatenation.
1971
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
658 (insert-buffer buffer)
1979
0582c70595f1 * info.el (Info-directory-list): Doc fix; it is set according to
Jim Blandy <jimb@redhat.com>
parents: 1971
diff changeset
659
1971
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
660 ;; Look at each of the other buffers one by one.
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
661 (while others
23416
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
662 (let ((other (car others))
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
663 this-buffer-nodes)
1971
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
664 ;; In each, find all the menus.
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
665 (save-excursion
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
666 (set-buffer other)
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
667 (goto-char (point-min))
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
668 ;; Find each menu, and add an elt to NODES for it.
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
669 (while (re-search-forward "^\\* Menu:" nil t)
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
670 (let (beg nodename end)
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
671 (forward-line 1)
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
672 (setq beg (point))
23904
74c3c643e90c (Info-find-node): Add 1 to the position read from the
Eli Zaretskii <eliz@gnu.org>
parents: 23819
diff changeset
673 (or (search-backward "\n\^_" nil 'move)
74c3c643e90c (Info-find-node): Add 1 to the position read from the
Eli Zaretskii <eliz@gnu.org>
parents: 23819
diff changeset
674 (looking-at "\^_")
74c3c643e90c (Info-find-node): Add 1 to the position read from the
Eli Zaretskii <eliz@gnu.org>
parents: 23819
diff changeset
675 (signal 'search-failed (list "\n\^_")))
1971
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
676 (search-forward "Node: ")
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
677 (setq nodename (Info-following-node-name))
6339
f0f62abb621b (Info-insert-dir): Use printable escapes instead of embedding literal control
Karl Heuer <kwzh@gnu.org>
parents: 6121
diff changeset
678 (search-forward "\n\^_" nil 'move)
1971
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
679 (beginning-of-line)
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
680 (setq end (point))
23416
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
681 (setq this-buffer-nodes
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
682 (cons (list nodename other beg end)
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
683 this-buffer-nodes))))
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
684 (if (assoc-ignore-case "top" this-buffer-nodes)
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
685 (setq nodes (nconc this-buffer-nodes nodes))
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
686 (setq problems t)
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
687 (message "No `top' node in %s" Info-dir-file-name))))
1971
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
688 (setq others (cdr others)))
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
689 ;; Add to the main menu a menu item for each other node.
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
690 (re-search-forward "^\\* Menu:")
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
691 (forward-line 1)
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
692 (let ((menu-items '("top"))
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
693 (nodes nodes)
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
694 (case-fold-search t)
6339
f0f62abb621b (Info-insert-dir): Use printable escapes instead of embedding literal control
Karl Heuer <kwzh@gnu.org>
parents: 6121
diff changeset
695 (end (save-excursion (search-forward "\^_" nil t) (point))))
1971
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
696 (while nodes
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
697 (let ((nodename (car (car nodes))))
6537
f5ab0b6b9640 (Info-insert-dir): Add a save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 6339
diff changeset
698 (save-excursion
f5ab0b6b9640 (Info-insert-dir): Add a save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 6339
diff changeset
699 (or (member (downcase nodename) menu-items)
21641
1174b1d6cbf6 (Info-menu): Allow extra spaces at start of menu item.
Richard M. Stallman <rms@gnu.org>
parents: 21197
diff changeset
700 (re-search-forward (concat "^\\* +"
6537
f5ab0b6b9640 (Info-insert-dir): Add a save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 6339
diff changeset
701 (regexp-quote nodename)
f5ab0b6b9640 (Info-insert-dir): Add a save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 6339
diff changeset
702 "::")
f5ab0b6b9640 (Info-insert-dir): Add a save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 6339
diff changeset
703 end t)
f5ab0b6b9640 (Info-insert-dir): Add a save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 6339
diff changeset
704 (progn
f5ab0b6b9640 (Info-insert-dir): Add a save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 6339
diff changeset
705 (insert "* " nodename "::" "\n")
f5ab0b6b9640 (Info-insert-dir): Add a save-excursion.
Richard M. Stallman <rms@gnu.org>
parents: 6339
diff changeset
706 (setq menu-items (cons nodename menu-items))))))
1971
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
707 (setq nodes (cdr nodes))))
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
708 ;; Now take each node of each of the other buffers
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
709 ;; and merge it into the main buffer.
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
710 (while nodes
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
711 (let ((nodename (car (car nodes))))
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
712 (goto-char (point-min))
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
713 ;; Find the like-named node in the main buffer.
23904
74c3c643e90c (Info-find-node): Add 1 to the position read from the
Eli Zaretskii <eliz@gnu.org>
parents: 23819
diff changeset
714 (if (re-search-forward (concat "^\^_.*\n.*Node: "
1971
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
715 (regexp-quote nodename)
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
716 "[,\n\t]")
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
717 nil t)
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
718 (progn
6339
f0f62abb621b (Info-insert-dir): Use printable escapes instead of embedding literal control
Karl Heuer <kwzh@gnu.org>
parents: 6121
diff changeset
719 (search-forward "\n\^_" nil 'move)
8913
65a8b9c507dc (Info-insert-dir): Insert newlines before rather than
Richard M. Stallman <rms@gnu.org>
parents: 8805
diff changeset
720 (beginning-of-line)
65a8b9c507dc (Info-insert-dir): Insert newlines before rather than
Richard M. Stallman <rms@gnu.org>
parents: 8805
diff changeset
721 (insert "\n"))
1971
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
722 ;; If none exists, add one.
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
723 (goto-char (point-max))
8069
dfef58fcda75 (Info-insert-dir): Capitalize `node' when inserting it.
Richard M. Stallman <rms@gnu.org>
parents: 8018
diff changeset
724 (insert "\^_\nFile: dir\tNode: " nodename "\n\n* Menu:\n\n"))
1971
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
725 ;; Merge the text from the other buffer's menu
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
726 ;; into the menu in the like-named node in the main buffer.
8913
65a8b9c507dc (Info-insert-dir): Insert newlines before rather than
Richard M. Stallman <rms@gnu.org>
parents: 8805
diff changeset
727 (apply 'insert-buffer-substring (cdr (car nodes))))
1971
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
728 (setq nodes (cdr nodes)))
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
729 ;; Kill all the buffers we just made.
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
730 (while buffers
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
731 (kill-buffer (car buffers))
7911
185c1f12db67 (Info-insert-dir): Ignore access times when comparing
Richard M. Stallman <rms@gnu.org>
parents: 7859
diff changeset
732 (setq buffers (cdr buffers)))
23416
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
733 (goto-char (point-min))
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
734 (if problems
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
735 (message "Composing main Info directory...problems encountered, see `*Messages*'")
83f51f5fb749 (Info-insert-dir): Detect and report problems
Richard M. Stallman <rms@gnu.org>
parents: 23175
diff changeset
736 (message "Composing main Info directory...done")))
1979
0582c70595f1 * info.el (Info-directory-list): Doc fix; it is set according to
Jim Blandy <jimb@redhat.com>
parents: 1971
diff changeset
737 (setq Info-dir-contents (buffer-string)))
0582c70595f1 * info.el (Info-directory-list): Doc fix; it is set according to
Jim Blandy <jimb@redhat.com>
parents: 1971
diff changeset
738 (setq default-directory Info-dir-contents-directory))
1971
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
739
16981
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
740 ;; Note that on entry to this function the current-buffer must be the
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
741 ;; *info* buffer; not the info tags buffer.
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
742 (defun Info-read-subfile (nodepos)
16399
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
743 ;; NODEPOS is either a position (in the Info file as a whole,
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
744 ;; not relative to a subfile) or the name of a subfile.
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
745 (let (lastfilepos
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
746 lastfilename)
16399
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
747 (if (numberp nodepos)
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
748 (save-excursion
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
749 (set-buffer (marker-buffer Info-tag-table-marker))
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
750 (goto-char (point-min))
23904
74c3c643e90c (Info-find-node): Add 1 to the position read from the
Eli Zaretskii <eliz@gnu.org>
parents: 23819
diff changeset
751 (or (looking-at "\^_")
74c3c643e90c (Info-find-node): Add 1 to the position read from the
Eli Zaretskii <eliz@gnu.org>
parents: 23819
diff changeset
752 (search-forward "\n\^_"))
16399
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
753 (forward-line 2)
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
754 (catch 'foo
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
755 (while (not (looking-at "\^_"))
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
756 (if (not (eolp))
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
757 (let ((beg (point))
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
758 thisfilepos thisfilename)
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
759 (search-forward ": ")
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
760 (setq thisfilename (buffer-substring beg (- (point) 2)))
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
761 (setq thisfilepos (read (current-buffer)))
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
762 ;; read in version 19 stops at the end of number.
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
763 ;; Advance to the next line.
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
764 (forward-line 1)
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
765 (if (> thisfilepos nodepos)
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
766 (throw 'foo t))
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
767 (setq lastfilename thisfilename)
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
768 (setq lastfilepos thisfilepos))
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
769 (forward-line 1)))))
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
770 (setq lastfilename nodepos)
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
771 (setq lastfilepos 0))
16981
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
772 ;; Assume previous buffer is in Info-mode.
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
773 ;; (set-buffer (get-buffer "*info*"))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
774 (or (equal Info-current-subfile lastfilename)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
775 (let ((buffer-read-only nil))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
776 (setq buffer-file-name nil)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
777 (widen)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
778 (erase-buffer)
2561
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
779 (info-insert-file-contents lastfilename)
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
780 (set-buffer-modified-p nil)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
781 (setq Info-current-subfile lastfilename)))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
782 (goto-char (point-min))
23904
74c3c643e90c (Info-find-node): Add 1 to the position read from the
Eli Zaretskii <eliz@gnu.org>
parents: 23819
diff changeset
783 (if (looking-at "\^_")
74c3c643e90c (Info-find-node): Add 1 to the position read from the
Eli Zaretskii <eliz@gnu.org>
parents: 23819
diff changeset
784 (forward-char 1)
74c3c643e90c (Info-find-node): Add 1 to the position read from the
Eli Zaretskii <eliz@gnu.org>
parents: 23819
diff changeset
785 (search-forward "\n\^_"))
16399
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
786 (if (numberp nodepos)
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
787 (+ (- nodepos lastfilepos) (point)))))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
788
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
789 ;; Select the info node that point is in.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
790 (defun Info-select-node ()
22951
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
791 ;; Bind this in case the user sets it to nil.
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
792 (let ((case-fold-search t))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
793 (save-excursion
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
794 ;; Find beginning of node.
23904
74c3c643e90c (Info-find-node): Add 1 to the position read from the
Eli Zaretskii <eliz@gnu.org>
parents: 23819
diff changeset
795 (if (search-backward "\n\^_" nil 'move)
74c3c643e90c (Info-find-node): Add 1 to the position read from the
Eli Zaretskii <eliz@gnu.org>
parents: 23819
diff changeset
796 (forward-line 2)
74c3c643e90c (Info-find-node): Add 1 to the position read from the
Eli Zaretskii <eliz@gnu.org>
parents: 23819
diff changeset
797 (if (looking-at "\^_")
74c3c643e90c (Info-find-node): Add 1 to the position read from the
Eli Zaretskii <eliz@gnu.org>
parents: 23819
diff changeset
798 (forward-line 1)
74c3c643e90c (Info-find-node): Add 1 to the position read from the
Eli Zaretskii <eliz@gnu.org>
parents: 23819
diff changeset
799 (signal 'search-failed (list "\n\^_"))))
22951
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
800 ;; Get nodename spelled as it is in the node.
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
801 (re-search-forward "Node:[ \t]*")
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
802 (setq Info-current-node
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
803 (buffer-substring-no-properties (point)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
804 (progn
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
805 (skip-chars-forward "^,\t\n")
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
806 (point))))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
807 (Info-set-mode-line)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
808 ;; Find the end of it, and narrow.
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
809 (beginning-of-line)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
810 (let (active-expression)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
811 (narrow-to-region (point)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
812 (if (re-search-forward "\n[\^_\f]" nil t)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
813 (prog1
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
814 (1- (point))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
815 (if (looking-at "[\n\^_\f]*execute: ")
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
816 (progn
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
817 (goto-char (match-end 0))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
818 (setq active-expression
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
819 (read (current-buffer))))))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
820 (point-max)))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
821 (if Info-enable-active-nodes (eval active-expression))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
822 (if Info-fontify (Info-fontify-node))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
823 (run-hooks 'Info-selection-hook)))))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
824
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
825 (defun Info-set-mode-line ()
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
826 (setq mode-line-buffer-identification
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
827 (concat
17859
27d5828e6c50 (Info-set-mode-line): Add some spaces at the beginning.
Richard M. Stallman <rms@gnu.org>
parents: 17430
diff changeset
828 " Info: ("
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
829 (if Info-current-file
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
830 (file-name-nondirectory Info-current-file)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
831 "")
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
832 ")"
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
833 (or Info-current-node ""))))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
834
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
835 ;; Go to an info node specified with a filename-and-nodename string
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
836 ;; of the sort that is found in pointers in nodes.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
837
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
838 (defun Info-goto-node (nodename)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
839 "Go to info node named NAME. Give just NODENAME or (FILENAME)NODENAME."
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
840 (interactive (list (Info-read-node-name "Goto node: ")))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
841 (let (filename)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
842 (string-match "\\s *\\((\\s *\\([^\t)]*\\)\\s *)\\s *\\|\\)\\(.*\\)"
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
843 nodename)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
844 (setq filename (if (= (match-beginning 1) (match-end 1))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
845 ""
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
846 (substring nodename (match-beginning 2) (match-end 2)))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
847 nodename (substring nodename (match-beginning 3) (match-end 3)))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
848 (let ((trim (string-match "\\s *\\'" filename)))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
849 (if trim (setq filename (substring filename 0 trim))))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
850 (let ((trim (string-match "\\s *\\'" nodename)))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
851 (if trim (setq nodename (substring nodename 0 trim))))
12433
17387b7fe5b8 (Info-goto-node, Info-search):
Richard M. Stallman <rms@gnu.org>
parents: 12294
diff changeset
852 (if transient-mark-mode (deactivate-mark))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
853 (Info-find-node (if (equal filename "") nil filename)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
854 (if (equal nodename "") "Top" nodename))))
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
855
22760
e080fa4636c7 (Info-read-node-name-1, Info-read-node-name):
Richard M. Stallman <rms@gnu.org>
parents: 22733
diff changeset
856 (defvar Info-read-node-completion-table)
e080fa4636c7 (Info-read-node-name-1, Info-read-node-name):
Richard M. Stallman <rms@gnu.org>
parents: 22733
diff changeset
857
12779
5b3d83e51b91 (Info-read-node-name-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12646
diff changeset
858 ;; This function is used as the "completion table" while reading a node name.
22760
e080fa4636c7 (Info-read-node-name-1, Info-read-node-name):
Richard M. Stallman <rms@gnu.org>
parents: 22733
diff changeset
859 ;; It does completion using the alist in Info-read-node-completion-table
12779
5b3d83e51b91 (Info-read-node-name-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12646
diff changeset
860 ;; unless STRING starts with an open-paren.
5b3d83e51b91 (Info-read-node-name-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12646
diff changeset
861 (defun Info-read-node-name-1 (string predicate code)
5b3d83e51b91 (Info-read-node-name-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12646
diff changeset
862 (let ((no-completion (and (> (length string) 0) (eq (aref string 0) ?\())))
5b3d83e51b91 (Info-read-node-name-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12646
diff changeset
863 (cond ((eq code nil)
5b3d83e51b91 (Info-read-node-name-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12646
diff changeset
864 (if no-completion
5b3d83e51b91 (Info-read-node-name-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12646
diff changeset
865 string
22760
e080fa4636c7 (Info-read-node-name-1, Info-read-node-name):
Richard M. Stallman <rms@gnu.org>
parents: 22733
diff changeset
866 (try-completion string Info-read-node-completion-table predicate)))
12779
5b3d83e51b91 (Info-read-node-name-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12646
diff changeset
867 ((eq code t)
5b3d83e51b91 (Info-read-node-name-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12646
diff changeset
868 (if no-completion
5b3d83e51b91 (Info-read-node-name-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12646
diff changeset
869 nil
22760
e080fa4636c7 (Info-read-node-name-1, Info-read-node-name):
Richard M. Stallman <rms@gnu.org>
parents: 22733
diff changeset
870 (all-completions string Info-read-node-completion-table predicate)))
12779
5b3d83e51b91 (Info-read-node-name-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12646
diff changeset
871 ((eq code 'lambda)
5b3d83e51b91 (Info-read-node-name-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12646
diff changeset
872 (if no-completion
5b3d83e51b91 (Info-read-node-name-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12646
diff changeset
873 t
22760
e080fa4636c7 (Info-read-node-name-1, Info-read-node-name):
Richard M. Stallman <rms@gnu.org>
parents: 22733
diff changeset
874 (assoc string Info-read-node-completion-table))))))
12779
5b3d83e51b91 (Info-read-node-name-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 12646
diff changeset
875
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
876 (defun Info-read-node-name (prompt &optional default)
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
877 (let* ((completion-ignore-case t)
22760
e080fa4636c7 (Info-read-node-name-1, Info-read-node-name):
Richard M. Stallman <rms@gnu.org>
parents: 22733
diff changeset
878 (Info-read-node-completion-table (Info-build-node-completions))
17140
a6f8fb00d93e (Info-read-node-name): Caused completing-read to force
Karl Heuer <kwzh@gnu.org>
parents: 16981
diff changeset
879 (nodename (completing-read prompt 'Info-read-node-name-1 nil t)))
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
880 (if (equal nodename "")
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
881 (or default
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
882 (Info-read-node-name prompt))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
883 nodename)))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
884
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
885 (defun Info-build-node-completions ()
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
886 (or Info-current-file-completions
22951
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
887 (let ((compl nil)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
888 ;; Bind this in case the user sets it to nil.
23923
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
889 (case-fold-search t)
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
890 (node-regexp "Node: *\\([^,\n]*\\) *[,\n\t]"))
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
891 (save-excursion
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
892 (save-restriction
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
893 (if (marker-buffer Info-tag-table-marker)
16981
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
894 (let ((marker Info-tag-table-marker))
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
895 (set-buffer (marker-buffer marker))
6049
32df2b4d67cf (Info-build-node-completions): Add a call to widen.
Richard M. Stallman <rms@gnu.org>
parents: 5555
diff changeset
896 (widen)
16981
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
897 (goto-char marker)
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
898 (while (re-search-forward "\nNode: \\(.*\\)\177" nil t)
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
899 (setq compl
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
900 (cons (list (buffer-substring (match-beginning 1)
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
901 (match-end 1)))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
902 compl))))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
903 (widen)
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
904 (goto-char (point-min))
23923
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
905 ;; If the buffer begins with a node header, process that first.
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
906 (if (Info-node-at-bob-matching node-regexp)
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
907 (setq compl (list (buffer-substring (match-beginning 1)
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
908 (match-end 1)))))
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
909 ;; Now for the rest of the nodes.
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
910 (while (search-forward "\n\^_" nil t)
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
911 (forward-line 1)
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
912 (let ((beg (point)))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
913 (forward-line 1)
23923
950f2c278c9a (Info-node-at-bob-matching): New function.
Eli Zaretskii <eliz@gnu.org>
parents: 23904
diff changeset
914 (if (re-search-backward node-regexp beg t)
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
915 (setq compl
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
916 (cons (list (buffer-substring (match-beginning 1)
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
917 (match-end 1)))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
918 compl))))))))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
919 (setq Info-current-file-completions compl))))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
920
540
0840eff2ecd5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 359
diff changeset
921 (defun Info-restore-point (hl)
0840eff2ecd5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 359
diff changeset
922 "If this node has been visited, restore the point value when we left."
6049
32df2b4d67cf (Info-build-node-completions): Add a call to widen.
Richard M. Stallman <rms@gnu.org>
parents: 5555
diff changeset
923 (while hl
32df2b4d67cf (Info-build-node-completions): Add a call to widen.
Richard M. Stallman <rms@gnu.org>
parents: 5555
diff changeset
924 (if (and (equal (nth 0 (car hl)) Info-current-file)
11527
7956811d4d9a (info-insert-file-contents): Set default-directory
Richard M. Stallman <rms@gnu.org>
parents: 11064
diff changeset
925 ;; Use string-equal, not equal, to ignore text props.
7956811d4d9a (info-insert-file-contents): Set default-directory
Richard M. Stallman <rms@gnu.org>
parents: 11064
diff changeset
926 (string-equal (nth 1 (car hl)) Info-current-node))
6049
32df2b4d67cf (Info-build-node-completions): Add a call to widen.
Richard M. Stallman <rms@gnu.org>
parents: 5555
diff changeset
927 (progn
6121
a9caf92da1d3 (Info-restore-point): Don't wipe out hl before using it.
Karl Heuer <kwzh@gnu.org>
parents: 6049
diff changeset
928 (goto-char (nth 2 (car hl)))
a9caf92da1d3 (Info-restore-point): Don't wipe out hl before using it.
Karl Heuer <kwzh@gnu.org>
parents: 6049
diff changeset
929 (setq hl nil)) ;terminate the while at next iter
6049
32df2b4d67cf (Info-build-node-completions): Add a call to widen.
Richard M. Stallman <rms@gnu.org>
parents: 5555
diff changeset
930 (setq hl (cdr hl)))))
540
0840eff2ecd5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 359
diff changeset
931
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
932 (defvar Info-last-search nil
3084
a4341d92948a (Info-edit, Info-last-search, Info-enable-edit):
Richard M. Stallman <rms@gnu.org>
parents: 3047
diff changeset
933 "Default regexp for \\<Info-mode-map>\\[Info-search] command to search for.")
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
934
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
935 (defun Info-search (regexp)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
936 "Search for REGEXP, starting from point, and select node it's found in."
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
937 (interactive "sSearch (regexp): ")
12433
17387b7fe5b8 (Info-goto-node, Info-search):
Richard M. Stallman <rms@gnu.org>
parents: 12294
diff changeset
938 (if transient-mark-mode (deactivate-mark))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
939 (if (equal regexp "")
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
940 (setq regexp Info-last-search)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
941 (setq Info-last-search regexp))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
942 (let ((found ()) current
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
943 (onode Info-current-node)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
944 (ofile Info-current-file)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
945 (opoint (point))
16399
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
946 (ostart (window-start))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
947 (osubfile Info-current-subfile))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
948 (save-excursion
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
949 (save-restriction
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
950 (widen)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
951 (if (null Info-current-subfile)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
952 (progn (re-search-forward regexp) (setq found (point)))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
953 (condition-case err
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
954 (progn (re-search-forward regexp) (setq found (point)))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
955 (search-failed nil)))))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
956 (if (not found) ;can only happen in subfile case -- else would have erred
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
957 (unwind-protect
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
958 (let ((list ()))
16981
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
959 (save-excursion
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
960 (set-buffer (marker-buffer Info-tag-table-marker))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
961 (goto-char (point-min))
16981
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
962 (search-forward "\n\^_\nIndirect:")
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
963 (save-restriction
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
964 (narrow-to-region (point)
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
965 (progn (search-forward "\n\^_")
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
966 (1- (point))))
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
967 (goto-char (point-min))
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
968 (search-forward (concat "\n" osubfile ": "))
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
969 (beginning-of-line)
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
970 (while (not (eobp))
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
971 (re-search-forward "\\(^.*\\): [0-9]+$")
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
972 (goto-char (+ (match-end 1) 2))
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
973 (setq list (cons (cons (read (current-buffer))
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
974 (buffer-substring
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
975 (match-beginning 1) (match-end 1)))
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
976 list))
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
977 (goto-char (1+ (match-end 0))))
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
978 (setq list (nreverse list)
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
979 current (car (car list))
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
980 list (cdr list))))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
981 (while list
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
982 (message "Searching subfile %s..." (cdr (car list)))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
983 (Info-read-subfile (car (car list)))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
984 (setq list (cdr list))
8069
dfef58fcda75 (Info-insert-dir): Capitalize `node' when inserting it.
Richard M. Stallman <rms@gnu.org>
parents: 8018
diff changeset
985 ;; (goto-char (point-min))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
986 (if (re-search-forward regexp nil t)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
987 (setq found (point) list ())))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
988 (if found
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
989 (message "")
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
990 (signal 'search-failed (list regexp))))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
991 (if (not found)
16399
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
992 (progn (Info-read-subfile osubfile)
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
993 (goto-char opoint)
16399
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
994 (Info-select-node)
f73d53a1b448 (Info-read-subfile): Allow a file name as arg.
Richard M. Stallman <rms@gnu.org>
parents: 16202
diff changeset
995 (set-window-start (selected-window) ostart)))))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
996 (widen)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
997 (goto-char found)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
998 (Info-select-node)
11527
7956811d4d9a (info-insert-file-contents): Set default-directory
Richard M. Stallman <rms@gnu.org>
parents: 11064
diff changeset
999 ;; Use string-equal, not equal, to ignore text props.
7956811d4d9a (info-insert-file-contents): Set default-directory
Richard M. Stallman <rms@gnu.org>
parents: 11064
diff changeset
1000 (or (and (string-equal onode Info-current-node)
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1001 (equal ofile Info-current-file))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1002 (setq Info-history (cons (list ofile onode opoint)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1003 Info-history)))))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1004
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1005 ;; Extract the value of the node-pointer named NAME.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1006 ;; If there is none, use ERRORNAME in the error message;
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1007 ;; if ERRORNAME is nil, just return nil.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1008 (defun Info-extract-pointer (name &optional errorname)
22951
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1009 ;; Bind this in case the user sets it to nil.
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1010 (let ((case-fold-search t))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1011 (save-excursion
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1012 (goto-char (point-min))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1013 (forward-line 1)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1014 (if (re-search-backward (concat name ":") nil t)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1015 (progn
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1016 (goto-char (match-end 0))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1017 (Info-following-node-name))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1018 (if (eq errorname t)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1019 nil
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1020 (error "Node has no %s" (capitalize (or errorname name))))))))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1021
1971
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
1022 ;; Return the node name in the buffer following point.
b540866e8a79 (Info-insert-dir): Make menu items in Top node
Richard M. Stallman <rms@gnu.org>
parents: 1821
diff changeset
1023 ;; ALLOWEDCHARS, if non-nil, goes within [...] to make a regexp
16981
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
1024 ;; saying which chars may appear in the node name.
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1025 (defun Info-following-node-name (&optional allowedchars)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026 (skip-chars-forward " \t")
13287
f25084d29719 (Info-following-node-name, Info-extract-menu-node-name)
Richard M. Stallman <rms@gnu.org>
parents: 13085
diff changeset
1027 (buffer-substring-no-properties
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028 (point)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1029 (progn
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1030 (while (looking-at (concat "[" (or allowedchars "^,\t\n") "]"))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1031 (skip-chars-forward (concat (or allowedchars "^,\t\n") "("))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1032 (if (looking-at "(")
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1033 (skip-chars-forward "^)")))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1034 (skip-chars-backward " ")
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1035 (point))))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1036
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1037 (defun Info-next ()
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1038 "Go to the next node of this node."
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1039 (interactive)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1040 (Info-goto-node (Info-extract-pointer "next")))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1041
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1042 (defun Info-prev ()
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1043 "Go to the previous node of this node."
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1044 (interactive)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1045 (Info-goto-node (Info-extract-pointer "prev[ious]*" "previous")))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1046
21910
702383d93b75 (Info-up): New arg SAME-FILE: don't move to different file.
Richard M. Stallman <rms@gnu.org>
parents: 21806
diff changeset
1047 (defun Info-up (&optional same-file)
702383d93b75 (Info-up): New arg SAME-FILE: don't move to different file.
Richard M. Stallman <rms@gnu.org>
parents: 21806
diff changeset
1048 "Go to the superior node of this node.
702383d93b75 (Info-up): New arg SAME-FILE: don't move to different file.
Richard M. Stallman <rms@gnu.org>
parents: 21806
diff changeset
1049 If SAME-FILE is non-nil, do not move to a different Info file."
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1050 (interactive)
21910
702383d93b75 (Info-up): New arg SAME-FILE: don't move to different file.
Richard M. Stallman <rms@gnu.org>
parents: 21806
diff changeset
1051 (let ((node (Info-extract-pointer "up")))
702383d93b75 (Info-up): New arg SAME-FILE: don't move to different file.
Richard M. Stallman <rms@gnu.org>
parents: 21806
diff changeset
1052 (and same-file
702383d93b75 (Info-up): New arg SAME-FILE: don't move to different file.
Richard M. Stallman <rms@gnu.org>
parents: 21806
diff changeset
1053 (string-match "^(" node)
702383d93b75 (Info-up): New arg SAME-FILE: don't move to different file.
Richard M. Stallman <rms@gnu.org>
parents: 21806
diff changeset
1054 (error "Up node is in another Info file"))
702383d93b75 (Info-up): New arg SAME-FILE: don't move to different file.
Richard M. Stallman <rms@gnu.org>
parents: 21806
diff changeset
1055 (Info-goto-node node))
540
0840eff2ecd5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 359
diff changeset
1056 (Info-restore-point Info-history))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1057
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1058 (defun Info-last ()
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1059 "Go back to the last node visited."
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1060 (interactive)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1061 (or Info-history
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1062 (error "This is the first Info node you looked at"))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1063 (let (filename nodename opoint)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1064 (setq filename (car (car Info-history)))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1065 (setq nodename (car (cdr (car Info-history))))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1066 (setq opoint (car (cdr (cdr (car Info-history)))))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1067 (setq Info-history (cdr Info-history))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1068 (Info-find-node filename nodename)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1069 (setq Info-history (cdr Info-history))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1070 (goto-char opoint)))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1071
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1072 (defun Info-directory ()
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1073 "Go to the Info directory node."
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1074 (interactive)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1075 (Info-find-node "dir" "top"))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1076
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1077 (defun Info-follow-reference (footnotename)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1078 "Follow cross reference named NAME to the node it refers to.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1079 NAME may be an abbreviation of the reference name."
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1080 (interactive
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1081 (let ((completion-ignore-case t)
22951
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1082 (case-fold-search t)
5555
38f8bfd91cca (Info-follow-reference): If point is not in middle of a
Richard M. Stallman <rms@gnu.org>
parents: 5482
diff changeset
1083 completions default alt-default (start-point (point)) str i bol eol)
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1084 (save-excursion
5555
38f8bfd91cca (Info-follow-reference): If point is not in middle of a
Richard M. Stallman <rms@gnu.org>
parents: 5482
diff changeset
1085 ;; Store end and beginning of line.
38f8bfd91cca (Info-follow-reference): If point is not in middle of a
Richard M. Stallman <rms@gnu.org>
parents: 5482
diff changeset
1086 (end-of-line)
38f8bfd91cca (Info-follow-reference): If point is not in middle of a
Richard M. Stallman <rms@gnu.org>
parents: 5482
diff changeset
1087 (setq eol (point))
38f8bfd91cca (Info-follow-reference): If point is not in middle of a
Richard M. Stallman <rms@gnu.org>
parents: 5482
diff changeset
1088 (beginning-of-line)
38f8bfd91cca (Info-follow-reference): If point is not in middle of a
Richard M. Stallman <rms@gnu.org>
parents: 5482
diff changeset
1089 (setq bol (point))
38f8bfd91cca (Info-follow-reference): If point is not in middle of a
Richard M. Stallman <rms@gnu.org>
parents: 5482
diff changeset
1090
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1091 (goto-char (point-min))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1092 (while (re-search-forward "\\*note[ \n\t]*\\([^:]*\\):" nil t)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1093 (setq str (buffer-substring
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1094 (match-beginning 1)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1095 (1- (point))))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1096 ;; See if this one should be the default.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1097 (and (null default)
5146
aa2236a14893 (Info-follow-reference): Correct one-off error in comparing start-point.
Richard M. Stallman <rms@gnu.org>
parents: 5091
diff changeset
1098 (<= (match-beginning 0) start-point)
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1099 (<= start-point (point))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1100 (setq default t))
5555
38f8bfd91cca (Info-follow-reference): If point is not in middle of a
Richard M. Stallman <rms@gnu.org>
parents: 5482
diff changeset
1101 ;; See if this one should be the alternate default.
38f8bfd91cca (Info-follow-reference): If point is not in middle of a
Richard M. Stallman <rms@gnu.org>
parents: 5482
diff changeset
1102 (and (null alt-default)
38f8bfd91cca (Info-follow-reference): If point is not in middle of a
Richard M. Stallman <rms@gnu.org>
parents: 5482
diff changeset
1103 (and (<= bol (match-beginning 0))
38f8bfd91cca (Info-follow-reference): If point is not in middle of a
Richard M. Stallman <rms@gnu.org>
parents: 5482
diff changeset
1104 (<= (point) eol))
38f8bfd91cca (Info-follow-reference): If point is not in middle of a
Richard M. Stallman <rms@gnu.org>
parents: 5482
diff changeset
1105 (setq alt-default t))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1106 (setq i 0)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1107 (while (setq i (string-match "[ \n\t]+" str i))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1108 (setq str (concat (substring str 0 i) " "
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1109 (substring str (match-end 0))))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1110 (setq i (1+ i)))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1111 ;; Record as a completion and perhaps as default.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1112 (if (eq default t) (setq default str))
5555
38f8bfd91cca (Info-follow-reference): If point is not in middle of a
Richard M. Stallman <rms@gnu.org>
parents: 5482
diff changeset
1113 (if (eq alt-default t) (setq alt-default str))
16609
21c4e4e580a9 (Info-follow-reference): Add each cross-reference to
Karl Heuer <kwzh@gnu.org>
parents: 16590
diff changeset
1114 ;; Don't add this string if it's a duplicate.
21c4e4e580a9 (Info-follow-reference): Add each cross-reference to
Karl Heuer <kwzh@gnu.org>
parents: 16590
diff changeset
1115 ;; We use a loop instead of "(assoc str completions)" because
21c4e4e580a9 (Info-follow-reference): Add each cross-reference to
Karl Heuer <kwzh@gnu.org>
parents: 16590
diff changeset
1116 ;; we want to do a case-insensitive compare.
21c4e4e580a9 (Info-follow-reference): Add each cross-reference to
Karl Heuer <kwzh@gnu.org>
parents: 16590
diff changeset
1117 (let ((tail completions)
21c4e4e580a9 (Info-follow-reference): Add each cross-reference to
Karl Heuer <kwzh@gnu.org>
parents: 16590
diff changeset
1118 (tem (downcase str)))
21c4e4e580a9 (Info-follow-reference): Add each cross-reference to
Karl Heuer <kwzh@gnu.org>
parents: 16590
diff changeset
1119 (while (and tail
21c4e4e580a9 (Info-follow-reference): Add each cross-reference to
Karl Heuer <kwzh@gnu.org>
parents: 16590
diff changeset
1120 (not (string-equal tem (downcase (car (car tail))))))
21c4e4e580a9 (Info-follow-reference): Add each cross-reference to
Karl Heuer <kwzh@gnu.org>
parents: 16590
diff changeset
1121 (setq tail (cdr tail)))
21c4e4e580a9 (Info-follow-reference): Add each cross-reference to
Karl Heuer <kwzh@gnu.org>
parents: 16590
diff changeset
1122 (or tail
21c4e4e580a9 (Info-follow-reference): Add each cross-reference to
Karl Heuer <kwzh@gnu.org>
parents: 16590
diff changeset
1123 (setq completions
21c4e4e580a9 (Info-follow-reference): Add each cross-reference to
Karl Heuer <kwzh@gnu.org>
parents: 16590
diff changeset
1124 (cons (cons str nil)
21c4e4e580a9 (Info-follow-reference): Add each cross-reference to
Karl Heuer <kwzh@gnu.org>
parents: 16590
diff changeset
1125 completions))))))
5555
38f8bfd91cca (Info-follow-reference): If point is not in middle of a
Richard M. Stallman <rms@gnu.org>
parents: 5482
diff changeset
1126 ;; If no good default was found, try an alternate.
38f8bfd91cca (Info-follow-reference): If point is not in middle of a
Richard M. Stallman <rms@gnu.org>
parents: 5482
diff changeset
1127 (or default
38f8bfd91cca (Info-follow-reference): If point is not in middle of a
Richard M. Stallman <rms@gnu.org>
parents: 5482
diff changeset
1128 (setq default alt-default))
38f8bfd91cca (Info-follow-reference): If point is not in middle of a
Richard M. Stallman <rms@gnu.org>
parents: 5482
diff changeset
1129 ;; If only one cross-reference found, then make it default.
38f8bfd91cca (Info-follow-reference): If point is not in middle of a
Richard M. Stallman <rms@gnu.org>
parents: 5482
diff changeset
1130 (if (eq (length completions) 1)
38f8bfd91cca (Info-follow-reference): If point is not in middle of a
Richard M. Stallman <rms@gnu.org>
parents: 5482
diff changeset
1131 (setq default (car (car completions))))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1132 (if completions
3565
bd87ecca04f6 (Info-follow-reference): Fix completion defaulting.
Richard M. Stallman <rms@gnu.org>
parents: 3451
diff changeset
1133 (let ((input (completing-read (if default
bd87ecca04f6 (Info-follow-reference): Fix completion defaulting.
Richard M. Stallman <rms@gnu.org>
parents: 3451
diff changeset
1134 (concat "Follow reference named: ("
bd87ecca04f6 (Info-follow-reference): Fix completion defaulting.
Richard M. Stallman <rms@gnu.org>
parents: 3451
diff changeset
1135 default ") ")
bd87ecca04f6 (Info-follow-reference): Fix completion defaulting.
Richard M. Stallman <rms@gnu.org>
parents: 3451
diff changeset
1136 "Follow reference named: ")
bd87ecca04f6 (Info-follow-reference): Fix completion defaulting.
Richard M. Stallman <rms@gnu.org>
parents: 3451
diff changeset
1137 completions nil t)))
bd87ecca04f6 (Info-follow-reference): Fix completion defaulting.
Richard M. Stallman <rms@gnu.org>
parents: 3451
diff changeset
1138 (list (if (equal input "")
bd87ecca04f6 (Info-follow-reference): Fix completion defaulting.
Richard M. Stallman <rms@gnu.org>
parents: 3451
diff changeset
1139 default input)))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1140 (error "No cross-references in this node"))))
23038
10ad03c5d326 (Info-follow-reference): Nice error msg if there was no arg.
Richard M. Stallman <rms@gnu.org>
parents: 23019
diff changeset
1141
10ad03c5d326 (Info-follow-reference): Nice error msg if there was no arg.
Richard M. Stallman <rms@gnu.org>
parents: 23019
diff changeset
1142 (unless footnotename
10ad03c5d326 (Info-follow-reference): Nice error msg if there was no arg.
Richard M. Stallman <rms@gnu.org>
parents: 23019
diff changeset
1143 (error "No reference was specified"))
10ad03c5d326 (Info-follow-reference): Nice error msg if there was no arg.
Richard M. Stallman <rms@gnu.org>
parents: 23019
diff changeset
1144
22951
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1145 (let (target beg i (str (concat "\\*note " (regexp-quote footnotename)))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1146 (case-fold-search t))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1147 (while (setq i (string-match " " str i))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1148 (setq str (concat (substring str 0 i) "[ \t\n]+" (substring str (1+ i))))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1149 (setq i (+ i 6)))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1150 (save-excursion
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1151 (goto-char (point-min))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1152 (or (re-search-forward str nil t)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1153 (error "No cross-reference named %s" footnotename))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1154 (goto-char (+ (match-beginning 0) 5))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1155 (setq target
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1156 (Info-extract-menu-node-name "Bad format cross reference" t)))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1157 (while (setq i (string-match "[ \t\n]+" target i))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1158 (setq target (concat (substring target 0 i) " "
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1159 (substring target (match-end 0))))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1160 (setq i (+ i 1)))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1161 (Info-goto-node target)))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1162
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1163 (defun Info-extract-menu-node-name (&optional errmessage multi-line)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1164 (skip-chars-forward " \t\n")
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1165 (let ((beg (point))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1166 str i)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1167 (skip-chars-forward "^:")
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1168 (forward-char 1)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1169 (setq str
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1170 (if (looking-at ":")
13287
f25084d29719 (Info-following-node-name, Info-extract-menu-node-name)
Richard M. Stallman <rms@gnu.org>
parents: 13085
diff changeset
1171 (buffer-substring-no-properties beg (1- (point)))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1172 (skip-chars-forward " \t\n")
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1173 (Info-following-node-name (if multi-line "^.,\t" "^.,\t\n"))))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1174 (while (setq i (string-match "\n" str i))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1175 (aset str i ?\ ))
10918
a78b47b38c46 (Info-extract-menu-node-name): Collapse multiple spaces.
Richard M. Stallman <rms@gnu.org>
parents: 10758
diff changeset
1176 ;; Collapse multiple spaces.
a78b47b38c46 (Info-extract-menu-node-name): Collapse multiple spaces.
Richard M. Stallman <rms@gnu.org>
parents: 10758
diff changeset
1177 (while (string-match " +" str)
a78b47b38c46 (Info-extract-menu-node-name): Collapse multiple spaces.
Richard M. Stallman <rms@gnu.org>
parents: 10758
diff changeset
1178 (setq str (replace-match " " t t str)))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1179 str))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1180
7837
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1181 ;; No one calls this.
1484
6c2a714566d3 Rename buffer-flush-undo to buffer-disable-undo.
Richard M. Stallman <rms@gnu.org>
parents: 1477
diff changeset
1182 ;;(defun Info-menu-item-sequence (list)
6c2a714566d3 Rename buffer-flush-undo to buffer-disable-undo.
Richard M. Stallman <rms@gnu.org>
parents: 1477
diff changeset
1183 ;; (while list
7837
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1184 ;; (Info-menu (car list))
1484
6c2a714566d3 Rename buffer-flush-undo to buffer-disable-undo.
Richard M. Stallman <rms@gnu.org>
parents: 1477
diff changeset
1185 ;; (setq list (cdr list))))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1186
22761
ad14990a5efc (Info-complete-menu-buffer): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 22760
diff changeset
1187 (defvar Info-complete-menu-buffer)
ad14990a5efc (Info-complete-menu-buffer): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 22760
diff changeset
1188
7837
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1189 (defun Info-complete-menu-item (string predicate action)
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1190 (let ((case-fold-search t))
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1191 (cond ((eq action nil)
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1192 (let (completions
21641
1174b1d6cbf6 (Info-menu): Allow extra spaces at start of menu item.
Richard M. Stallman <rms@gnu.org>
parents: 21197
diff changeset
1193 (pattern (concat "\n\\* +\\("
7837
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1194 (regexp-quote string)
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1195 "[^:\t\n]*\\):")))
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1196 (save-excursion
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1197 (set-buffer Info-complete-menu-buffer)
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1198 (goto-char (point-min))
13566
1121cd08e87f (Info-complete-menu-item): Don't treat `* Menu:' as a menu item.
Richard M. Stallman <rms@gnu.org>
parents: 13562
diff changeset
1199 (search-forward "\n* Menu:")
7837
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1200 (while (re-search-forward pattern nil t)
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1201 (setq completions (cons (cons (format "%s"
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1202 (buffer-substring
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1203 (match-beginning 1)
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1204 (match-end 1)))
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1205 (match-beginning 1))
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1206 completions))))
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1207 (try-completion string completions predicate)))
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1208 ((eq action t)
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1209 (let (completions
21641
1174b1d6cbf6 (Info-menu): Allow extra spaces at start of menu item.
Richard M. Stallman <rms@gnu.org>
parents: 21197
diff changeset
1210 (pattern (concat "\n\\* +\\("
7837
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1211 (regexp-quote string)
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1212 "[^:\t\n]*\\):")))
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1213 (save-excursion
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1214 (set-buffer Info-complete-menu-buffer)
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1215 (goto-char (point-min))
13566
1121cd08e87f (Info-complete-menu-item): Don't treat `* Menu:' as a menu item.
Richard M. Stallman <rms@gnu.org>
parents: 13562
diff changeset
1216 (search-forward "\n* Menu:")
7837
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1217 (while (re-search-forward pattern nil t)
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1218 (setq completions (cons (cons (format "%s"
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1219 (buffer-substring
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1220 (match-beginning 1)
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1221 (match-end 1)))
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1222 (match-beginning 1))
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1223 completions))))
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1224 (all-completions string completions predicate)))
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1225 (t
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1226 (save-excursion
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1227 (set-buffer Info-complete-menu-buffer)
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1228 (goto-char (point-min))
13566
1121cd08e87f (Info-complete-menu-item): Don't treat `* Menu:' as a menu item.
Richard M. Stallman <rms@gnu.org>
parents: 13562
diff changeset
1229 (search-forward "\n* Menu:")
21641
1174b1d6cbf6 (Info-menu): Allow extra spaces at start of menu item.
Richard M. Stallman <rms@gnu.org>
parents: 21197
diff changeset
1230 (re-search-forward (concat "\n\\* +"
7837
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1231 (regexp-quote string)
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1232 ":")
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1233 nil t))))))
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1234
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1235
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1236 (defun Info-menu (menu-item)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1237 "Go to node for menu item named (or abbreviated) NAME.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1238 Completion is allowed, and the menu item point is on is the default."
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1239 (interactive
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1240 (let ((completions '())
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1241 ;; If point is within a menu item, use that item as the default
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1242 (default nil)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1243 (p (point))
10957
6d3568e33019 (Info-menu): Bind beg with let.
Richard M. Stallman <rms@gnu.org>
parents: 10918
diff changeset
1244 beg
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1245 (last nil))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1246 (save-excursion
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1247 (goto-char (point-min))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1248 (if (not (search-forward "\n* menu:" nil t))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1249 (error "No menu in this node"))
7837
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1250 (setq beg (point))
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1251 (and (< (point) p)
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1252 (save-excursion
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1253 (goto-char p)
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1254 (end-of-line)
23819
2e335a66e659 (Info-menu): Don't return error if point is between menu header and
Markus Rost <rost@math.uni-bielefeld.de>
parents: 23533
diff changeset
1255 (if (re-search-backward "\n\\* +\\([^:\t\n]*\\):" beg t)
2e335a66e659 (Info-menu): Don't return error if point is between menu header and
Markus Rost <rost@math.uni-bielefeld.de>
parents: 23533
diff changeset
1256 (setq default (format "%s" (buffer-substring
2e335a66e659 (Info-menu): Don't return error if point is between menu header and
Markus Rost <rost@math.uni-bielefeld.de>
parents: 23533
diff changeset
1257 (match-beginning 1)
2e335a66e659 (Info-menu): Don't return error if point is between menu header and
Markus Rost <rost@math.uni-bielefeld.de>
parents: 23533
diff changeset
1258 (match-end 1))))))))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1259 (let ((item nil))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1260 (while (null item)
7837
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1261 (setq item (let ((completion-ignore-case t)
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1262 (Info-complete-menu-buffer (current-buffer)))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1263 (completing-read (if default
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1264 (format "Menu item (default %s): "
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1265 default)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1266 "Menu item: ")
7837
bad6366d4f16 (Info-complete-menu-item): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7789
diff changeset
1267 'Info-complete-menu-item nil t)))
540
0840eff2ecd5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 359
diff changeset
1268 ;; we rely on the fact that completing-read accepts an input
0840eff2ecd5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 359
diff changeset
1269 ;; of "" even when the require-match argument is true and ""
0840eff2ecd5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 359
diff changeset
1270 ;; is not a valid possibility
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1271 (if (string= item "")
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1272 (if default
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1273 (setq item default)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1274 ;; ask again
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1275 (setq item nil))))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1276 (list item))))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1277 ;; there is a problem here in that if several menu items have the same
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1278 ;; name you can only go to the node of the first with this command.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1279 (Info-goto-node (Info-extract-menu-item menu-item)))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1280
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1281 (defun Info-extract-menu-item (menu-item)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1282 (setq menu-item (regexp-quote menu-item))
22951
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1283 (let ((case-fold-search t))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1284 (save-excursion
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1285 (goto-char (point-min))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1286 (or (search-forward "\n* menu:" nil t)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1287 (error "No menu in this node"))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1288 (or (re-search-forward (concat "\n\\* +" menu-item ":") nil t)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1289 (re-search-forward (concat "\n\\* +" menu-item) nil t)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1290 (error "No such item in menu"))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1291 (beginning-of-line)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1292 (forward-char 2)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1293 (Info-extract-menu-node-name))))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1294
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1295 ;; If COUNT is nil, use the last item in the menu.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1296 (defun Info-extract-menu-counting (count)
22951
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1297 (let ((case-fold-search t))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1298 (save-excursion
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1299 (goto-char (point-min))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1300 (or (search-forward "\n* menu:" nil t)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1301 (error "No menu in this node"))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1302 (if count
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1303 (or (search-forward "\n* " nil t count)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1304 (error "Too few items in menu"))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1305 (while (search-forward "\n* " nil t)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1306 nil))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1307 (Info-extract-menu-node-name))))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1308
1666
c12fbca81b63 (Info-{first,second,third,fourth,fifth}-menu-item): Removed.
Roland McGrath <roland@gnu.org>
parents: 1613
diff changeset
1309 (defun Info-nth-menu-item ()
c12fbca81b63 (Info-{first,second,third,fourth,fifth}-menu-item): Removed.
Roland McGrath <roland@gnu.org>
parents: 1613
diff changeset
1310 "Go to the node of the Nth menu item.
c12fbca81b63 (Info-{first,second,third,fourth,fifth}-menu-item): Removed.
Roland McGrath <roland@gnu.org>
parents: 1613
diff changeset
1311 N is the digit argument used to invoke this command."
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1312 (interactive)
1666
c12fbca81b63 (Info-{first,second,third,fourth,fifth}-menu-item): Removed.
Roland McGrath <roland@gnu.org>
parents: 1613
diff changeset
1313 (Info-goto-node
c12fbca81b63 (Info-{first,second,third,fourth,fifth}-menu-item): Removed.
Roland McGrath <roland@gnu.org>
parents: 1613
diff changeset
1314 (Info-extract-menu-counting
c12fbca81b63 (Info-{first,second,third,fourth,fifth}-menu-item): Removed.
Roland McGrath <roland@gnu.org>
parents: 1613
diff changeset
1315 (- (aref (this-command-keys) (1- (length (this-command-keys)))) ?0))))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1316
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1317 (defun Info-top-node ()
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1318 "Go to the Top node of this file."
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1319 (interactive)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1320 (Info-goto-node "Top"))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1321
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1322 (defun Info-final-node ()
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1323 "Go to the final node in this file."
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1324 (interactive)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1325 (Info-goto-node "Top")
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1326 (let (Info-history)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1327 ;; Go to the last node in the menu of Top.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1328 (Info-goto-node (Info-extract-menu-counting nil))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1329 ;; If the last node in the menu is not last in pointer structure,
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1330 ;; move forward until we can't go any farther.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1331 (while (Info-forward-node t t) nil)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1332 ;; Then keep moving down to last subnode, unless we reach an index.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1333 (while (and (not (string-match "\\<index\\>" Info-current-node))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1334 (save-excursion (search-forward "\n* Menu:" nil t)))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1335 (Info-goto-node (Info-extract-menu-counting nil)))))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1336
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1337 (defun Info-forward-node (&optional not-down no-error)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1338 "Go forward one node, considering all nodes as forming one sequence."
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1339 (interactive)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1340 (goto-char (point-min))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1341 (forward-line 1)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1342 ;; three possibilities, in order of priority:
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1343 ;; 1. next node is in a menu in this node (but not in an index)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1344 ;; 2. next node is next at same level
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1345 ;; 3. next node is up and next
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1346 (cond ((and (not not-down)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1347 (save-excursion (search-forward "\n* menu:" nil t))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1348 (not (string-match "\\<index\\>" Info-current-node)))
2036
a71101e5abff (Info-forward-node): Properly go to first menu item.
Richard M. Stallman <rms@gnu.org>
parents: 2032
diff changeset
1349 (Info-goto-node (Info-extract-menu-counting 1))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1350 t)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1351 ((save-excursion (search-backward "next:" nil t))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1352 (Info-next)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1353 t)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1354 ((and (save-excursion (search-backward "up:" nil t))
11527
7956811d4d9a (info-insert-file-contents): Set default-directory
Richard M. Stallman <rms@gnu.org>
parents: 11064
diff changeset
1355 ;; Use string-equal, not equal, to ignore text props.
7956811d4d9a (info-insert-file-contents): Set default-directory
Richard M. Stallman <rms@gnu.org>
parents: 11064
diff changeset
1356 (not (string-equal (downcase (Info-extract-pointer "up"))
7956811d4d9a (info-insert-file-contents): Set default-directory
Richard M. Stallman <rms@gnu.org>
parents: 11064
diff changeset
1357 "top")))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1358 (let ((old-node Info-current-node))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1359 (Info-up)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1360 (let (Info-history success)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1361 (unwind-protect
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1362 (setq success (Info-forward-node t no-error))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1363 (or success (Info-goto-node old-node))))))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1364 (no-error nil)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1365 (t (error "No pointer forward from this node"))))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1366
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1367 (defun Info-backward-node ()
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1368 "Go backward one node, considering all nodes as forming one sequence."
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1369 (interactive)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1370 (let ((prevnode (Info-extract-pointer "prev[ious]*" t))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1371 (upnode (Info-extract-pointer "up" t)))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1372 (cond ((and upnode (string-match "(" upnode))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1373 (error "First node in file"))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1374 ((and upnode (or (null prevnode)
11527
7956811d4d9a (info-insert-file-contents): Set default-directory
Richard M. Stallman <rms@gnu.org>
parents: 11064
diff changeset
1375 ;; Use string-equal, not equal,
7956811d4d9a (info-insert-file-contents): Set default-directory
Richard M. Stallman <rms@gnu.org>
parents: 11064
diff changeset
1376 ;; to ignore text properties.
7956811d4d9a (info-insert-file-contents): Set default-directory
Richard M. Stallman <rms@gnu.org>
parents: 11064
diff changeset
1377 (string-equal (downcase prevnode)
7956811d4d9a (info-insert-file-contents): Set default-directory
Richard M. Stallman <rms@gnu.org>
parents: 11064
diff changeset
1378 (downcase upnode))))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1379 (Info-up))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1380 (prevnode
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1381 ;; If we move back at the same level,
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1382 ;; go down to find the last subnode*.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1383 (Info-prev)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1384 (let (Info-history)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1385 (while (and (not (string-match "\\<index\\>" Info-current-node))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1386 (save-excursion (search-forward "\n* Menu:" nil t)))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1387 (Info-goto-node (Info-extract-menu-counting nil)))))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1388 (t
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1389 (error "No pointer backward from this node")))))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1390
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1391 (defun Info-exit ()
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1392 "Exit Info by selecting some other buffer."
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1393 (interactive)
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1394 (if Info-standalone
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1395 (save-buffers-kill-emacs)
22331
fcc3db2d9778 (Info-exit): Use quit-window.
Karl Heuer <kwzh@gnu.org>
parents: 22067
diff changeset
1396 (quit-window)))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1397
929
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1398 (defun Info-next-menu-item ()
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1399 (interactive)
23533
10a3478e3432 (Info-next-menu-item): Stay on top of node.
Richard M. Stallman <rms@gnu.org>
parents: 23416
diff changeset
1400 (let ((node
10a3478e3432 (Info-next-menu-item): Stay on top of node.
Richard M. Stallman <rms@gnu.org>
parents: 23416
diff changeset
1401 (save-excursion
10a3478e3432 (Info-next-menu-item): Stay on top of node.
Richard M. Stallman <rms@gnu.org>
parents: 23416
diff changeset
1402 (forward-line -1)
10a3478e3432 (Info-next-menu-item): Stay on top of node.
Richard M. Stallman <rms@gnu.org>
parents: 23416
diff changeset
1403 (search-forward "\n* menu:" nil t)
10a3478e3432 (Info-next-menu-item): Stay on top of node.
Richard M. Stallman <rms@gnu.org>
parents: 23416
diff changeset
1404 (and (search-forward "\n* " nil t)
10a3478e3432 (Info-next-menu-item): Stay on top of node.
Richard M. Stallman <rms@gnu.org>
parents: 23416
diff changeset
1405 (Info-extract-menu-node-name)))))
10a3478e3432 (Info-next-menu-item): Stay on top of node.
Richard M. Stallman <rms@gnu.org>
parents: 23416
diff changeset
1406 (if node (Info-goto-node node)
10a3478e3432 (Info-next-menu-item): Stay on top of node.
Richard M. Stallman <rms@gnu.org>
parents: 23416
diff changeset
1407 (error "No more items in menu"))))
929
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1408
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1409 (defun Info-last-menu-item ()
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1410 (interactive)
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1411 (save-excursion
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1412 (forward-line 1)
8489
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1413 (let ((beg (save-excursion
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1414 (and (search-backward "\n* menu:" nil t)
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1415 (point)))))
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1416 (or (and beg (search-backward "\n* " beg t))
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1417 (error "No previous items in menu")))
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1418 (Info-goto-node (save-excursion
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1419 (goto-char (match-end 0))
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1420 (Info-extract-menu-node-name)))))
929
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1421
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1422 (defmacro Info-no-error (&rest body)
929
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1423 (list 'condition-case nil (cons 'progn (append body '(t))) '(error nil)))
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1424
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1425 (defun Info-next-preorder ()
8018
518971c497f5 (Info-next-preorder-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7990
diff changeset
1426 "Go to the next subnode or the next node, or go up a level."
518971c497f5 (Info-next-preorder-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7990
diff changeset
1427 (interactive)
518971c497f5 (Info-next-preorder-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7990
diff changeset
1428 (cond ((Info-no-error (Info-next-menu-item)))
518971c497f5 (Info-next-preorder-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7990
diff changeset
1429 ((Info-no-error (Info-next)))
21910
702383d93b75 (Info-up): New arg SAME-FILE: don't move to different file.
Richard M. Stallman <rms@gnu.org>
parents: 21806
diff changeset
1430 ((Info-no-error (Info-up t))
12156
1620a60ab7ca (Info-mode): Doco fix.
Karl Heuer <kwzh@gnu.org>
parents: 11959
diff changeset
1431 ;; Since we have already gone thru all the items in this menu,
1620a60ab7ca (Info-mode): Doco fix.
Karl Heuer <kwzh@gnu.org>
parents: 11959
diff changeset
1432 ;; go up to the end of this node.
15575
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1433 (goto-char (point-max))
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1434 ;; Since logically we are done with the node with that menu,
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1435 ;; move on from it.
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1436 (Info-next-preorder))
8018
518971c497f5 (Info-next-preorder-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7990
diff changeset
1437 (t
518971c497f5 (Info-next-preorder-1): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7990
diff changeset
1438 (error "No more nodes"))))
929
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1439
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1440 (defun Info-last-preorder ()
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1441 "Go to the last node, popping up a level if there is none."
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1442 (interactive)
8489
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1443 (cond ((Info-no-error
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1444 (Info-last-menu-item)
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1445 ;; If we go down a menu item, go to the end of the node
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1446 ;; so we can scroll back through it.
12156
1620a60ab7ca (Info-mode): Doco fix.
Karl Heuer <kwzh@gnu.org>
parents: 11959
diff changeset
1447 (goto-char (point-max)))
15575
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1448 ;; Keep going down, as long as there are nested menu nodes.
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1449 (while (Info-no-error
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1450 (Info-last-menu-item)
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1451 ;; If we go down a menu item, go to the end of the node
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1452 ;; so we can scroll back through it.
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1453 (goto-char (point-max))))
12156
1620a60ab7ca (Info-mode): Doco fix.
Karl Heuer <kwzh@gnu.org>
parents: 11959
diff changeset
1454 (recenter -1))
21910
702383d93b75 (Info-up): New arg SAME-FILE: don't move to different file.
Richard M. Stallman <rms@gnu.org>
parents: 21806
diff changeset
1455 ((and (not (equal (Info-extract-pointer "up")
702383d93b75 (Info-up): New arg SAME-FILE: don't move to different file.
Richard M. Stallman <rms@gnu.org>
parents: 21806
diff changeset
1456 (Info-extract-pointer "prev"))))
702383d93b75 (Info-up): New arg SAME-FILE: don't move to different file.
Richard M. Stallman <rms@gnu.org>
parents: 21806
diff changeset
1457 (Info-no-error (Info-prev))
12156
1620a60ab7ca (Info-mode): Doco fix.
Karl Heuer <kwzh@gnu.org>
parents: 11959
diff changeset
1458 (goto-char (point-max))
15575
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1459 (while (Info-no-error
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1460 (Info-last-menu-item)
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1461 ;; If we go down a menu item, go to the end of the node
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1462 ;; so we can scroll back through it.
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1463 (goto-char (point-max))))
12156
1620a60ab7ca (Info-mode): Doco fix.
Karl Heuer <kwzh@gnu.org>
parents: 11959
diff changeset
1464 (recenter -1))
21910
702383d93b75 (Info-up): New arg SAME-FILE: don't move to different file.
Richard M. Stallman <rms@gnu.org>
parents: 21806
diff changeset
1465 ((Info-no-error (Info-up t))
12156
1620a60ab7ca (Info-mode): Doco fix.
Karl Heuer <kwzh@gnu.org>
parents: 11959
diff changeset
1466 (goto-char (point-min))
1620a60ab7ca (Info-mode): Doco fix.
Karl Heuer <kwzh@gnu.org>
parents: 11959
diff changeset
1467 (or (search-forward "\n* Menu:" nil t)
1620a60ab7ca (Info-mode): Doco fix.
Karl Heuer <kwzh@gnu.org>
parents: 11959
diff changeset
1468 (goto-char (point-max))))
1620a60ab7ca (Info-mode): Doco fix.
Karl Heuer <kwzh@gnu.org>
parents: 11959
diff changeset
1469 (t (error "No previous nodes"))))
929
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1470
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1471 (defun Info-scroll-up ()
9222
b18f51df31b3 (Info-scroll-down, Info-scroll-up): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 8913
diff changeset
1472 "Scroll one screenful forward in Info, considering all nodes as one sequence.
16498
791b96e8f25e (Info-scroll-up): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16462
diff changeset
1473 Once you scroll far enough in a node that its menu appears on the screen
791b96e8f25e (Info-scroll-up): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16462
diff changeset
1474 but after point, the next scroll moves into its first subnode.
791b96e8f25e (Info-scroll-up): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16462
diff changeset
1475
791b96e8f25e (Info-scroll-up): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16462
diff changeset
1476 When you scroll past the end of a node, that goes to the next node; if
791b96e8f25e (Info-scroll-up): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16462
diff changeset
1477 this node has no successor, it moves to the parent node's successor,
791b96e8f25e (Info-scroll-up): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16462
diff changeset
1478 and so on. If point is inside the menu of a node, it moves to
791b96e8f25e (Info-scroll-up): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16462
diff changeset
1479 subnode indicated by the following menu item. (That case won't
791b96e8f25e (Info-scroll-up): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16462
diff changeset
1480 normally result from this command, but can happen in other ways.)"
791b96e8f25e (Info-scroll-up): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 16462
diff changeset
1481
929
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1482 (interactive)
8489
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1483 (if (or (< (window-start) (point-min))
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1484 (> (window-start) (point-max)))
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1485 (set-window-start (selected-window) (point)))
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1486 (let ((virtual-end (save-excursion
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1487 (goto-char (point-min))
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1488 (if (search-forward "\n* Menu:" nil t)
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1489 (point)
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1490 (point-max)))))
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1491 (if (or (< virtual-end (window-start))
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1492 (pos-visible-in-window-p virtual-end))
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1493 (Info-next-preorder)
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1494 (scroll-up))))
929
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1495
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1496 (defun Info-scroll-down ()
9222
b18f51df31b3 (Info-scroll-down, Info-scroll-up): Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 8913
diff changeset
1497 "Scroll one screenful back in Info, considering all nodes as one sequence.
12156
1620a60ab7ca (Info-mode): Doco fix.
Karl Heuer <kwzh@gnu.org>
parents: 11959
diff changeset
1498 Within the menu of a node, this goes to its last subnode.
1620a60ab7ca (Info-mode): Doco fix.
Karl Heuer <kwzh@gnu.org>
parents: 11959
diff changeset
1499 When you scroll past the beginning of a node, that goes to the
1620a60ab7ca (Info-mode): Doco fix.
Karl Heuer <kwzh@gnu.org>
parents: 11959
diff changeset
1500 previous node or back up to the parent node."
929
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1501 (interactive)
8489
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1502 (if (or (< (window-start) (point-min))
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1503 (> (window-start) (point-max)))
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1504 (set-window-start (selected-window) (point)))
15575
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1505 (let* ((current-point (point))
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1506 (virtual-end (save-excursion
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1507 (beginning-of-line)
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1508 (setq current-point (point))
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1509 (goto-char (point-min))
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1510 (search-forward "\n* Menu:"
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1511 current-point
6beab08ee094 (Info-next-preorder): After we move up, move forward again.
Richard M. Stallman <rms@gnu.org>
parents: 15304
diff changeset
1512 t))))
8489
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1513 (if (or virtual-end (pos-visible-in-window-p (point-min)))
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1514 (Info-last-preorder)
c6088e3005cf (Info-last-menu-item): Fix gross logic errors.
Richard M. Stallman <rms@gnu.org>
parents: 8480
diff changeset
1515 (scroll-down))))
929
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1516
15055
60ff6e57ddbd (Info-next-reference, Info-prev-reference): Add optional
Richard M. Stallman <rms@gnu.org>
parents: 14664
diff changeset
1517 (defun Info-next-reference (&optional recur)
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1518 "Move cursor to the next cross-reference or menu item in the node."
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1519 (interactive)
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1520 (let ((pat "\\*note[ \n\t]*\\([^:]*\\):\\|^\\* .*:")
22951
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1521 (old-pt (point))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1522 (case-fold-search t))
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1523 (or (eobp) (forward-char 1))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1524 (or (re-search-forward pat nil t)
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1525 (progn
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1526 (goto-char (point-min))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1527 (or (re-search-forward pat nil t)
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1528 (progn
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1529 (goto-char old-pt)
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1530 (error "No cross references in this node")))))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1531 (goto-char (match-beginning 0))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1532 (if (looking-at "\\* Menu:")
15055
60ff6e57ddbd (Info-next-reference, Info-prev-reference): Add optional
Richard M. Stallman <rms@gnu.org>
parents: 14664
diff changeset
1533 (if recur
60ff6e57ddbd (Info-next-reference, Info-prev-reference): Add optional
Richard M. Stallman <rms@gnu.org>
parents: 14664
diff changeset
1534 (error "No cross references in this node")
60ff6e57ddbd (Info-next-reference, Info-prev-reference): Add optional
Richard M. Stallman <rms@gnu.org>
parents: 14664
diff changeset
1535 (Info-next-reference t)))))
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1536
15055
60ff6e57ddbd (Info-next-reference, Info-prev-reference): Add optional
Richard M. Stallman <rms@gnu.org>
parents: 14664
diff changeset
1537 (defun Info-prev-reference (&optional recur)
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1538 "Move cursor to the previous cross-reference or menu item in the node."
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1539 (interactive)
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1540 (let ((pat "\\*note[ \n\t]*\\([^:]*\\):\\|^\\* .*:")
22951
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1541 (old-pt (point))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1542 (case-fold-search t))
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1543 (or (re-search-backward pat nil t)
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1544 (progn
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1545 (goto-char (point-max))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1546 (or (re-search-backward pat nil t)
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1547 (progn
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1548 (goto-char old-pt)
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1549 (error "No cross references in this node")))))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1550 (goto-char (match-beginning 0))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1551 (if (looking-at "\\* Menu:")
15055
60ff6e57ddbd (Info-next-reference, Info-prev-reference): Add optional
Richard M. Stallman <rms@gnu.org>
parents: 14664
diff changeset
1552 (if recur
60ff6e57ddbd (Info-next-reference, Info-prev-reference): Add optional
Richard M. Stallman <rms@gnu.org>
parents: 14664
diff changeset
1553 (error "No cross references in this node")
60ff6e57ddbd (Info-next-reference, Info-prev-reference): Add optional
Richard M. Stallman <rms@gnu.org>
parents: 14664
diff changeset
1554 (Info-prev-reference t)))))
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1555
2561
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1556 (defun Info-index (topic)
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1557 "Look up a string in the index for this file.
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1558 The index is defined as the first node in the top-level menu whose
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1559 name contains the word \"Index\", plus any immediately following
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1560 nodes whose names also contain the word \"Index\".
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1561 If there are no exact matches to the specified topic, this chooses
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1562 the first match which is a case-insensitive substring of a topic.
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1563 Use the `,' command to see the other matches.
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1564 Give a blank topic name to go to the Index node itself."
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1565 (interactive "sIndex topic: ")
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1566 (let ((orignode Info-current-node)
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1567 (rnode nil)
21641
1174b1d6cbf6 (Info-menu): Allow extra spaces at start of menu item.
Richard M. Stallman <rms@gnu.org>
parents: 21197
diff changeset
1568 (pattern (format "\n\\* +\\([^\n:]*%s[^\n:]*\\):[ \t]*\\([^.\n]*\\)\\.[ \t]*\\([0-9]*\\)"
2561
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1569 (regexp-quote topic)))
22951
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1570 node
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1571 (case-fold-search t))
2561
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1572 (Info-goto-node "Top")
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1573 (or (search-forward "\n* menu:" nil t)
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1574 (error "No index"))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1575 (or (re-search-forward "\n\\* \\(.*\\<Index\\>\\)" nil t)
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1576 (error "No index"))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1577 (goto-char (match-beginning 1))
10758
a66a29e6efc9 (Info-index): Bind Info-history, not Info-keep-history.
Richard M. Stallman <rms@gnu.org>
parents: 10061
diff changeset
1578 ;; Here, and subsequently in this function,
a66a29e6efc9 (Info-index): Bind Info-history, not Info-keep-history.
Richard M. Stallman <rms@gnu.org>
parents: 10061
diff changeset
1579 ;; we bind Info-history to nil for internal node-switches
a66a29e6efc9 (Info-index): Bind Info-history, not Info-keep-history.
Richard M. Stallman <rms@gnu.org>
parents: 10061
diff changeset
1580 ;; so that we don't put junk in the history.
a66a29e6efc9 (Info-index): Bind Info-history, not Info-keep-history.
Richard M. Stallman <rms@gnu.org>
parents: 10061
diff changeset
1581 ;; In the first Info-goto-node call, above, we do update the history
a66a29e6efc9 (Info-index): Bind Info-history, not Info-keep-history.
Richard M. Stallman <rms@gnu.org>
parents: 10061
diff changeset
1582 ;; because that is what the user's previous node choice into it.
a66a29e6efc9 (Info-index): Bind Info-history, not Info-keep-history.
Richard M. Stallman <rms@gnu.org>
parents: 10061
diff changeset
1583 (let ((Info-history nil))
2561
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1584 (Info-goto-node (Info-extract-menu-node-name)))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1585 (or (equal topic "")
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1586 (let ((matches nil)
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1587 (exact nil)
10758
a66a29e6efc9 (Info-index): Bind Info-history, not Info-keep-history.
Richard M. Stallman <rms@gnu.org>
parents: 10061
diff changeset
1588 (Info-history nil)
2561
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1589 found)
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1590 (while
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1591 (progn
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1592 (goto-char (point-min))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1593 (while (re-search-forward pattern nil t)
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1594 (setq matches
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1595 (cons (list (buffer-substring (match-beginning 1)
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1596 (match-end 1))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1597 (buffer-substring (match-beginning 2)
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1598 (match-end 2))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1599 Info-current-node
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1600 (string-to-int (concat "0"
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1601 (buffer-substring
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1602 (match-beginning 3)
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1603 (match-end 3)))))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1604 matches)))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1605 (and (setq node (Info-extract-pointer "next" t))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1606 (string-match "\\<Index\\>" node)))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1607 (Info-goto-node node))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1608 (or matches
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1609 (progn
14664
f77b58df548c (Info-index): If fail, go back to original node.
Richard M. Stallman <rms@gnu.org>
parents: 14577
diff changeset
1610 (Info-goto-node orignode)
14560
b0df80fef82c (Info-find-index-name): New subroutine, from Info-index-next.
Richard M. Stallman <rms@gnu.org>
parents: 14529
diff changeset
1611 (error "No `%s' in index" topic)))
2561
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1612 ;; Here it is a feature that assoc is case-sensitive.
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1613 (while (setq found (assoc topic matches))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1614 (setq exact (cons found exact)
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1615 matches (delq found matches)))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1616 (setq Info-index-alternatives (nconc exact (nreverse matches)))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1617 (Info-index-next 0)))))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1618
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1619 (defun Info-index-next (num)
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1620 "Go to the next matching index item from the last `i' command."
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1621 (interactive "p")
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1622 (or Info-index-alternatives
16790
3663fc0c2036 (Info-find-node): Don't clear Info-index-alternatives.
Richard M. Stallman <rms@gnu.org>
parents: 16672
diff changeset
1623 (error "No previous `i' command"))
2561
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1624 (while (< num 0)
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1625 (setq num (+ num (length Info-index-alternatives))))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1626 (while (> num 0)
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1627 (setq Info-index-alternatives
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1628 (nconc (cdr Info-index-alternatives)
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1629 (list (car Info-index-alternatives)))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1630 num (1- num)))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1631 (Info-goto-node (nth 1 (car Info-index-alternatives)))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1632 (if (> (nth 3 (car Info-index-alternatives)) 0)
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1633 (forward-line (nth 3 (car Info-index-alternatives)))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1634 (forward-line 3) ; don't search in headers
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1635 (let ((name (car (car Info-index-alternatives))))
14560
b0df80fef82c (Info-find-index-name): New subroutine, from Info-index-next.
Richard M. Stallman <rms@gnu.org>
parents: 14529
diff changeset
1636 (Info-find-index-name name)))
b0df80fef82c (Info-find-index-name): New subroutine, from Info-index-next.
Richard M. Stallman <rms@gnu.org>
parents: 14529
diff changeset
1637 (message "Found `%s' in %s. %s"
2561
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1638 (car (car Info-index-alternatives))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1639 (nth 2 (car Info-index-alternatives))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1640 (if (cdr Info-index-alternatives)
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1641 "(Press `,' for more)"
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1642 "(Only match)")))
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1643
14560
b0df80fef82c (Info-find-index-name): New subroutine, from Info-index-next.
Richard M. Stallman <rms@gnu.org>
parents: 14529
diff changeset
1644 (defun Info-find-index-name (name)
b0df80fef82c (Info-find-index-name): New subroutine, from Info-index-next.
Richard M. Stallman <rms@gnu.org>
parents: 14529
diff changeset
1645 "Move point to the place within the current node where NAME is defined."
22951
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1646 (let ((case-fold-search t))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1647 (if (or (re-search-forward (format
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1648 "[a-zA-Z]+: %s\\( \\|$\\)"
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1649 (regexp-quote name)) nil t)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1650 (search-forward (format "`%s'" name) nil t)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1651 (and (string-match "\\`.*\\( (.*)\\)\\'" name)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1652 (search-forward
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1653 (format "`%s'" (substring name 0 (match-beginning 1)))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1654 nil t))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1655 (search-forward name nil t))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1656 (beginning-of-line)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1657 (goto-char (point-min)))))
14560
b0df80fef82c (Info-find-index-name): New subroutine, from Info-index-next.
Richard M. Stallman <rms@gnu.org>
parents: 14529
diff changeset
1658
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1659 (defun Info-undefined ()
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1660 "Make command be undefined in Info."
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1661 (interactive)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1662 (ding))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1663
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1664 (defun Info-help ()
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1665 "Enter the Info tutorial."
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1666 (interactive)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1667 (delete-other-windows)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1668 (Info-find-node "info"
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1669 (if (< (window-height) 23)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1670 "Help-Small-Screen"
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1671 "Help")))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1672
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1673 (defun Info-summary ()
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1674 "Display a brief summary of all Info commands."
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1675 (interactive)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1676 (save-window-excursion
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1677 (switch-to-buffer "*Help*")
20910
e46446e4af2d (Info-summary): Clear buffer-read-only.
Richard M. Stallman <rms@gnu.org>
parents: 20755
diff changeset
1678 (setq buffer-read-only nil)
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1679 (erase-buffer)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1680 (insert (documentation 'Info-mode))
9852
b3a6fdcd63df (Info-summary): Set help-mode in *Help* buffer.
Karl Heuer <kwzh@gnu.org>
parents: 9782
diff changeset
1681 (help-mode)
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1682 (goto-char (point-min))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1683 (let (ch flag)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1684 (while (progn (setq flag (not (pos-visible-in-window-p (point-max))))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1685 (message (if flag "Type Space to see more"
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1686 "Type Space to return to Info"))
2032
20cc6c34421c (Info-summary): Handle any event when flushing the display.
Richard M. Stallman <rms@gnu.org>
parents: 1979
diff changeset
1687 (if (not (eq ?\ (setq ch (read-event))))
1821
04fb1d3d6992 JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents: 1667
diff changeset
1688 (progn (setq unread-command-events (list ch)) nil)
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1689 flag))
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1690 (scroll-up)))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1691 (bury-buffer "*Help*")))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1692
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1693 (defun Info-get-token (pos start all &optional errorstring)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1694 "Return the token around POS,
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1695 POS must be somewhere inside the token
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1696 START is a regular expression which will match the
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1697 beginning of the tokens delimited string
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1698 ALL is a regular expression with a single
13990
155a595b6083 (Info-get-token): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 13620
diff changeset
1699 parenthesized subpattern which is the token to be
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1700 returned. E.g. '{\(.*\)}' would return any string
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1701 enclosed in braces around POS.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1702 SIG optional fourth argument, controls action on no match
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1703 nil: return nil
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1704 t: beep
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1705 a string: signal an error, using that string."
22951
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1706 (let ((case-fold-search t))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1707 (save-excursion
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1708 (goto-char pos)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1709 ;; First look for a match for START that goes across POS.
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1710 (while (and (not (bobp)) (> (point) (- pos (length start)))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1711 (not (looking-at start)))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1712 (forward-char -1))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1713 ;; If we did not find one, search back for START
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1714 ;; (this finds only matches that end at or before POS).
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1715 (or (looking-at start)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1716 (progn
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1717 (goto-char pos)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1718 (re-search-backward start (max (point-min) (- pos 200)) 'yes)))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1719 (let (found)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1720 (while (and (re-search-forward all (min (point-max) (+ pos 200)) 'yes)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1721 (not (setq found (and (<= (match-beginning 0) pos)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1722 (> (match-end 0) pos))))))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1723 (if (and found (<= (match-beginning 0) pos)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1724 (> (match-end 0) pos))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1725 (buffer-substring (match-beginning 1) (match-end 1))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1726 (cond ((null errorstring)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1727 nil)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1728 ((eq errorstring t)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1729 (beep)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1730 nil)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1731 (t
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1732 (error "No %s around position %d" errorstring pos))))))))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1733
7007
52b0ebfd3191 (Info-next-preorder): Don't follow footnotes here.
Karl Heuer <kwzh@gnu.org>
parents: 6716
diff changeset
1734 (defun Info-mouse-follow-nearest-node (click)
1309
aa286e6e7bec (Info-follow-nearest-node): Handle line breaks after *note.
Richard M. Stallman <rms@gnu.org>
parents: 998
diff changeset
1735 "\\<Info-mode-map>Follow a node reference near point.
aa286e6e7bec (Info-follow-nearest-node): Handle line breaks after *note.
Richard M. Stallman <rms@gnu.org>
parents: 998
diff changeset
1736 Like \\[Info-menu], \\[Info-follow-reference], \\[Info-next], \\[Info-prev] or \\[Info-up] command, depending on where you click.
7007
52b0ebfd3191 (Info-next-preorder): Don't follow footnotes here.
Karl Heuer <kwzh@gnu.org>
parents: 6716
diff changeset
1737 At end of the node's text, moves to the next node, or up if none."
1309
aa286e6e7bec (Info-follow-nearest-node): Handle line breaks after *note.
Richard M. Stallman <rms@gnu.org>
parents: 998
diff changeset
1738 (interactive "e")
1484
6c2a714566d3 Rename buffer-flush-undo to buffer-disable-undo.
Richard M. Stallman <rms@gnu.org>
parents: 1477
diff changeset
1739 (let* ((start (event-start click))
6c2a714566d3 Rename buffer-flush-undo to buffer-disable-undo.
Richard M. Stallman <rms@gnu.org>
parents: 1477
diff changeset
1740 (window (car start))
6c2a714566d3 Rename buffer-flush-undo to buffer-disable-undo.
Richard M. Stallman <rms@gnu.org>
parents: 1477
diff changeset
1741 (pos (car (cdr start))))
6c2a714566d3 Rename buffer-flush-undo to buffer-disable-undo.
Richard M. Stallman <rms@gnu.org>
parents: 1477
diff changeset
1742 (select-window window)
6c2a714566d3 Rename buffer-flush-undo to buffer-disable-undo.
Richard M. Stallman <rms@gnu.org>
parents: 1477
diff changeset
1743 (goto-char pos))
7007
52b0ebfd3191 (Info-next-preorder): Don't follow footnotes here.
Karl Heuer <kwzh@gnu.org>
parents: 6716
diff changeset
1744 (and (not (Info-try-follow-nearest-node))
52b0ebfd3191 (Info-next-preorder): Don't follow footnotes here.
Karl Heuer <kwzh@gnu.org>
parents: 6716
diff changeset
1745 (save-excursion (forward-line 1) (eobp))
12156
1620a60ab7ca (Info-mode): Doco fix.
Karl Heuer <kwzh@gnu.org>
parents: 11959
diff changeset
1746 (Info-next-preorder)))
7007
52b0ebfd3191 (Info-next-preorder): Don't follow footnotes here.
Karl Heuer <kwzh@gnu.org>
parents: 6716
diff changeset
1747
52b0ebfd3191 (Info-next-preorder): Don't follow footnotes here.
Karl Heuer <kwzh@gnu.org>
parents: 6716
diff changeset
1748 (defun Info-follow-nearest-node ()
52b0ebfd3191 (Info-next-preorder): Don't follow footnotes here.
Karl Heuer <kwzh@gnu.org>
parents: 6716
diff changeset
1749 "\\<Info-mode-map>Follow a node reference near point.
52b0ebfd3191 (Info-next-preorder): Don't follow footnotes here.
Karl Heuer <kwzh@gnu.org>
parents: 6716
diff changeset
1750 Like \\[Info-menu], \\[Info-follow-reference], \\[Info-next], \\[Info-prev] or \\[Info-up] command, depending on where point is.
52b0ebfd3191 (Info-next-preorder): Don't follow footnotes here.
Karl Heuer <kwzh@gnu.org>
parents: 6716
diff changeset
1751 If no reference to follow, moves to the next node, or up if none."
52b0ebfd3191 (Info-next-preorder): Don't follow footnotes here.
Karl Heuer <kwzh@gnu.org>
parents: 6716
diff changeset
1752 (interactive)
52b0ebfd3191 (Info-next-preorder): Don't follow footnotes here.
Karl Heuer <kwzh@gnu.org>
parents: 6716
diff changeset
1753 (or (Info-try-follow-nearest-node)
12156
1620a60ab7ca (Info-mode): Doco fix.
Karl Heuer <kwzh@gnu.org>
parents: 11959
diff changeset
1754 (Info-next-preorder)))
7007
52b0ebfd3191 (Info-next-preorder): Don't follow footnotes here.
Karl Heuer <kwzh@gnu.org>
parents: 6716
diff changeset
1755
52b0ebfd3191 (Info-next-preorder): Don't follow footnotes here.
Karl Heuer <kwzh@gnu.org>
parents: 6716
diff changeset
1756 ;; Common subroutine.
52b0ebfd3191 (Info-next-preorder): Don't follow footnotes here.
Karl Heuer <kwzh@gnu.org>
parents: 6716
diff changeset
1757 (defun Info-try-follow-nearest-node ()
52b0ebfd3191 (Info-next-preorder): Don't follow footnotes here.
Karl Heuer <kwzh@gnu.org>
parents: 6716
diff changeset
1758 "Follow a node reference near point. Return non-nil if successful."
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1759 (let (node)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1760 (cond
7007
52b0ebfd3191 (Info-next-preorder): Don't follow footnotes here.
Karl Heuer <kwzh@gnu.org>
parents: 6716
diff changeset
1761 ((setq node (Info-get-token (point) "\\*note[ \n]"
52b0ebfd3191 (Info-next-preorder): Don't follow footnotes here.
Karl Heuer <kwzh@gnu.org>
parents: 6716
diff changeset
1762 "\\*note[ \n]\\([^:]*\\):"))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1763 (Info-follow-reference node))
21641
1174b1d6cbf6 (Info-menu): Allow extra spaces at start of menu item.
Richard M. Stallman <rms@gnu.org>
parents: 21197
diff changeset
1764 ((setq node (Info-get-token (point) "\\* +" "\\* +\\([^:]*\\)::"))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1765 (Info-goto-node node))
23019
60f63c8a3837 (Info-try-follow-nearest-node): Get the node name
Richard M. Stallman <rms@gnu.org>
parents: 22951
diff changeset
1766 ((Info-get-token (point) "\\* +" "\\* +\\([^:]*\\):")
60f63c8a3837 (Info-try-follow-nearest-node): Get the node name
Richard M. Stallman <rms@gnu.org>
parents: 22951
diff changeset
1767 (beginning-of-line)
60f63c8a3837 (Info-try-follow-nearest-node): Get the node name
Richard M. Stallman <rms@gnu.org>
parents: 22951
diff changeset
1768 (forward-char 2)
60f63c8a3837 (Info-try-follow-nearest-node): Get the node name
Richard M. Stallman <rms@gnu.org>
parents: 22951
diff changeset
1769 (setq node (Info-extract-menu-node-name))
60f63c8a3837 (Info-try-follow-nearest-node): Get the node name
Richard M. Stallman <rms@gnu.org>
parents: 22951
diff changeset
1770 (Info-goto-node node))
3127
dfbada800489 (Info-follow-nearest-node): Omit 4th arg to Info-get-token.
Richard M. Stallman <rms@gnu.org>
parents: 3084
diff changeset
1771 ((setq node (Info-get-token (point) "Up: " "Up: \\([^,\n\t]*\\)"))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1772 (Info-goto-node node))
3127
dfbada800489 (Info-follow-nearest-node): Omit 4th arg to Info-get-token.
Richard M. Stallman <rms@gnu.org>
parents: 3084
diff changeset
1773 ((setq node (Info-get-token (point) "Next: " "Next: \\([^,\n\t]*\\)"))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1774 (Info-goto-node node))
3127
dfbada800489 (Info-follow-nearest-node): Omit 4th arg to Info-get-token.
Richard M. Stallman <rms@gnu.org>
parents: 3084
diff changeset
1775 ((setq node (Info-get-token (point) "File: " "File: \\([^,\n\t]*\\)"))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1776 (Info-goto-node "Top"))
3127
dfbada800489 (Info-follow-nearest-node): Omit 4th arg to Info-get-token.
Richard M. Stallman <rms@gnu.org>
parents: 3084
diff changeset
1777 ((setq node (Info-get-token (point) "Prev: " "Prev: \\([^,\n\t]*\\)"))
7007
52b0ebfd3191 (Info-next-preorder): Don't follow footnotes here.
Karl Heuer <kwzh@gnu.org>
parents: 6716
diff changeset
1778 (Info-goto-node node)))
52b0ebfd3191 (Info-next-preorder): Don't follow footnotes here.
Karl Heuer <kwzh@gnu.org>
parents: 6716
diff changeset
1779 node))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1780
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1781 (defvar Info-mode-map nil
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1782 "Keymap containing Info commands.")
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1783 (if Info-mode-map
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1784 nil
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1785 (setq Info-mode-map (make-keymap))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1786 (suppress-keymap Info-mode-map)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1787 (define-key Info-mode-map "." 'beginning-of-buffer)
929
27262a6c632a *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 846
diff changeset
1788 (define-key Info-mode-map " " 'Info-scroll-up)
7007
52b0ebfd3191 (Info-next-preorder): Don't follow footnotes here.
Karl Heuer <kwzh@gnu.org>
parents: 6716
diff changeset
1789 (define-key Info-mode-map "\C-m" 'Info-follow-nearest-node)
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1790 (define-key Info-mode-map "\t" 'Info-next-reference)
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1791 (define-key Info-mode-map "\e\t" 'Info-prev-reference)
1666
c12fbca81b63 (Info-{first,second,third,fourth,fifth}-menu-item): Removed.
Roland McGrath <roland@gnu.org>
parents: 1613
diff changeset
1792 (define-key Info-mode-map "1" 'Info-nth-menu-item)
c12fbca81b63 (Info-{first,second,third,fourth,fifth}-menu-item): Removed.
Roland McGrath <roland@gnu.org>
parents: 1613
diff changeset
1793 (define-key Info-mode-map "2" 'Info-nth-menu-item)
c12fbca81b63 (Info-{first,second,third,fourth,fifth}-menu-item): Removed.
Roland McGrath <roland@gnu.org>
parents: 1613
diff changeset
1794 (define-key Info-mode-map "3" 'Info-nth-menu-item)
c12fbca81b63 (Info-{first,second,third,fourth,fifth}-menu-item): Removed.
Roland McGrath <roland@gnu.org>
parents: 1613
diff changeset
1795 (define-key Info-mode-map "4" 'Info-nth-menu-item)
c12fbca81b63 (Info-{first,second,third,fourth,fifth}-menu-item): Removed.
Roland McGrath <roland@gnu.org>
parents: 1613
diff changeset
1796 (define-key Info-mode-map "5" 'Info-nth-menu-item)
c12fbca81b63 (Info-{first,second,third,fourth,fifth}-menu-item): Removed.
Roland McGrath <roland@gnu.org>
parents: 1613
diff changeset
1797 (define-key Info-mode-map "6" 'Info-nth-menu-item)
c12fbca81b63 (Info-{first,second,third,fourth,fifth}-menu-item): Removed.
Roland McGrath <roland@gnu.org>
parents: 1613
diff changeset
1798 (define-key Info-mode-map "7" 'Info-nth-menu-item)
c12fbca81b63 (Info-{first,second,third,fourth,fifth}-menu-item): Removed.
Roland McGrath <roland@gnu.org>
parents: 1613
diff changeset
1799 (define-key Info-mode-map "8" 'Info-nth-menu-item)
c12fbca81b63 (Info-{first,second,third,fourth,fifth}-menu-item): Removed.
Roland McGrath <roland@gnu.org>
parents: 1613
diff changeset
1800 (define-key Info-mode-map "9" 'Info-nth-menu-item)
1667
9c0e14881b8f (Info-{first,second,third,fourth,fifth}-menu-item): Removed.
Roland McGrath <roland@gnu.org>
parents: 1666
diff changeset
1801 (define-key Info-mode-map "0" 'undefined)
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1802 (define-key Info-mode-map "?" 'Info-summary)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1803 (define-key Info-mode-map "]" 'Info-forward-node)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1804 (define-key Info-mode-map "[" 'Info-backward-node)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1805 (define-key Info-mode-map "<" 'Info-top-node)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1806 (define-key Info-mode-map ">" 'Info-final-node)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1807 (define-key Info-mode-map "b" 'beginning-of-buffer)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1808 (define-key Info-mode-map "d" 'Info-directory)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1809 (define-key Info-mode-map "e" 'Info-edit)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1810 (define-key Info-mode-map "f" 'Info-follow-reference)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1811 (define-key Info-mode-map "g" 'Info-goto-node)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1812 (define-key Info-mode-map "h" 'Info-help)
2561
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1813 (define-key Info-mode-map "i" 'Info-index)
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1814 (define-key Info-mode-map "l" 'Info-last)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1815 (define-key Info-mode-map "m" 'Info-menu)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1816 (define-key Info-mode-map "n" 'Info-next)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1817 (define-key Info-mode-map "p" 'Info-prev)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1818 (define-key Info-mode-map "q" 'Info-exit)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1819 (define-key Info-mode-map "s" 'Info-search)
8739
f89682e90658 (Info-mode-map): Bind M-s like s.
Richard M. Stallman <rms@gnu.org>
parents: 8692
diff changeset
1820 ;; For consistency with Rmail.
f89682e90658 (Info-mode-map): Bind M-s like s.
Richard M. Stallman <rms@gnu.org>
parents: 8692
diff changeset
1821 (define-key Info-mode-map "\M-s" 'Info-search)
3313
34f2db3916fe (Info-mode-map): Correct Info-top to Info-top-node.
Richard M. Stallman <rms@gnu.org>
parents: 3225
diff changeset
1822 (define-key Info-mode-map "t" 'Info-top-node)
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1823 (define-key Info-mode-map "u" 'Info-up)
2561
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1824 (define-key Info-mode-map "," 'Info-index-next)
930
1dac458b5117 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 929
diff changeset
1825 (define-key Info-mode-map "\177" 'Info-scroll-down)
7007
52b0ebfd3191 (Info-next-preorder): Don't follow footnotes here.
Karl Heuer <kwzh@gnu.org>
parents: 6716
diff changeset
1826 (define-key Info-mode-map [mouse-2] 'Info-mouse-follow-nearest-node)
540
0840eff2ecd5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 359
diff changeset
1827 )
16043
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1828
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1829 (defun Info-check-pointer (item)
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1830 ;; Non-nil if ITEM is present in this node.
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1831 (condition-case nil
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1832 (Info-extract-pointer item)
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1833 (error nil)))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1834
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1835 (easy-menu-define Info-mode-menu Info-mode-map
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1836 "Menu for info files."
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1837 '("Info"
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1838 ["Up" Info-up (Info-check-pointer "up")]
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1839 ["Next" Info-next (Info-check-pointer "next")]
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1840 ["Previous" Info-prev (Info-check-pointer "prev[ious]*")]
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1841 ("Menu item" ["You should never see this" report-emacs-bug t])
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1842 ("Reference" ["You should never see this" report-emacs-bug t])
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1843 ["Search..." Info-search t]
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1844 ["Goto node..." Info-goto-node t]
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1845 ["Last" Info-last Info-history]
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1846 ["Exit" Info-exit t]))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1847
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1848 (defvar Info-menu-last-node nil)
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1849 ;; Last node the menu was created for.
21197
e4b99d1db55a (Info-menu-update): Set Info-menu-last-node
Richard M. Stallman <rms@gnu.org>
parents: 21003
diff changeset
1850 ;; Value is a list, (FILE-NAME NODE-NAME).
16043
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1851
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1852 (defun Info-menu-update ()
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1853 ;; Update the Info menu for the current node.
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1854 (condition-case nil
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1855 (if (or (not (eq major-mode 'Info-mode))
21197
e4b99d1db55a (Info-menu-update): Set Info-menu-last-node
Richard M. Stallman <rms@gnu.org>
parents: 21003
diff changeset
1856 (equal (list Info-current-file Info-current-node)
e4b99d1db55a (Info-menu-update): Set Info-menu-last-node
Richard M. Stallman <rms@gnu.org>
parents: 21003
diff changeset
1857 Info-menu-last-node))
16043
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1858 ()
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1859 ;; Update menu menu.
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1860 (let* ((Info-complete-menu-buffer (current-buffer))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1861 (items (nreverse (condition-case nil
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1862 (Info-complete-menu-item
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1863 "" (lambda (e) t) t)
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1864 (error nil))))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1865 entries current
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1866 (number 0))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1867 (while (and items (< number 9))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1868 (setq current (car items)
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1869 items (cdr items)
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1870 number (1+ number))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1871 (setq entries (cons `[,current
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1872 (Info-menu ,current)
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1873 :keys ,(format "%d" number)]
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1874 entries)))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1875 (if items
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1876 (setq entries (cons ["Other..." Info-menu t] entries)))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1877 (or entries
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1878 (setq entries (list ["No menu" nil nil])))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1879 (easy-menu-change '("Info") "Menu item" (nreverse entries)))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1880 ;; Update reference menu. Code stolen from `Info-follow-reference'.
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1881 (let ((items nil)
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1882 str i entries current
22951
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1883 (number 0)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
1884 (case-fold-search t))
16043
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1885 (save-excursion
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1886 (goto-char (point-min))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1887 (while (re-search-forward "\\*note[ \n\t]*\\([^:]*\\):" nil t)
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1888 (setq str (buffer-substring
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1889 (match-beginning 1)
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1890 (1- (point))))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1891 (setq i 0)
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1892 (while (setq i (string-match "[ \n\t]+" str i))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1893 (setq str (concat (substring str 0 i) " "
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1894 (substring str (match-end 0))))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1895 (setq i (1+ i)))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1896 (setq items
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1897 (cons str items))))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1898 (while (and items (< number 9))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1899 (setq current (car items)
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1900 items (cdr items)
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1901 number (1+ number))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1902 (setq entries (cons `[,current
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1903 (Info-follow-reference ,current)
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1904 t]
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1905 entries)))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1906 (if items
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1907 (setq entries (cons ["Other..." Info-follow-reference t]
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1908 entries)))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1909 (or entries
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1910 (setq entries (list ["No references" nil nil])))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1911 (easy-menu-change '("Info") "Reference" (nreverse entries)))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1912 ;; Update last seen node.
21197
e4b99d1db55a (Info-menu-update): Set Info-menu-last-node
Richard M. Stallman <rms@gnu.org>
parents: 21003
diff changeset
1913 (setq Info-menu-last-node (list Info-current-file Info-current-node)))
16043
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1914 ;; Try to avoid entering infinite beep mode in case of errors.
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1915 (error (ding))))
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1916
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1917
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1918 ;; Info mode is suitable only for specially formatted data.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1919 (put 'info-mode 'mode-class 'special)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1920
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1921 (defun Info-mode ()
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1922 "\\<Info-mode-map>
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1923 Info mode provides commands for browsing through the Info documentation tree.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1924 Documentation in Info is divided into \"nodes\", each of which discusses
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1925 one topic and contains references to other nodes which discuss related
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1926 topics. Info has commands to follow the references and show you other nodes.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1927
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1928 \\[Info-help] Invoke the Info tutorial.
21806
d17bf0e8a170 (Info-mode): Doc fix.
Dave Love <fx@gnu.org>
parents: 21704
diff changeset
1929 \\[Info-exit] Quit Info: reselect previously selected buffer.
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1930
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1931 Selecting other nodes:
8564
ca09c53c16a6 (Info-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8489
diff changeset
1932 \\[Info-mouse-follow-nearest-node]
ca09c53c16a6 (Info-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8489
diff changeset
1933 Follow a node reference you click on.
ca09c53c16a6 (Info-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8489
diff changeset
1934 This works with menu items, cross references, and
ca09c53c16a6 (Info-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 8489
diff changeset
1935 the \"next\", \"previous\" and \"up\", depending on where you click.
21806
d17bf0e8a170 (Info-mode): Doc fix.
Dave Love <fx@gnu.org>
parents: 21704
diff changeset
1936 \\[Info-follow-nearest-node] Follow a node reference near point, like \\[Info-mouse-follow-nearest-node].
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1937 \\[Info-next] Move to the \"next\" node of this node.
3127
dfbada800489 (Info-follow-nearest-node): Omit 4th arg to Info-get-token.
Richard M. Stallman <rms@gnu.org>
parents: 3084
diff changeset
1938 \\[Info-prev] Move to the \"previous\" node of this node.
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1939 \\[Info-up] Move \"up\" from this node.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1940 \\[Info-menu] Pick menu item specified by name (or abbreviation).
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1941 Picking a menu item causes another node to be selected.
540
0840eff2ecd5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 359
diff changeset
1942 \\[Info-directory] Go to the Info directory node.
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1943 \\[Info-follow-reference] Follow a cross reference. Reads name of reference.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1944 \\[Info-last] Move to the last node you were at.
2561
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1945 \\[Info-index] Look up a topic in this file's Index and move to that node.
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1946 \\[Info-index-next] (comma) Move to the next match from a previous `i' command.
21806
d17bf0e8a170 (Info-mode): Doc fix.
Dave Love <fx@gnu.org>
parents: 21704
diff changeset
1947 \\[Info-top-node] Go to the Top node of this file.
d17bf0e8a170 (Info-mode): Doc fix.
Dave Love <fx@gnu.org>
parents: 21704
diff changeset
1948 \\[Info-final-node] Go to the final node in this file.
d17bf0e8a170 (Info-mode): Doc fix.
Dave Love <fx@gnu.org>
parents: 21704
diff changeset
1949 \\[Info-backward-node] Go backward one node, considering all nodes as forming one sequence.
d17bf0e8a170 (Info-mode): Doc fix.
Dave Love <fx@gnu.org>
parents: 21704
diff changeset
1950 \\[Info-forward-node] Go forward one node, considering all nodes as forming one sequence.
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1951
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1952 Moving within a node:
20514
dd15be266d88 (Info-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20421
diff changeset
1953 \\[Info-scroll-up] Normally, scroll forward a full screen.
dd15be266d88 (Info-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20421
diff changeset
1954 Once you scroll far enough in a node that its menu appears on the screen
dd15be266d88 (Info-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20421
diff changeset
1955 but after point, the next scroll moves into its first subnode.
dd15be266d88 (Info-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20421
diff changeset
1956 When after all menu items (or if their is no menu), move up to
dd15be266d88 (Info-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20421
diff changeset
1957 the parent node.
dd15be266d88 (Info-mode): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 20421
diff changeset
1958 \\[Info-scroll-down] Normally, scroll backward. If the beginning of the buffer is
930
1dac458b5117 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 929
diff changeset
1959 already visible, try to go to the previous menu entry, or up if there is none.
1dac458b5117 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 929
diff changeset
1960 \\[beginning-of-buffer] Go to beginning of node.
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1961
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1962 Advanced commands:
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1963 \\[Info-exit] Quit Info: reselect previously selected buffer.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1964 \\[Info-edit] Edit contents of selected node.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1965 1 Pick first item in node's menu.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1966 2, 3, 4, 5 Pick second ... fifth item in node's menu.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1967 \\[Info-goto-node] Move to node specified by name.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1968 You may include a filename as well, as (FILENAME)NODENAME.
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1969 \\[universal-argument] \\[info] Move to new Info file with completion.
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1970 \\[Info-search] Search through this Info file for specified regexp,
930
1dac458b5117 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 929
diff changeset
1971 and select the node in which the next occurrence is found.
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1972 \\[Info-next-reference] Move cursor to next cross-reference or menu item.
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
1973 \\[Info-prev-reference] Move cursor to previous cross-reference or menu item."
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1974 (kill-all-local-variables)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1975 (setq major-mode 'Info-mode)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1976 (setq mode-name "Info")
16672
1facf218a14f (Info-mode): Default for `tab-width'.
Richard M. Stallman <rms@gnu.org>
parents: 16638
diff changeset
1977 (setq tab-width 8)
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1978 (use-local-map Info-mode-map)
16043
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1979 (make-local-hook 'activate-menubar-hook)
f3a7e1cb07d6 Add menu items and xrefs to the menu bar menu.
Richard M. Stallman <rms@gnu.org>
parents: 15821
diff changeset
1980 (add-hook 'activate-menubar-hook 'Info-menu-update nil t)
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1981 (set-syntax-table text-mode-syntax-table)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1982 (setq local-abbrev-table text-mode-abbrev-table)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1983 (setq case-fold-search t)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1984 (setq buffer-read-only t)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1985 (make-local-variable 'Info-current-file)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1986 (make-local-variable 'Info-current-subfile)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1987 (make-local-variable 'Info-current-node)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1988 (make-local-variable 'Info-tag-table-marker)
16981
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
1989 (setq Info-tag-table-marker (make-marker))
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
1990 (make-local-variable 'Info-tag-table-buffer)
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
1991 (setq Info-tag-table-buffer nil)
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1992 (make-local-variable 'Info-history)
2561
1bd4cf98df68 (Info-find-node, Info-insert-subfile): Do the right thing if info files have
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2038
diff changeset
1993 (make-local-variable 'Info-index-alternatives)
19043
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
1994 ;; This is for the sake of the invisible text we use handling titles.
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
1995 (make-local-variable 'line-move-ignore-invisible)
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
1996 (setq line-move-ignore-invisible t)
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1997 (Info-set-mode-line)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1998 (run-hooks 'Info-mode-hook))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1999
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2000 (defvar Info-edit-map nil
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2001 "Local keymap used within `e' command of Info.")
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2002 (if Info-edit-map
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2003 nil
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2004 (setq Info-edit-map (nconc (make-sparse-keymap) text-mode-map))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2005 (define-key Info-edit-map "\C-c\C-c" 'Info-cease-edit))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2006
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2007 ;; Info-edit mode is suitable only for specially formatted data.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2008 (put 'info-edit-mode 'mode-class 'special)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2009
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2010 (defun Info-edit-mode ()
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2011 "Major mode for editing the contents of an Info node.
1477
e31496f6289d Dox fix.
Christopher Zaborsky <rogue@erratum.com>
parents: 1340
diff changeset
2012 Like text mode with the addition of `Info-cease-edit'
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2013 which returns to Info mode for browsing.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2014 \\{Info-edit-map}"
8805
6d8297d65d78 (Info-edit): Move the customary mode-initialization calls out of here.
Karl Heuer <kwzh@gnu.org>
parents: 8739
diff changeset
2015 (use-local-map Info-edit-map)
6d8297d65d78 (Info-edit): Move the customary mode-initialization calls out of here.
Karl Heuer <kwzh@gnu.org>
parents: 8739
diff changeset
2016 (setq major-mode 'Info-edit-mode)
6d8297d65d78 (Info-edit): Move the customary mode-initialization calls out of here.
Karl Heuer <kwzh@gnu.org>
parents: 8739
diff changeset
2017 (setq mode-name "Info Edit")
6d8297d65d78 (Info-edit): Move the customary mode-initialization calls out of here.
Karl Heuer <kwzh@gnu.org>
parents: 8739
diff changeset
2018 (kill-local-variable 'mode-line-buffer-identification)
6d8297d65d78 (Info-edit): Move the customary mode-initialization calls out of here.
Karl Heuer <kwzh@gnu.org>
parents: 8739
diff changeset
2019 (setq buffer-read-only nil)
11580
7f357fe2cda5 (Info-edit-mode, Info-cease-edit): Use force-mode-line-update.
Karl Heuer <kwzh@gnu.org>
parents: 11527
diff changeset
2020 (force-mode-line-update)
8805
6d8297d65d78 (Info-edit): Move the customary mode-initialization calls out of here.
Karl Heuer <kwzh@gnu.org>
parents: 8739
diff changeset
2021 (buffer-enable-undo (current-buffer))
6d8297d65d78 (Info-edit): Move the customary mode-initialization calls out of here.
Karl Heuer <kwzh@gnu.org>
parents: 8739
diff changeset
2022 (run-hooks 'Info-edit-mode-hook))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2023
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2024 (defun Info-edit ()
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2025 "Edit the contents of this Info node.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2026 Allowed only if variable `Info-enable-edit' is non-nil."
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2027 (interactive)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2028 (or Info-enable-edit
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2029 (error "Editing info nodes is not enabled"))
8805
6d8297d65d78 (Info-edit): Move the customary mode-initialization calls out of here.
Karl Heuer <kwzh@gnu.org>
parents: 8739
diff changeset
2030 (Info-edit-mode)
14319
e39a2eb75dbe (Info-edit, Info-goto-emacs-command-node): Pass proper format string to message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
2031 (message "%s" (substitute-command-keys
8805
6d8297d65d78 (Info-edit): Move the customary mode-initialization calls out of here.
Karl Heuer <kwzh@gnu.org>
parents: 8739
diff changeset
2032 "Editing: Type \\<Info-edit-map>\\[Info-cease-edit] to return to info")))
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2033
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2034 (defun Info-cease-edit ()
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2035 "Finish editing Info node; switch back to Info proper."
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2036 (interactive)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2037 ;; Do this first, so nothing has changed if user C-g's at query.
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2038 (and (buffer-modified-p)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2039 (y-or-n-p "Save the file? ")
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2040 (save-buffer))
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2041 (use-local-map Info-mode-map)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2042 (setq major-mode 'Info-mode)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2043 (setq mode-name "Info")
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2044 (Info-set-mode-line)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2045 (setq buffer-read-only t)
11580
7f357fe2cda5 (Info-edit-mode, Info-cease-edit): Use force-mode-line-update.
Karl Heuer <kwzh@gnu.org>
parents: 11527
diff changeset
2046 (force-mode-line-update)
325
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2047 (and (marker-position Info-tag-table-marker)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2048 (buffer-modified-p)
3f3710052f22 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2049 (message "Tags may have changed. Use Info-tagify if necessary")))
359
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2050
12889
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2051 (defvar Info-file-list-for-emacs
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2052 '("ediff" "forms" "gnus" "info" ("mh" . "mh-e") "sc")
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2053 "List of Info files that describe Emacs commands.
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2054 An element can be a file name, or a list of the form (PREFIX . FILE)
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2055 where PREFIX is a name prefix and FILE is the file to look in.
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2056 If the element is just a file name, the file name also serves as the prefix.")
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2057
359
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2058 (defun Info-find-emacs-command-nodes (command)
12889
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2059 "Return a list of locations documenting COMMAND.
12892
8b902b24d749 (Info-find-emacs-command-nodes): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 12889
diff changeset
2060 The `info-file' property of COMMAND says which Info manual to search.
8b902b24d749 (Info-find-emacs-command-nodes): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 12889
diff changeset
2061 If COMMAND has no property, the variable `Info-file-list-for-emacs'
8b902b24d749 (Info-find-emacs-command-nodes): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 12889
diff changeset
2062 defines heuristics for which Info manual to try.
359
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2063 The locations are of the format used in Info-history, i.e.
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2064 \(FILENAME NODENAME BUFFERPOS\)."
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2065 (let ((where '())
21641
1174b1d6cbf6 (Info-menu): Allow extra spaces at start of menu item.
Richard M. Stallman <rms@gnu.org>
parents: 21197
diff changeset
2066 (cmd-desc (concat "^\\* +" (regexp-quote (symbol-name command))
12889
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2067 ":\\s *\\(.*\\)\\.$"))
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2068 (info-file "emacs")) ;default
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2069 ;; Determine which info file this command is documented in.
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2070 (if (get command 'info-file)
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2071 (setq info-file (get command 'info-file))
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2072 ;; If it doesn't say explicitly, test its name against
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2073 ;; various prefixes that we know.
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2074 (let ((file-list Info-file-list-for-emacs))
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2075 (while file-list
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2076 (let* ((elt (car file-list))
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2077 (name (if (consp elt)
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2078 (car elt)
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2079 elt))
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2080 (file (if (consp elt) (cdr elt) elt))
12892
8b902b24d749 (Info-find-emacs-command-nodes): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 12889
diff changeset
2081 (regexp (concat "\\`" (regexp-quote name)
12889
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2082 "\\(\\'\\|-\\)")))
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2083 (if (string-match regexp (symbol-name command))
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2084 (setq info-file file file-list nil))
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2085 (setq file-list (cdr file-list))))))
359
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2086 (save-excursion
12889
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2087 (condition-case nil
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2088 (Info-find-node info-file "Command Index")
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2089 ;; Some manuals may not have a separate Command Index node,
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2090 ;; so try just Index instead.
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2091 (error
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2092 (Info-find-node info-file "Index")))
359
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2093 ;; Take the index node off the Info history.
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2094 (setq Info-history (cdr Info-history))
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2095 (goto-char (point-max))
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2096 (while (re-search-backward cmd-desc nil t)
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2097 (setq where (cons (list Info-current-file
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2098 (buffer-substring
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2099 (match-beginning 1)
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2100 (match-end 1))
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2101 0)
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2102 where)))
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2103 where)))
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2104
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2105 ;;;###autoload
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2106 (defun Info-goto-emacs-command-node (command)
4468
5e9224dac452 (Info-goto-emacs-command-node, Info-goto-emacs-key-command-node): Doc fix.
Roland McGrath <roland@gnu.org>
parents: 4410
diff changeset
2107 "Go to the Info node in the Emacs manual for command COMMAND.
12889
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2108 The command is found by looking up in Emacs manual's Command Index
12892
8b902b24d749 (Info-find-emacs-command-nodes): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 12889
diff changeset
2109 or in another manual found via COMMAND's `info-file' property or
8b902b24d749 (Info-find-emacs-command-nodes): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 12889
diff changeset
2110 the variable `Info-file-list-for-emacs'."
359
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2111 (interactive "CFind documentation for command: ")
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2112 (or (commandp command)
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2113 (signal 'wrong-type-argument (list 'commandp command)))
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2114 (let ((where (Info-find-emacs-command-nodes command)))
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2115 (if where
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2116 (let ((num-matches (length where)))
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2117 ;; Get Info running, and pop to it in another window.
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2118 (save-window-excursion
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2119 (info))
16981
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
2120 ;; FIXME It would be cool if this could use a buffer other
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
2121 ;; than *info*.
359
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2122 (pop-to-buffer "*info*")
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2123 (Info-find-node (car (car where))
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2124 (car (cdr (car where))))
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2125 (if (> num-matches 1)
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2126 (progn
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2127 ;; Info-find-node already pushed (car where) onto
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2128 ;; Info-history. Put the other nodes that were found on
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2129 ;; the history.
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2130 (setq Info-history (nconc (cdr where) Info-history))
14319
e39a2eb75dbe (Info-edit, Info-goto-emacs-command-node): Pass proper format string to message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
2131 (message "Found %d other entr%s. Use %s to see %s."
6049
32df2b4d67cf (Info-build-node-completions): Add a call to widen.
Richard M. Stallman <rms@gnu.org>
parents: 5555
diff changeset
2132 (1- num-matches)
32df2b4d67cf (Info-build-node-completions): Add a call to widen.
Richard M. Stallman <rms@gnu.org>
parents: 5555
diff changeset
2133 (if (> num-matches 2) "ies" "y")
14319
e39a2eb75dbe (Info-edit, Info-goto-emacs-command-node): Pass proper format string to message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
2134 (substitute-command-keys "\\[Info-last]")
6049
32df2b4d67cf (Info-build-node-completions): Add a call to widen.
Richard M. Stallman <rms@gnu.org>
parents: 5555
diff changeset
2135 (if (> num-matches 2) "them" "it")))))
14355
87fde6ef6c95 (Info-goto-emacs-command-node): Fix error text.
Karl Heuer <kwzh@gnu.org>
parents: 14319
diff changeset
2136 (error "Couldn't find documentation for %s" command))))
359
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2137
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2138 ;;;###autoload
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2139 (defun Info-goto-emacs-key-command-node (key)
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2140 "Go to the Info node in the Emacs manual the command bound to KEY, a string.
4468
5e9224dac452 (Info-goto-emacs-command-node, Info-goto-emacs-key-command-node): Doc fix.
Roland McGrath <roland@gnu.org>
parents: 4410
diff changeset
2141 Interactively, if the binding is execute-extended-command, a command is read.
12889
d912ac1e1f00 (Info-file-list-for-emacs): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 12779
diff changeset
2142 The command is found by looking up in Emacs manual's Command Index
12892
8b902b24d749 (Info-find-emacs-command-nodes): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 12889
diff changeset
2143 or in another manual found via COMMAND's `info-file' property or
8b902b24d749 (Info-find-emacs-command-nodes): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents: 12889
diff changeset
2144 the variable `Info-file-list-for-emacs'."
359
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2145 (interactive "kFind documentation for key:")
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2146 (let ((command (key-binding key)))
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2147 (cond ((null command)
1484
6c2a714566d3 Rename buffer-flush-undo to buffer-disable-undo.
Richard M. Stallman <rms@gnu.org>
parents: 1477
diff changeset
2148 (message "%s is undefined" (key-description key)))
359
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2149 ((and (interactive-p)
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2150 (eq command 'execute-extended-command))
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2151 (Info-goto-emacs-command-node
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2152 (read-command "Find documentation for command: ")))
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2153 (t
da45fa7bc8d1 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 325
diff changeset
2154 (Info-goto-emacs-command-node command)))))
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
2155
17430
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
2156 (defcustom Info-title-face-alist
13084
805486dfbc82 (Info-title-face-alist): New var.
Karl Heuer <kwzh@gnu.org>
parents: 13004
diff changeset
2157 '((?* bold underline)
805486dfbc82 (Info-title-face-alist): New var.
Karl Heuer <kwzh@gnu.org>
parents: 13004
diff changeset
2158 (?= bold-italic underline)
805486dfbc82 (Info-title-face-alist): New var.
Karl Heuer <kwzh@gnu.org>
parents: 13004
diff changeset
2159 (?- italic underline))
805486dfbc82 (Info-title-face-alist): New var.
Karl Heuer <kwzh@gnu.org>
parents: 13004
diff changeset
2160 "*Alist of face or list of faces to use for pseudo-underlined titles.
17430
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
2161 The alist key is the character the title is underlined with (?*, ?= or ?-)."
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
2162 :type '(repeat (list character face face))
de68258fef5f Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 17154
diff changeset
2163 :group 'info)
13084
805486dfbc82 (Info-title-face-alist): New var.
Karl Heuer <kwzh@gnu.org>
parents: 13004
diff changeset
2164
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
2165 (defun Info-fontify-node ()
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
2166 (save-excursion
22951
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
2167 (let ((buffer-read-only nil)
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
2168 (case-fold-search t))
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
2169 (goto-char (point-min))
21704
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
2170 (when (looking-at "^File: [^,: \t]+,?[ \t]+")
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
2171 (goto-char (match-end 0))
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
2172 (while
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
2173 (looking-at "[ \t]*\\([^:, \t\n]+\\):[ \t]+\\([^:,\t\n]+\\),?")
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
2174 (goto-char (match-end 0))
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
2175 (if (save-excursion
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
2176 (goto-char (match-beginning 1))
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
2177 (save-match-data (looking-at "Node:")))
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
2178 (put-text-property (match-beginning 2) (match-end 2)
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
2179 'face 'info-node)
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
2180 (put-text-property (match-beginning 2) (match-end 2)
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
2181 'face 'info-xref)
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
2182 (put-text-property (match-beginning 2) (match-end 2)
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
2183 'mouse-face 'highlight))))
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
2184 (goto-char (point-min))
13084
805486dfbc82 (Info-title-face-alist): New var.
Karl Heuer <kwzh@gnu.org>
parents: 13004
diff changeset
2185 (while (re-search-forward "\n\\([^ \t\n].+\\)\n\\(\\*+\\|=+\\|-+\\)$"
805486dfbc82 (Info-title-face-alist): New var.
Karl Heuer <kwzh@gnu.org>
parents: 13004
diff changeset
2186 nil t)
805486dfbc82 (Info-title-face-alist): New var.
Karl Heuer <kwzh@gnu.org>
parents: 13004
diff changeset
2187 (put-text-property (match-beginning 1) (match-end 1)
805486dfbc82 (Info-title-face-alist): New var.
Karl Heuer <kwzh@gnu.org>
parents: 13004
diff changeset
2188 'face
13085
5be0696ddc1e (Info-fontify-node): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents: 13084
diff changeset
2189 (cdr (assq (preceding-char) Info-title-face-alist)))
19043
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
2190 ;; This is a serious problem for trying to handle multiple
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
2191 ;; frame types at once. We want this text to be invisible
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
2192 ;; on frames that can display the font above.
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
2193 (if (memq (framep (selected-frame)) '(x pc w32))
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
2194 (put-text-property (match-end 1) (match-end 2)
a2853a75ce57 (info-node, info-xref, info-menu-5):
Richard M. Stallman <rms@gnu.org>
parents: 17968
diff changeset
2195 'invisible t)))
13084
805486dfbc82 (Info-title-face-alist): New var.
Karl Heuer <kwzh@gnu.org>
parents: 13004
diff changeset
2196 (goto-char (point-min))
7859
1d1693211560 (Info-fontify-node): Require some whitespace after *Note.
Richard M. Stallman <rms@gnu.org>
parents: 7837
diff changeset
2197 (while (re-search-forward "\\*Note[ \n\t]+\\([^:]*\\):" nil t)
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
2198 (if (= (char-after (1- (match-beginning 0))) ?\") ; hack
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
2199 nil
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
2200 (put-text-property (match-beginning 1) (match-end 1)
6624
ca39bae3744d (Info-fontify-node): Add mouse-face properties.
Richard M. Stallman <rms@gnu.org>
parents: 6566
diff changeset
2201 'face 'info-xref)
ca39bae3744d (Info-fontify-node): Add mouse-face properties.
Richard M. Stallman <rms@gnu.org>
parents: 6566
diff changeset
2202 (put-text-property (match-beginning 1) (match-end 1)
ca39bae3744d (Info-fontify-node): Add mouse-face properties.
Richard M. Stallman <rms@gnu.org>
parents: 6566
diff changeset
2203 'mouse-face 'highlight)))
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
2204 (goto-char (point-min))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
2205 (if (and (search-forward "\n* Menu:" nil t)
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
2206 (not (string-match "\\<Index\\>" Info-current-node))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
2207 ;; Don't take time to annotate huge menus
8193
0be48d0d16fd (Info-fontify-maximum-menu-size): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 8071
diff changeset
2208 (< (- (point-max) (point)) Info-fontify-maximum-menu-size))
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
2209 (let ((n 0))
21641
1174b1d6cbf6 (Info-menu): Allow extra spaces at start of menu item.
Richard M. Stallman <rms@gnu.org>
parents: 21197
diff changeset
2210 (while (re-search-forward "^\\* +\\([^:\t\n]*\\):" nil t)
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
2211 (setq n (1+ n))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
2212 (if (memq n '(5 9)) ; visual aids to help with 1-9 keys
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
2213 (put-text-property (match-beginning 0)
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
2214 (1+ (match-beginning 0))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
2215 'face 'info-menu-5))
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
2216 (put-text-property (match-beginning 1) (match-end 1)
21704
e2283c4df334 (Info-fontify-node): For menu items, use info-xref font.
Richard M. Stallman <rms@gnu.org>
parents: 21641
diff changeset
2217 'face 'info-xref)
6624
ca39bae3744d (Info-fontify-node): Add mouse-face properties.
Richard M. Stallman <rms@gnu.org>
parents: 6566
diff changeset
2218 (put-text-property (match-beginning 1) (match-end 1)
ca39bae3744d (Info-fontify-node): Add mouse-face properties.
Richard M. Stallman <rms@gnu.org>
parents: 6566
diff changeset
2219 'mouse-face 'highlight))))
4410
25fb71fc2643 (Info-fontify-node): New function.
Richard M. Stallman <rms@gnu.org>
parents: 4261
diff changeset
2220 (set-buffer-modified-p nil))))
16981
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
2221
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
2222
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
2223 ;; When an Info buffer is killed, make sure the associated tags buffer
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
2224 ;; is killed too.
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
2225 (defun Info-kill-buffer ()
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
2226 (and (eq major-mode 'Info-mode)
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
2227 Info-tag-table-buffer
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
2228 (kill-buffer Info-tag-table-buffer)))
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
2229
643e0f90e153 Handle multiple Info buffers.
Richard M. Stallman <rms@gnu.org>
parents: 16790
diff changeset
2230 (add-hook 'kill-buffer-hook 'Info-kill-buffer)
20755
0ceaf8e0782b Added speedbar support function `Info-speedbar-buttons',
Eric M. Ludlam <zappo@gnu.org>
parents: 20514
diff changeset
2231
0ceaf8e0782b Added speedbar support function `Info-speedbar-buttons',
Eric M. Ludlam <zappo@gnu.org>
parents: 20514
diff changeset
2232 ;;; Speedbar support:
0ceaf8e0782b Added speedbar support function `Info-speedbar-buttons',
Eric M. Ludlam <zappo@gnu.org>
parents: 20514
diff changeset
2233 ;; These functions permit speedbar to display the "tags" in the
0ceaf8e0782b Added speedbar support function `Info-speedbar-buttons',
Eric M. Ludlam <zappo@gnu.org>
parents: 20514
diff changeset
2234 ;; current info node.
22733
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2235 (eval-when-compile (require 'speedbar))
20755
0ceaf8e0782b Added speedbar support function `Info-speedbar-buttons',
Eric M. Ludlam <zappo@gnu.org>
parents: 20514
diff changeset
2236
22733
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2237 (defvar Info-speedbar-key-map nil
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2238 "Keymap used when in the info display mode.")
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2239
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2240 (defun Info-install-speedbar-variables ()
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2241 "Install those variables used by speedbar to enhance Info."
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2242 (if Info-speedbar-key-map
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2243 nil
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2244 (setq Info-speedbar-key-map (speedbar-make-specialized-keymap))
20755
0ceaf8e0782b Added speedbar support function `Info-speedbar-buttons',
Eric M. Ludlam <zappo@gnu.org>
parents: 20514
diff changeset
2245
22733
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2246 ;; Basic tree features
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2247 (define-key Info-speedbar-key-map "e" 'speedbar-edit-line)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2248 (define-key Info-speedbar-key-map "\C-m" 'speedbar-edit-line)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2249 (define-key Info-speedbar-key-map "+" 'speedbar-expand-line)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2250 (define-key Info-speedbar-key-map "-" 'speedbar-contract-line)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2251 )
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2252
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2253 (speedbar-add-expansion-list '("Info" Info-speedbar-menu-items
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2254 Info-speedbar-key-map
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2255 Info-speedbar-hierarchy-buttons)))
20755
0ceaf8e0782b Added speedbar support function `Info-speedbar-buttons',
Eric M. Ludlam <zappo@gnu.org>
parents: 20514
diff changeset
2256
0ceaf8e0782b Added speedbar support function `Info-speedbar-buttons',
Eric M. Ludlam <zappo@gnu.org>
parents: 20514
diff changeset
2257 (defvar Info-speedbar-menu-items
22733
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2258 '(["Browse Node" speedbar-edit-line t]
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2259 ["Expand Node" speedbar-expand-line
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2260 (save-excursion (beginning-of-line)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2261 (looking-at "[0-9]+: *.\\+. "))]
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2262 ["Contract Node" speedbar-contract-line
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2263 (save-excursion (beginning-of-line)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2264 (looking-at "[0-9]+: *.-. "))]
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2265 )
20755
0ceaf8e0782b Added speedbar support function `Info-speedbar-buttons',
Eric M. Ludlam <zappo@gnu.org>
parents: 20514
diff changeset
2266 "Additional menu-items to add to speedbar frame.")
0ceaf8e0782b Added speedbar support function `Info-speedbar-buttons',
Eric M. Ludlam <zappo@gnu.org>
parents: 20514
diff changeset
2267
22733
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2268 ;; Make sure our special speedbar major mode is loaded
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2269 (if (featurep 'speedbar)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2270 (Info-install-speedbar-variables)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2271 (add-hook 'speedbar-load-hook 'Info-install-speedbar-variables))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2272
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2273 ;;; Info hierarchy display method
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2274 ;;;###autoload
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2275 (defun Info-speedbar-browser ()
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2276 "Initialize speedbar to display an info node browser.
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2277 This will add a speedbar major display mode."
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2278 (interactive)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2279 (require 'speedbar)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2280 ;; Make sure that speedbar is active
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2281 (speedbar-frame-mode 1)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2282 ;; Now, throw us into Info mode on speedbar.
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2283 (speedbar-change-initial-expansion-list "Info")
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2284 )
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2285
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2286 (defun Info-speedbar-hierarchy-buttons (directory depth &optional node)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2287 "Display an Info directory hierarchy in speedbar.
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2288 DIRECTORY is the current directory in the attached frame.
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2289 DEPTH is the current indentation depth.
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2290 NODE is an optional argument that is used to represent the
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2291 specific node to expand."
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2292 (if (and (not node)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2293 (save-excursion (goto-char (point-min))
22951
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
2294 (let ((case-fold-search t))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
2295 (looking-at "Info Nodes:"))))
22733
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2296 ;; Update our "current node" maybe?
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2297 nil
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2298 ;; We cannot use the generic list code, that depends on all leaves
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2299 ;; being known at creation time.
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2300 (if (not node)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2301 (speedbar-with-writable (insert "Info Nodes:\n")))
22894
186b2098dcd8 (Info-speedbar-hierarchy-buttons): Improved the speedbar frame management.
Eric M. Ludlam <zappo@gnu.org>
parents: 22863
diff changeset
2302 (let ((completions nil)
186b2098dcd8 (Info-speedbar-hierarchy-buttons): Improved the speedbar frame management.
Eric M. Ludlam <zappo@gnu.org>
parents: 22863
diff changeset
2303 (cf (selected-frame)))
186b2098dcd8 (Info-speedbar-hierarchy-buttons): Improved the speedbar frame management.
Eric M. Ludlam <zappo@gnu.org>
parents: 22863
diff changeset
2304 (select-frame speedbar-attached-frame)
186b2098dcd8 (Info-speedbar-hierarchy-buttons): Improved the speedbar frame management.
Eric M. Ludlam <zappo@gnu.org>
parents: 22863
diff changeset
2305 (save-window-excursion
186b2098dcd8 (Info-speedbar-hierarchy-buttons): Improved the speedbar frame management.
Eric M. Ludlam <zappo@gnu.org>
parents: 22863
diff changeset
2306 (setq completions
186b2098dcd8 (Info-speedbar-hierarchy-buttons): Improved the speedbar frame management.
Eric M. Ludlam <zappo@gnu.org>
parents: 22863
diff changeset
2307 (Info-speedbar-fetch-file-nodes (or node '"(dir)top"))))
186b2098dcd8 (Info-speedbar-hierarchy-buttons): Improved the speedbar frame management.
Eric M. Ludlam <zappo@gnu.org>
parents: 22863
diff changeset
2308 (select-frame cf)
22733
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2309 (if completions
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2310 (speedbar-with-writable
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2311 (while completions
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2312 (speedbar-make-tag-line 'bracket ?+ 'Info-speedbar-expand-node
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2313 (cdr (car completions))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2314 (car (car completions))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2315 'Info-speedbar-goto-node
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2316 (cdr (car completions))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2317 'info-xref depth)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2318 (setq completions (cdr completions)))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2319 t)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2320 nil))))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2321
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2322 (defun Info-speedbar-goto-node (text node indent)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2323 "When user clicks on TEXT, goto an info NODE.
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2324 The INDENT level is ignored."
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2325 (select-frame speedbar-attached-frame)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2326 (let* ((buff (or (get-buffer "*info*")
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2327 (progn (info) (get-buffer "*info*"))))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2328 (bwin (get-buffer-window buff 0)))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2329 (if bwin
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2330 (progn
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2331 (select-window bwin)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2332 (raise-frame (window-frame bwin)))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2333 (if speedbar-power-click
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2334 (let ((pop-up-frames t)) (select-window (display-buffer buff)))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2335 (select-frame speedbar-attached-frame)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2336 (switch-to-buffer buff)))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2337 (let ((junk (string-match "^(\\([^)]+\\))\\([^.]+\\)$" node))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2338 (file (match-string 1 node))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2339 (node (match-string 2 node)))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2340 (Info-find-node file node)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2341 ;; If we do a find-node, and we were in info mode, restore
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2342 ;; the old default method. Once we are in info mode, it makes
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2343 ;; sense to return to whatever method the user was using before.
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2344 (if (string= speedbar-initial-expansion-list-name "Info")
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2345 (speedbar-change-initial-expansion-list
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2346 speedbar-previously-used-expansion-list-name)))))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2347
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2348 (defun Info-speedbar-expand-node (text token indent)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2349 "Expand the node the user clicked on.
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2350 TEXT is the text of the button we clicked on, a + or - item.
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2351 TOKEN is data related to this node (NAME . FILE).
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2352 INDENT is the current indentation depth."
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2353 (cond ((string-match "+" text) ;we have to expand this file
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2354 (speedbar-change-expand-button-char ?-)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2355 (if (speedbar-with-writable
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2356 (save-excursion
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2357 (end-of-line) (forward-char 1)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2358 (Info-speedbar-hierarchy-buttons nil (1+ indent) token)))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2359 (speedbar-change-expand-button-char ?-)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2360 (speedbar-change-expand-button-char ??)))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2361 ((string-match "-" text) ;we have to contract this node
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2362 (speedbar-change-expand-button-char ?+)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2363 (speedbar-delete-subblock indent))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2364 (t (error "Ooops... not sure what to do")))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2365 (speedbar-center-buffer-smartly))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2366
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2367 (defun Info-speedbar-fetch-file-nodes (nodespec)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2368 "Fetch the subnodes from the info NODESPEC.
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2369 NODESPEC is a string of the form: (file)node.
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2370 Optional THISFILE represends the filename of"
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2371 (save-excursion
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2372 ;; Set up a buffer we can use to fake-out Info.
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2373 (set-buffer (get-buffer-create "*info-browse-tmp*"))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2374 (if (not (equal major-mode 'Info-mode))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2375 (Info-mode))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2376 ;; Get the node into this buffer
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2377 (let ((junk (string-match "^(\\([^)]+\\))\\([^.]+\\)$" nodespec))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2378 (file (match-string 1 nodespec))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2379 (node (match-string 2 nodespec)))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2380 (Info-find-node file node))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2381 ;; Scan the created buffer
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2382 (goto-char (point-min))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2383 (let ((completions nil)
22951
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
2384 (case-fold-search t)
22733
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2385 (thisfile (progn (string-match "^(\\([^)]+\\))" nodespec)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2386 (match-string 1 nodespec))))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2387 ;; Always skip the first one...
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2388 (re-search-forward "\n\\* \\([^:\t\n]*\\):" nil t)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2389 (while (re-search-forward "\n\\* \\([^:\t\n]*\\):" nil t)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2390 (let ((name (match-string 1)))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2391 (if (looking-at " *\\(([^)]+)[^.\n]+\\)\\.")
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2392 (setq name (cons name (match-string 1)))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2393 (if (looking-at " *\\(([^)]+)\\)\\.")
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2394 (setq name (cons name (concat (match-string 1) "Top")))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2395 (if (looking-at " \\([^.]+\\).")
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2396 (setq name
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2397 (cons name (concat "(" thisfile ")" (match-string 1))))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2398 (setq name (cons name (concat "(" thisfile ")" name))))))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2399 (setq completions (cons name completions))))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2400 (nreverse completions))))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2401
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2402 ;;; Info mode node listing
20755
0ceaf8e0782b Added speedbar support function `Info-speedbar-buttons',
Eric M. Ludlam <zappo@gnu.org>
parents: 20514
diff changeset
2403 (defun Info-speedbar-buttons (buffer)
0ceaf8e0782b Added speedbar support function `Info-speedbar-buttons',
Eric M. Ludlam <zappo@gnu.org>
parents: 20514
diff changeset
2404 "Create a speedbar display to help navigation in an Info file.
0ceaf8e0782b Added speedbar support function `Info-speedbar-buttons',
Eric M. Ludlam <zappo@gnu.org>
parents: 20514
diff changeset
2405 BUFFER is the buffer speedbar is requesting buttons for."
22733
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2406 (if (save-excursion (goto-char (point-min))
22951
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
2407 (let ((case-fold-search t))
19b3899582b4 Bind case-fold-search to t in many functions.
Richard M. Stallman <rms@gnu.org>
parents: 22902
diff changeset
2408 (not (looking-at "Info Nodes:"))))
22733
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2409 (erase-buffer))
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2410 (Info-speedbar-hierarchy-buttons nil 0)
8d8e664f1f6c No longer depends on speedbspec for byte compile.
Karl Heuer <kwzh@gnu.org>
parents: 22692
diff changeset
2411 )
584
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 540
diff changeset
2412
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 540
diff changeset
2413 (provide 'info)
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 540
diff changeset
2414
660
08eb386dd0f3 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
2415 ;;; info.el ends here