annotate lisp/packages/man.el @ 16:0293115a14e9 r19-15b91

Import from CVS: tag r19-15b91
author cvs
date Mon, 13 Aug 2007 08:49:20 +0200
parents 49a24b4fd526
children 4103f0995bd7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1 ;;; man.el --- browse UNIX manual pages
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
2 ;; Keywords: help
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
4 ;; Copyright (C) 1985, 1993, 1994 Free Software Foundation, Inc.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
5 ;;
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
6 ;; This file is part of XEmacs.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
7
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
8 ;; XEmacs is free software; you can redistribute it and/or modify it
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
9 ;; under the terms of the GNU General Public License as published by
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
10 ;; the Free Software Foundation; either version 2, or (at your option)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
11 ;; any later version.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
12
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
13 ;; XEmacs is distributed in the hope that it will be useful, but
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
14 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
15 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
16 ;; General Public License for more details.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
17
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
18 ;; You should have received a copy of the GNU General Public License
16
0293115a14e9 Import from CVS: tag r19-15b91
cvs
parents: 10
diff changeset
19 ;; along with XEmacs; see the file COPYING. If not, write to the
0293115a14e9 Import from CVS: tag r19-15b91
cvs
parents: 10
diff changeset
20 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
0293115a14e9 Import from CVS: tag r19-15b91
cvs
parents: 10
diff changeset
21 ;; Boston, MA 02111-1307, USA.
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
22
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
23 ;; Mostly rewritten by Alan K. Stebbens <aks@hub.ucsb.edu> 11-apr-90.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
24 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
25 ;; o Match multiple man pages using TOPIC as a simple pattern
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
26 ;; o Search unformatted pages, even when formatted matches are found
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
27 ;; o Query the user as to which pages are desired
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
28 ;; o Use of the prefix arg to toggle/bypass the above features
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
29 ;; o Buffers named by the first topic in the buffer
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
30 ;; o Automatic uncompress for compressed man pages (.Z, .z, and .gz)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
31 ;; o View the resulting buffer using M-x view mode
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
32 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
33 ;; Modified 16-mar-91 by Jamie Zawinski <jwz@lucid.com> to default the
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
34 ;; manual topic to the symbol at point, just like find-tag does.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
35 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
36 ;; Modified 22-mar-93 by jwz to use multiple fonts and follow xrefs with mouse.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
37 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
38 ;; Modified 16-apr-93 by Dave Gillespie <daveg@synaptics.com> to make
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
39 ;; apropos work nicely; work correctly when bold or italic is unavailable;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
40 ;; reuse old buffer if topic is re-selected (in Manual-topic-buffer mode).
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
41 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
42 ;; Modified 4-apr-94 by jwz: merged in Tibor Polgar's code for manpath.conf.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
43 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
44 ;; Modified 19-apr-94 by Tibor Polgar <tlp00@spg.amdahl.com> to add support for
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
45 ;; $PAGER variable to be emacsclient and properly process man pages (assuming
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
46 ;; the man pages were built by man in /tmp. also fixed bug with man list being
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
47 ;; backwards.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
48 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
49 ;; Modified 23-aug-94 by Tibor Polgar <tlp00@spg.amdahl.com> to add support for
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
50 ;; displaying only one instance of a man page (Manual-unique-man-sections-only)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
51 ;; Fixed some more man page ordering bugs, bug with Manual-query-multiple-pages.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
52 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
53 ;; Modified 29-nov-94 by Ben Wing <wing@spg.amdahl.com>: small fixes
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
54 ;; that should hopefully make things work under HPUX and IRIX.;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
55 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
56 ;; Modified 15-jul-95 by Dale Atems <atems@physics.wayne.edu>:
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
57 ;; some extensive rewriting to make things work right (more or less)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
58 ;; under IRIX.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
59 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
60 ;; This file defines "manual-entry", and the remaining definitions all
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
61 ;; begin with "Manual-". This makes the autocompletion on "M-x man" work.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
62 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
63 ;; Variables of interest:
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
64 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
65 ;; Manual-program
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
66 ;; Manual-topic-buffer
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
67 ;; Manual-buffer-view-mode
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
68 ;; Manual-directory-list
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
69 ;; Manual-formatted-directory-list
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
70 ;; Manual-match-topic-exactly
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
71 ;; Manual-query-multiple-pages
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
72 ;; Manual-page-history
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
73 ;; Manual-subdirectory-list
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
74 ;; Manual-man-page-section-ids
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
75 ;; Manual-formatted-page-prefix
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
76 ;; Manual-unformatted-page-prefix
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
77 ;; Manual-use-full-section-ids
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
78
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
79 (defvar Manual-program "man" "\
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
80 *Name of the program to invoke in order to format the source man pages.")
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
81
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
82 (defvar Manual-section-switch (if (eq system-type 'usg-unix-v) "-s" nil)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
83 "SysV needs this to work right.")
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
84
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
85 (defvar Manual-topic-buffer t "\
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
86 *Non-nil means \\[Manual-entry] should output the manual entry for TOPIC into
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
87 a buffer named *man TOPIC*, otherwise, it should name the buffer
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
88 *Manual Entry*.")
4
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents: 2
diff changeset
89
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
90 (defvar Manual-buffer-view-mode t "\
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
91 *Whether manual buffers should be placed in view-mode.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
92 nil means leave the buffer in fundamental-mode in another window.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
93 t means use `view-buffer' to display the man page in the current window.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
94 Any other value means use `view-buffer-other-window'.")
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
95
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
96 (defvar Manual-match-topic-exactly t "\
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
97 *Non-nil means that \\[manual-entry] will match the given TOPIC exactly, rather
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
98 apply it as a pattern. When this is nil, and \"Manual-query-multiple-pages\"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
99 is non-nil, then \\[manual-entry] will query you for all matching TOPICs.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
100 This variable only has affect on the preformatted man pages (the \"cat\" files),
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
101 since the \"man\" command always does exact topic matches.")
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
102
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
103 (defvar Manual-query-multiple-pages nil "\
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
104 *Non-nil means that \\[manual-entry] will query the user about multiple man
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
105 pages which match the given topic. The query is done using the function
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
106 \"y-or-n-p\". If this variable is nil, all man pages with topics matching the
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
107 topic given to \\[manual-entry] will be inserted into the temporary buffer.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
108 See the variable \"Manual-match-topic-exactly\" to control the matching.")
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
109
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
110 (defvar Manual-unique-man-sections-only nil
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
111 "*Only present one man page per section. This variable is useful if the same or
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
112 up/down level man pages for the same entry are present in mulitple man paths.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
113 When set to t, only the first entry found in a section is displayed, the others
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
114 are ignored without any messages or warnings. Note that duplicates can occur if
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
115 the system has both formatted and unformatted version of the same page.")
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
116
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
117 (defvar Manual-mode-hook nil
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
118 "Function or functions run on entry to Manual-mode.")
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
119
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
120 (defvar Manual-directory-list nil "\
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
121 *A list of directories used with the \"man\" command, where each directory
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
122 contains a set of \"man?\" and \"cat?\" subdirectories. If this variable is nil,
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
123 it is initialized by \\[Manual-directory-list-init].")
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
124
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
125 (defvar Manual-formatted-directory-list nil "\
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
126 A list of directories containing formatted man pages. Initialized by
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
127 \\[Manual-directory-list-init].")
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
128
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
129 (defvar Manual-unformatted-directory-list nil "\
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
130 A list of directories containing the unformatted (source) man pages.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
131 Initialized by \\[Manual-directory-list-init].")
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
132
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
133 (defvar Manual-page-history nil "\
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
134 A list of names of previously visited man page buffers.")
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
135
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
136 (defvar Manual-manpath-config-file "/usr/lib/manpath.config"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
137 "*Location of the manpath.config file, if any.")
4
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents: 2
diff changeset
138
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
139 (defvar Manual-apropos-switch "-k"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
140 "*Man apropos switch")
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
141
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
142 ;; New variables.
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
143
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
144 (defvar Manual-subdirectory-list nil "\
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
145 A list of all the subdirectories in which man pages may be found.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
146 Iniialized by Manual-directory-list-init.")
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
147
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
148 ;; This is for SGI systems; don't know what it should be otherwise.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
149 (defvar Manual-man-page-section-ids "1nl6823457poD" "\
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
150 String containing all suffix characters for \"cat\" and \"man\"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
151 that identify valid sections of the Un*x manual.")
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
152
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
153 (defvar Manual-formatted-page-prefix "cat" "\
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
154 Prefix for directories where formatted man pages are to be found.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
155 Defaults to \"cat\".")
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
156
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
157 (defvar Manual-unformatted-page-prefix "man" "\
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
158 Prefix for directories where unformatted man pages are to be found.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
159 Defaults to \"man\".")
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
160
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
161 (defvar Manual-leaf-signature "" "\
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
162 Regexp for identifying \"leaf\" subdirectories in the search path.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
163 If empty, initialized by Manual-directory-list-init.")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
164
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
165 (defvar Manual-use-full-section-ids t "\
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
166 If non-nil, pass full section ids to Manual-program, otherwise pass
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
167 only the first character. Defaults to 't'.")
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
168
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
169 (defvar Manual-use-subdirectory-list (eq system-type 'irix) "\
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
170 This makes manual-entry work correctly on SGI machines but it
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
171 imposes a large startup cost which is why it is not simply on by
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
172 default on all systems.")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
173
10
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
174 (defvar Manual-use-rosetta-man (not (null (locate-file "rman" exec-path))) "\
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
175 If non-nil, use RosettaMan (rman) to filter man pages.
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
176 This makes man-page cleanup virtually instantaneous, instead of
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
177 potentially taking a long time.
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
178
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
179 Here is information on RosettaMan, from Neal.Becker@comsat.com (Neal Becker):
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
180
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
181 RosettaMan is a filter for UNIX manual pages. It takes as input man
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
182 pages formatted for a variety of UNIX flavors (not [tn]roff source)
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
183 and produces as output a variety of file formats. Currently
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
184 RosettaMan accepts man pages as formatted by the following flavors of
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
185 UNIX: Hewlett-Packard HP-UX, AT&T System V, SunOS, Sun Solaris, OSF/1,
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
186 DEC Ultrix, SGI IRIX, Linux, SCO; and produces output for the following
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
187 formats: printable ASCII only (stripping page headers and footers),
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
188 section and subsection headers only, TkMan, [tn]roff, Ensemble, RTF,
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
189 SGML (soon--I finally found a DTD), HTML, MIME, LaTeX, LaTeX 2e, Perl 5's pod.
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
190
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
191 RosettaMan improves on other man page filters in several ways: (1) its
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
192 analysis recognizes the structural pieces of man pages, enabling high
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
193 quality output, (2) its modular structure permits easy augmentation of
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
194 output formats, (3) it accepts man pages formatted with the varient
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
195 macros of many different flavors of UNIX, and (4) it doesn't require
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
196 modification or cooperation with any other program.
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
197
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
198 RosettaMan is a rewrite of TkMan's man page filter, called bs2tk. (If
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
199 you haven't heard about TkMan, a hypertext man page browser, you
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
200 should grab it via anonymous ftp from ftp.cs.berkeley.edu:
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
201 /ucb/people/phelps/tkman.tar.Z.) Whereas bs2tk generated output only for
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
202 TkMan, RosettaMan generalizes the process so that the analysis can be
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
203 leveraged to new output formats. A single analysis engine recognizes
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
204 section heads, subsection heads, body text, lists, references to other
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
205 man pages, boldface, italics, bold italics, special characters (like
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
206 bullets), tables (to a degree) and strips out page headers and
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
207 footers. The engine sends signals to the selected output functions so
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
208 that an enhancement in the engine improves the quality of output of
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
209 all of them. Output format functions are easy to add, and thus far
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
210 average about about 75 lines of C code each.
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
211
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
212
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
213
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
214 *** NOTES ON CURRENT VERSION ***
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
215
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
216 Help! I'm looking for people to help with the following projects.
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
217 \(1) Better RTF output format. The current one works, but could be
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
218 made better. (2) Roff macros that produce text that is easily
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
219 parsable. RosettaMan handles a great variety, but some things, like
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
220 H-P's tables, are intractable. If you write an output format or
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
221 otherwise improve RosettaMan, please send in your code so that I may
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
222 share the wealth in future releases.
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
223
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
224 This version can try to identify tables (turn this on with the -T
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
225 switch) by looking for lines with a large amount of interword spacing,
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
226 reasoning that this is space between columns of a table. This
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
227 heuristic doesn't always work and sometimes misidentifies ordinary
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
228 text as tables. In general I think it is impossible to perfectly
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
229 identify tables from nroff formatted text. However, I do think the
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
230 heuristics can be tuned, so if you have a collection of manual pages
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
231 with unrecognized tables, send me the lot, in formatted form (i.e.,
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
232 after formatting with nroff -man), and uuencode them to preserve the
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
233 control characters. Better, if you can think of heuristics that
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
234 distinguish tables from ordinary text, I'd like to hear them.
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
235
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
236
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
237 Notes for HTML consumers: This filter does real (heuristic)
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
238 parsing--no <PRE>! Man page references are turned into hypertext links.")
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
239
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
240 (make-face 'man-italic)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
241 (or (face-differs-from-default-p 'man-italic)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
242 (copy-face 'italic 'man-italic))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
243 ;; XEmacs (from Darrell Kindred): underlining is annoying due to
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
244 ;; large blank spaces in this face.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
245 ;; (or (face-differs-from-default-p 'man-italic)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
246 ;; (set-face-underline-p 'man-italic t))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
247
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
248 (make-face 'man-bold)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
249 (or (face-differs-from-default-p 'man-bold)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
250 (copy-face 'bold 'man-bold))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
251 (or (face-differs-from-default-p 'man-bold)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
252 (copy-face 'man-italic 'man-bold))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
253
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
254 (make-face 'man-heading)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
255 (or (face-differs-from-default-p 'man-heading)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
256 (copy-face 'man-bold 'man-heading))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
257
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
258 (make-face 'man-xref)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
259 (or (face-differs-from-default-p 'man-xref)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
260 (set-face-underline-p 'man-xref t))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
261
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
262 ;; Manual-directory-list-init
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
263 ;; Initialize the directory lists.
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
264
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
265 (defun Manual-directory-list-init (&optional arg)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
266 "Initialize the Manual-directory-list variable from $MANPATH
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
267 if it is not already set, or if a prefix argument is provided."
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
268 (interactive "P")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
269 (if arg (setq Manual-directory-list nil))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
270 (if (null Manual-directory-list)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
271 (let ((manpath (getenv "MANPATH"))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
272 (global (Manual-manpath-config-contents))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
273 (dirlist nil)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
274 dir)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
275 (cond ((and manpath global)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
276 (setq manpath (concat manpath ":" global)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
277 (global
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
278 (setq manpath global))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
279 ((not manpath)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
280 ;; XEmacs - (bpw/stig) Unix-specifix hack for lusers w/ no manpath
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
281 (setq manpath "/usr/local/man:/usr/share/man:/usr/contrib/man:/usr/X11/man:/usr/man:/usr/catman")))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
282 ;; Make sure that any changes we've made internally are seen by man.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
283 (setenv "MANPATH" manpath)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
284 (while (string-match "\\`:*\\([^:]+\\)" manpath)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
285 (setq dir (substring manpath (match-beginning 1) (match-end 1)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
286 (and (not (member dir dirlist))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
287 (setq dirlist (cons dir dirlist)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
288 (setq manpath (substring manpath (match-end 0))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
289 (setq dirlist (nreverse dirlist))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
290 (setq Manual-directory-list dirlist)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
291 (setq Manual-subdirectory-list nil)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
292 (setq Manual-formatted-directory-list nil)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
293 (setq Manual-unformatted-directory-list nil)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
294 (if (string-equal Manual-leaf-signature "")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
295 (setq Manual-leaf-signature
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
296 (concat "/\\("
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
297 Manual-formatted-page-prefix
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
298 "\\|" Manual-unformatted-page-prefix
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
299 "\\)"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
300 "[" Manual-man-page-section-ids
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
301 "].?/.")))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
302 (if Manual-use-subdirectory-list
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
303 (progn
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
304 (if (null Manual-subdirectory-list)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
305 (setq Manual-subdirectory-list
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
306 (Manual-all-subdirectories Manual-directory-list
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
307 Manual-leaf-signature nil)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
308 (if (null Manual-formatted-directory-list)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
309 (setq Manual-formatted-directory-list
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
310 (Manual-filter-subdirectories Manual-subdirectory-list
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
311 Manual-formatted-page-prefix)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
312 (if (null Manual-unformatted-directory-list)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
313 (setq Manual-unformatted-directory-list
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
314 (Manual-filter-subdirectories Manual-subdirectory-list
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
315 Manual-unformatted-page-prefix))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
316 (if (null Manual-formatted-directory-list)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
317 (setq Manual-formatted-directory-list
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
318 (Manual-select-subdirectories Manual-directory-list
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
319 Manual-formatted-page-prefix)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
320 (if (null Manual-unformatted-directory-list)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
321 (setq Manual-unformatted-directory-list
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
322 (Manual-select-subdirectories Manual-directory-list
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
323 Manual-unformatted-page-prefix)))))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
324
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
325
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
326 (defun Manual-manpath-config-contents ()
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
327 "Parse the `Manual-manpath-config-file' file, if any.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
328 Returns a string like in $MANPATH."
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
329 (if (and Manual-manpath-config-file
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
330 (file-readable-p Manual-manpath-config-file))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
331 (let ((buf (get-buffer-create " *Manual-config*"))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
332 path)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
333 (set-buffer buf)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
334 (buffer-disable-undo buf)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
335 (erase-buffer)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
336 (insert-file-contents Manual-manpath-config-file)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
337 (while (re-search-forward "^\\(MANDATORY_MANPATH\\|MANPATH_MAP\\)"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
338 nil t)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
339 (and (re-search-forward "\\(/[^ \t\n]+\\)[ \t]*$")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
340 (setq path (concat path (buffer-substring (match-beginning 1)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
341 (match-end 1))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
342 ":"))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
343 (kill-buffer buf)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
344 path)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
345 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
346 ;; manual-entry -- The "main" user function
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
347 ;;
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
348
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
349 ;;;###autoload
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
350 (defun manual-entry (topic &optional arg silent)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
351 "Display the Unix manual entry (or entries) for TOPIC.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
352 If prefix arg is given, modify the search according to the value:
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
353 2 = complement default exact matching of the TOPIC name;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
354 exact matching default is specified by `Manual-match-topic-exactly'
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
355 3 = force a search of the unformatted man directories
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
356 4 = both 2 and 3
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
357 The manual entries are searched according to the variable
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
358 Manual-directory-list, which should be a list of directories. If
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
359 Manual-directory-list is nil, \\[Manual-directory-list-init] is
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
360 invoked to create this list from the MANPATH environment variable.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
361 See the variable Manual-topic-buffer which controls how the buffer
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
362 is named. See also the variables Manual-match-topic-exactly,
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
363 Manual-query-multiple-pages, and Manual-buffer-view-mode."
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
364 (interactive
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
365 (list (let* ((fmh "-A-Za-z0-9_.")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
366 (default (save-excursion
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
367 (buffer-substring
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
368 (progn
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
369 (re-search-backward "\\sw" nil t)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
370 (skip-chars-backward fmh) (point))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
371 (progn (skip-chars-forward fmh) (point)))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
372 (thing (read-string
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
373 (if (equal default "") "Manual entry: "
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
374 (concat "Manual entry: (default " default ") ")))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
375 (if (equal thing "") default thing))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
376 (prefix-numeric-value current-prefix-arg)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
377 ;;(interactive "sManual entry (topic): \np")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
378 (or arg (setq arg 1))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
379 (Manual-directory-list-init nil)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
380 (let ((exact (if (or (= arg 2) (= arg 4))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
381 (not Manual-match-topic-exactly)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
382 Manual-match-topic-exactly))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
383 (force (if (>= arg 3)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
384 t
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
385 nil))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
386 section fmtlist manlist apropos-mode)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
387 (let ((case-fold-search nil))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
388 (if (and (null section)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
389 (string-match
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
390 "\\`[ \t]*\\([^( \t]+\\)[ \t]*(\\(.+\\))[ \t]*\\'" topic))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
391 (setq section (substring topic (match-beginning 2)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
392 (match-end 2))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
393 topic (substring topic (match-beginning 1)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
394 (match-end 1)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
395 (if (string-match "\\`[ \t]*-k[ \t]+\\([^ \t]+\\)\\'" topic)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
396 (setq section "-k"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
397 topic (substring topic (match-beginning 1))))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
398 (if (equal section "-k")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
399 (setq apropos-mode t)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
400 (or silent
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
401 (message "Looking for formatted entry for %s%s..."
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
402 topic (if section (concat "(" section ")") "")))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
403 (setq fmtlist (Manual-select-man-pages
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
404 Manual-formatted-directory-list
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
405 topic section exact '()))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
406 (if (or force (not section) (null fmtlist))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
407 (progn
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
408 (or silent
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
409 (message "%sooking for unformatted entry for %s%s..."
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
410 (if fmtlist "L" "No formatted entry, l")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
411 topic (if section (concat "(" section ")") "")))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
412 (setq manlist (Manual-select-man-pages
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
413 Manual-unformatted-directory-list
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
414 topic section exact (if force '() fmtlist))))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
415
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
416 ;; Delete duplicate man pages (a file of the same name in multiple
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
417 ;; directories.)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
418 (or nil ;force
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
419 (let ((rest (append fmtlist manlist)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
420 (while rest
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
421 (let ((rest2 (cdr rest)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
422 (while rest2
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
423 (if (equal (file-name-nondirectory (car rest))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
424 (file-name-nondirectory (car rest2)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
425 (setq fmtlist (delq (car rest2) fmtlist)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
426 manlist (delq (car rest2) manlist)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
427 (setq rest2 (cdr rest2))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
428 (setq rest (cdr rest)))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
429
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
430 (if (not (or fmtlist manlist apropos-mode))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
431 (progn
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
432 (message "No entries found for %s%s" topic
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
433 (if section (concat "(" section ")") ""))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
434 nil)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
435 (let ((bufname (cond ((not Manual-topic-buffer)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
436 ;; What's the point of retaining this?
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
437 (if apropos-mode
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
438 "*Manual Apropos*"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
439 "*Manual Entry*"))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
440 (apropos-mode
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
441 (concat "*man apropos " topic "*"))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
442 (t
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
443 (concat "*man "
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
444 (cond (exact
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
445 (if section
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
446 (concat topic "." section)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
447 topic))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
448 ((or (cdr fmtlist) (cdr manlist)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
449 (and fmtlist manlist))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
450 ;; more than one entry found
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
451 (concat topic "..."))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
452 (t
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
453 (file-name-nondirectory
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
454 (car (or fmtlist manlist)))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
455 "*"))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
456 (temp-buffer-show-function
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
457 (cond ((eq 't Manual-buffer-view-mode) 'view-buffer)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
458 ((eq 'nil Manual-buffer-view-mode)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
459 temp-buffer-show-function)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
460 (t 'view-buffer-other-window))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
461
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
462 (if apropos-mode
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
463 (setq manlist (list (format "%s.%s" topic section))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
464
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
465 (cond
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
466 ((and Manual-topic-buffer (get-buffer bufname))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
467 ;; reselect an old man page buffer if it exists already.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
468 (save-excursion
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
469 (set-buffer (get-buffer bufname))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
470 (Manual-mode))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
471 (if temp-buffer-show-function
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
472 (funcall temp-buffer-show-function (get-buffer bufname))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
473 (display-buffer bufname)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
474 (t
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
475 (with-output-to-temp-buffer bufname
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
476 (buffer-disable-undo standard-output)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
477 (save-excursion
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
478 (set-buffer standard-output)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
479 (setq buffer-read-only nil)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
480 (erase-buffer)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
481 (Manual-insert-pages fmtlist manlist apropos-mode)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
482 (set-buffer-modified-p nil)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
483 (Manual-mode)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
484 ))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
485 (setq Manual-page-history
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
486 (cons (buffer-name)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
487 (delete (buffer-name) Manual-page-history)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
488 (message nil)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
489 t))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
490
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
491 (defun Manpage-apropos (topic &optional arg silent)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
492 "Apropos on Unix manual pages for TOPIC.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
493 It calls the function `manual-entry'. Look at this function for
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
494 further description. Look also at the variable `Manual-apropos-switch',
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
495 if this function doesn't work on your system."
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
496 (interactive
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
497 (list (let* ((fmh "-A-Za-z0-9_.")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
498 (default (save-excursion
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
499 (buffer-substring
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
500 (progn
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
501 (re-search-backward "\\sw" nil t)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
502 (skip-chars-backward fmh) (point))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
503 (progn (skip-chars-forward fmh) (point)))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
504 (thing (read-string
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
505 (if (equal default "") "Manual entry: "
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
506 (concat "Manual entry: (default " default ") ")))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
507 (if (equal thing "") default thing))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
508 (prefix-numeric-value current-prefix-arg)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
509 (manual-entry (concat Manual-apropos-switch " " topic) arg silent))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
510
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
511 (defun Manual-insert-pages (fmtlist manlist apropos-mode)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
512 (let ((sep (make-string 65 ?-))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
513 name start end topic section)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
514 (while fmtlist ; insert any formatted files
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
515 (setq name (car fmtlist))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
516 (goto-char (point-max))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
517 (setq start (point))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
518 ;; In case the file can't be read or uncompressed or
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
519 ;; something like that.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
520 (condition-case ()
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
521 (Manual-insert-man-file name)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
522 (file-error nil))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
523 (goto-char (point-max))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
524 (setq end (point))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
525 (save-excursion
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
526 (save-restriction
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
527 (message "Cleaning manual entry for %s..."
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
528 (file-name-nondirectory name))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
529 (narrow-to-region start end)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
530 (Manual-nuke-nroff-bs)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
531 (goto-char (point-min))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
532 (insert "File: " name "\n")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
533 (goto-char (point-max))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
534 ))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
535 (if (or (cdr fmtlist) manlist)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
536 (insert "\n\n" sep "\n"))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
537 (setq fmtlist (cdr fmtlist)))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
538
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
539 (while manlist ; process any unformatted files
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
540 (setq name (car manlist))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
541 (or (string-match "\\([^/]+\\)\\.\\([^./]+\\)\\(\\.gz\\'\\)" name)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
542 (string-match "\\([^/]+\\)\\.\\([^./]+\\)\\'" name))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
543 (setq topic (substring name (match-beginning 1) (match-end 1)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
544 (setq section (substring name (match-beginning 2) (match-end 2)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
545 ;; This won't work under IRIX, because SGI man accepts only the
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
546 ;; "main" (one-character) section id, not full section ids
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
547 ;; like 1M, 3X, etc. Put (setq Manual-use-full-section-ids nil)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
548 ;; in your .emacs to work around this problem.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
549 (if (not (or Manual-use-full-section-ids (string-equal section "")))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
550 (setq section (substring section 0 1)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
551 (message "Invoking man %s%s %s..."
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
552 (if Manual-section-switch
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
553 (concat Manual-section-switch " ")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
554 "")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
555 section topic)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
556 (setq start (point))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
557 (Manual-run-formatter name topic section)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
558 (setq end (point))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
559 (save-excursion
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
560 (save-restriction
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
561 (message "Cleaning manual entry for %s(%s)..." topic section)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
562 (narrow-to-region start end)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
563 (Manual-nuke-nroff-bs apropos-mode)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
564 (goto-char (point-min))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
565 (insert "File: " name "\n")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
566 (goto-char (point-max))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
567 ))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
568 (if (cdr manlist)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
569 (insert "\n\n" sep "\n"))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
570 (setq manlist (cdr manlist))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
571 (if (< (buffer-size) 200)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
572 (progn
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
573 (goto-char (point-min))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
574 (if (looking-at "^File: ")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
575 (forward-line 1))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
576 (error (buffer-substring (point) (progn (end-of-line) (point))))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
577 nil)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
578
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
579
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
580 (defun Manual-run-formatter (name topic section)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
581 (cond ((string-match "roff\\'" Manual-program)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
582 ;; kludge kludge
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
583 (call-process Manual-program nil t nil "-Tman" "-man" name))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
584 (Manual-section-switch
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
585 (call-process Manual-program nil t nil Manual-section-switch
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
586 section topic))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
587 (t
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
588 (call-process Manual-program nil t nil section topic))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
589
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
590
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
591 (defvar Manual-mode-map
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
592 (let ((m (make-sparse-keymap)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
593 (set-keymap-name m 'Manual-mode-map)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
594 (define-key m "l" 'Manual-last-page)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
595 (define-key m 'button2 'Manual-follow-xref)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
596 (define-key m 'button3 'Manual-popup-menu)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
597 m))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
598
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
599 (defun Manual-mode ()
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
600 (kill-all-local-variables)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
601 (setq buffer-read-only t)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
602 (use-local-map Manual-mode-map)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
603 (setq major-mode 'Manual-mode
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
604 mode-name "Manual")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
605 ;; man pages with long lines are buggy!
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
606 ;; This looks slightly better if they only
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
607 ;; overran by a couple of chars.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
608 (setq truncate-lines t)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
609 ;; turn off horizontal scrollbars in this buffer
16
0293115a14e9 Import from CVS: tag r19-15b91
cvs
parents: 10
diff changeset
610 (when (featurep 'scrollbar)
0293115a14e9 Import from CVS: tag r19-15b91
cvs
parents: 10
diff changeset
611 (set-specifier scrollbar-height (cons (current-buffer) 0)))
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
612 (run-hooks 'Manual-mode-hook))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
613
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
614 (defun Manual-last-page ()
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
615 (interactive)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
616 (while (or (not (get-buffer (car (or Manual-page-history
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
617 (error "No more history.")))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
618 (eq (get-buffer (car Manual-page-history)) (current-buffer)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
619 (setq Manual-page-history (cdr Manual-page-history)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
620 (switch-to-buffer (car Manual-page-history)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
621
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
622
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
623 ;; Manual-select-subdirectories
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
624 ;; Given a DIRLIST and a SUBDIR name, return all subdirectories of the former which
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
625 ;; match the latter.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
626
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
627 (defun Manual-select-subdirectories (dirlist subdir)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
628 (let ((dirs '())
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
629 (case-fold-search nil)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
630 (match (concat "\\`" (regexp-quote subdir)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
631 d)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
632 (while dirlist
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
633 (setq d (car dirlist) dirlist (cdr dirlist))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
634 (if (file-directory-p d)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
635 (let ((files (directory-files d t match nil 'dirs-only))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
636 (dir-temp '()))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
637 (while files
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
638 (if (file-executable-p (car files))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
639 (setq dir-temp (cons (file-name-as-directory (car files))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
640 dir-temp)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
641 (setq files (cdr files)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
642 (and dir-temp
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
643 (setq dirs (append dirs (nreverse dir-temp)))))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
644 dirs))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
645
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
646
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
647 ;; Manual-filter-subdirectories
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
648 ;; Given a DIRLIST and a SUBDIR name, return all members of the former
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
649 ;; which match the latter.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
650
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
651 (defun Manual-filter-subdirectories (dirlist subdir)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
652 (let ((match (concat
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
653 "/"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
654 (regexp-quote subdir)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
655 "[" Manual-man-page-section-ids "]"))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
656 slist dir)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
657 (while dirlist
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
658 (setq dir (car dirlist) dirlist (cdr dirlist))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
659 (if (and (file-executable-p dir) (string-match match dir))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
660 (setq slist (cons dir slist))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
661 (nreverse slist)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
662
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
663
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
664 (defun Manual-all-subdirectories (dirlist leaf-signature dirs &optional silent) "\
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
665 Given a DIRLIST, return a backward-sorted list of all subdirectories
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
666 thereof, prepended to DIRS if non-nil. This function calls itself
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
667 recursively until subdirectories matching LEAF-SIGNATURE are reached,
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
668 or the hierarchy has been thoroughly searched. This code is a modified
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
669 version of a function written by Tim Bradshaw (tfb@ed.ac.uk)."
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
670 (Manual-all-subdirectories-noloop dirlist leaf-signature dirs nil silent))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
671
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
672 (defun Manual-all-subdirectories-noloop (dirlist leaf-signature dirs been &optional silent) "\
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
673 Does the job of manual-all-subdirectories and keeps track of where it
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
674 has been to avoid loops."
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
675 (let (dir)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
676 (while dirlist
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
677 (setq dir (car dirlist) dirlist (cdr dirlist))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
678 (if (file-directory-p dir)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
679 (let ((dir-temp (cons (file-name-as-directory dir) dirs)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
680 ;; Without feedback the user might wonder about the delay!
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
681 (or silent (message
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
682 "Building list of search directories... %s"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
683 (car dir-temp)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
684 (if (member (file-truename dir) been)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
685 () ; Ignore. We have been here before
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
686 (setq been (cons (file-truename dir) been))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
687 (setq dirs
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
688 (if (string-match leaf-signature dir)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
689 dir-temp
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
690 (Manual-all-subdirectories-noloop
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
691 (directory-files dir t "[^.]$" nil 'dirs-only)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
692 leaf-signature dir-temp been silent))))))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
693 dirs)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
694
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
695
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
696 (defvar Manual-bogus-file-pattern "\\.\\(lpr\\|ps\\|PS\\)\\'"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
697 "Some systems have files in the man/man*/ directories which aren't man pages.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
698 This pattern is used to prune those files.")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
699
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
700 ;; Manual-select-man-pages
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
701 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
702 ;; Given a DIRLIST, discover all filenames which complete given the TOPIC
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
703 ;; and SECTION.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
704
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
705 ;; ## Note: BSD man looks for .../man1/foo.1 and .../man1/$MACHINE/foo.1
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
706
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
707 ;; ## Fixed for SGI IRIX 5.x on Sat Jul 15 1995 by Dale Atems
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
708 ;; (atems@physics.wayne.edu).
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
709
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
710 (defun Manual-select-man-pages (dirlist topic section exact shadow)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
711 (let ((case-fold-search nil))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
712 (and section
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
713 (let ((l '())
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
714 ;;(match (concat (substring section 0 1) "/?\\'"))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
715 ;; ^^^
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
716 ;; We'll lose any pages inside subdirectories of the "standard"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
717 ;; ones if we insist on this! The following regexp should
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
718 ;; match any directory ending with the full section id or
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
719 ;; its first character, or any direct subdirectory thereof:
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
720 (match (concat "\\("
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
721 (regexp-quote section)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
722 "\\|"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
723 (substring section 0 1)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
724 "\\)/?"))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
725 d)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
726 (while dirlist
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
727 (setq d (car dirlist) dirlist (cdr dirlist))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
728 (if (string-match match d)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
729 (setq l (cons d l))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
730 (setq dirlist l)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
731 (if shadow
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
732 (setq shadow (concat "/\\("
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
733 (mapconcat #'(lambda (n)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
734 (regexp-quote
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
735 (file-name-nondirectory n)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
736 shadow
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
737 "\\|")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
738 "\\)\\'")))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
739 (let ((manlist '())
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
740 (match (concat "\\`"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
741 (regexp-quote topic)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
742 ;; **Note: on IRIX the preformatted pages
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
743 ;; are packed, so they end with ".z". This
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
744 ;; way you miss them if you specify a
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
745 ;; section. I don't see any point to it here
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
746 ;; even on BSD systems since we're looking
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
747 ;; one level down already, but I can't test
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
748 ;; this. More thought needed (???)
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
749
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
750 (cond ((and section
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
751 (not Manual-use-subdirectory-list))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
752 (concat "\\." (regexp-quote section)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
753 (exact
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
754 ;; If Manual-match-topic-exactly is
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
755 ;; set, then we must make sure the
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
756 ;; completions are exact, except for
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
757 ;; trailing weird characters after
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
758 ;; the section.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
759 "\\.")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
760 (t
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
761 ""))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
762 dir)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
763 (while dirlist
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
764 (setq dir (car dirlist) dirlist (cdr dirlist))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
765 (if (not (file-directory-p dir))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
766 (progn
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
767 (message "warning: %s is not a directory" dir)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
768 ;;(sit-for 1)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
769 )
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
770 (let ((files (directory-files dir t match nil t))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
771 f)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
772 (while files
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
773 (setq f (car files) files (cdr files))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
774 (cond ((string-match Manual-bogus-file-pattern f)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
775 ;(message "Bogus fule %s" f) (sit-for 2)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
776 )
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
777 ((and shadow (string-match shadow f))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
778 ;(message "Shadowed %s" f) (sit-for 2)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
779 )
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
780 ((not (file-readable-p f))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
781 ;(message "Losing with %s" f) (sit-for 2)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
782 )
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
783 (t
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
784 (setq manlist (cons f manlist))))))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
785 (setq manlist (nreverse manlist))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
786 (and Manual-unique-man-sections-only
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
787 (setq manlist (Manual-clean-to-unique-pages-only manlist)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
788 (if (and manlist Manual-query-multiple-pages)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
789 (apply #'append
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
790 (mapcar #'(lambda (page)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
791 (and page
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
792 (y-or-n-p (format "Read %s? " page))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
793 (list page)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
794 manlist))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
795 manlist))))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
796
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
797 (defun Manual-clean-to-unique-pages-only (manlist)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
798 "Prune the current list of pages down to a unique set."
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
799 (let (page-name unique-pages)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
800 (apply 'append
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
801 (mapcar '(lambda (page)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
802 (cond (page
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
803 (and (string-match ".*/\\(.*\\)" page)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
804 (setq page-name (substring page (match-beginning 1)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
805 (match-end 1)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
806 ;; try to clip off .Z, .gz suffixes
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
807 (and (string-match "\\(.*\\)\\.\\(.+\\)\\.\\(.+\\)"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
808 page-name)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
809 (setq page-name
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
810 (substring page-name (match-beginning 1)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
811 (match-end 2)))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
812 ;; add Manual-unique-pages if it isn't there
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
813 ;; and return file
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
814 (if (and unique-pages
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
815 page-name
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
816 (string-match (concat "\\b" page-name "\\b")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
817 unique-pages))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
818 nil
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
819 (setq unique-pages (concat unique-pages
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
820 page-name
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
821 " "))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
822 (list page)))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
823 manlist))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
824
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
825
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
826
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
827 (defun Manual-insert-man-file (name)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
828 ;; Insert manual file (unpacked as necessary) into buffer
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
829 (cond ((equal (substring name -3) ".gz")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
830 (call-process "gunzip" nil t nil "--stdout" name))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
831 ((or (equal (substring name -2) ".Z")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
832 ;; HPUX uses directory names that end in .Z and compressed
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
833 ;; files that don't. How gratuitously random.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
834 (let ((case-fold-search nil))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
835 (string-match "\\.Z/" name)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
836 (call-process "zcat" name t nil)) ;; XEmacs change for HPUX
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
837 ((equal (substring name -2) ".z")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
838 (call-process "pcat" nil t nil name))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
839 (t
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
840 (insert-file-contents name))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
841
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
842 (defmacro Manual-delete-char (n)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
843 ;; in v19, delete-char is compiled as a function call, but delete-region
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
844 ;; is byte-coded, so it's much faster. (We were spending 40% of our time
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
845 ;; in delete-char alone.)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
846 (list 'delete-region '(point) (list '+ '(point) n)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
847
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
848 ;; Hint: BS stands form more things than "back space"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
849 (defun Manual-nuke-nroff-bs (&optional apropos-mode)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
850 (interactive "*")
10
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
851 (if Manual-use-rosetta-man
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
852 (call-process-region (point-min) (point-max) "rman" t t nil)
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
853 ;;
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
854 ;; turn underlining into italics
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
855 ;;
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
856 (goto-char (point-min))
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
857 (while (search-forward "_\b" nil t)
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
858 ;; searching for underscore-backspace and then comparing the following
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
859 ;; chars until the sequence ends turns out to be much faster than searching
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
860 ;; for a regexp which matches the whole sequence.
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
861 (let ((s (match-beginning 0)))
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
862 (goto-char s)
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
863 (while (and (= (following-char) ?_)
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
864 (= (char-after (1+ (point))) ?\b))
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
865 (Manual-delete-char 2)
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
866 (forward-char 1))
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
867 (set-extent-face (make-extent s (point)) 'man-italic)))
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
868 ;;
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
869 ;; turn overstriking into bold
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
870 ;;
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
871 (goto-char (point-min))
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
872 (while (re-search-forward "\\([^\n]\\)\\(\b\\1\\)" nil t)
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
873 ;; Surprisingly, searching for the above regexp is faster than searching
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
874 ;; for a backspace and then comparing the preceding and following chars,
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
875 ;; I presume because there are many false matches, meaning more funcalls
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
876 ;; to re-search-forward.
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
877 (let ((s (match-beginning 0)))
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
878 (goto-char s)
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
879 ;; Some systems (SGI) overstrike multiple times, eg, "M\bM\bM\bM".
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
880 (while (looking-at "\\([^\n]\\)\\(\b\\1\\)+")
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
881 (delete-region (+ (point) 1) (match-end 0))
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
882 (forward-char 1))
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
883 (set-extent-face (make-extent s (point)) 'man-bold)))
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
884 ;;
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
885 ;; hack bullets: o^H+ --> +
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
886 (goto-char (point-min))
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
887 (while (search-forward "\b" nil t)
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
888 (Manual-delete-char -2))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
889
10
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
890 (if (> (buffer-size) 100) ; minor kludge
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
891 (Manual-nuke-nroff-bs-footers))
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
892 ) ;; not Manual-use-rosetta-man
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
893 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
894 ;; turn subsection header lines into bold
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
895 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
896 (goto-char (point-min))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
897 (if apropos-mode
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
898 (while (re-search-forward "[a-zA-Z0-9] ([0-9]" nil t)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
899 (forward-char -2)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
900 (delete-backward-char 1))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
901
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
902 ;; (while (re-search-forward "^[^ \t\n]" nil t)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
903 ;; (set-extent-face (make-extent (match-beginning 0)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
904 ;; (progn (end-of-line) (point)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
905 ;; 'man-heading))
4
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents: 2
diff changeset
906
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
907 ;; boldface the first line
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
908 (if (looking-at "[^ \t\n].*$")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
909 (set-extent-face (make-extent (match-beginning 0) (match-end 0))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
910 'man-bold))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
911
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
912 ;; boldface subsequent title lines
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
913 ;; Regexp to match section headers changed to match a non-indented
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
914 ;; line preceded by a blank line and followed by an indented line.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
915 ;; This seems to work ok for manual pages but gives better results
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
916 ;; with other nroff'd files
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
917 (while (re-search-forward "\n\n\\([^ \t\n].*\\)\n[ \t]+[^ \t\n]" nil t)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
918 (goto-char (match-end 1))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
919 (set-extent-face (make-extent (match-beginning 1) (match-end 1))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
920 'man-heading)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
921 (forward-line 1))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
922 )
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
923
10
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
924 (if Manual-use-rosetta-man
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
925 nil
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
926 ;; Zap ESC7, ESC8, and ESC9
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
927 ;; This is for Sun man pages like "man 1 csh"
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
928 (goto-char (point-min))
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
929 (while (re-search-forward "\e[789]" nil t)
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
930 (replace-match "")))
49a24b4fd526 Import from CVS: tag r19-15b6
cvs
parents: 8
diff changeset
931
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
932 ;; Nuke blanks lines at start.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
933 ;; (goto-char (point-min))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
934 ;; (skip-chars-forward "\n")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
935 ;; (delete-region (point-min) (point))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
936
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
937 (Manual-mouseify-xrefs)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
938 )
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
939
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
940 (fset 'nuke-nroff-bs 'Manual-nuke-nroff-bs) ; use old name
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
941
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
942
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
943 (defun Manual-nuke-nroff-bs-footers ()
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
944 ;; Nuke headers and footers.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
945 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
946 ;; nroff assumes pages are 66 lines high. We assume that, and that the
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
947 ;; first and last line on each page is expendible. There is no way to
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
948 ;; tell the difference between a page break in the middle of a paragraph
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
949 ;; and a page break between paragraphs (the amount of extra whitespace
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
950 ;; that nroff inserts is the same in both cases) so this might strip out
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
951 ;; a blank line were one should remain. I think that's better than
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
952 ;; leaving in a blank line where there shouldn't be one. (Need I say
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
953 ;; it: FMH.)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
954 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
955 ;; Note that if nroff spits out error messages, pages will be more than
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
956 ;; 66 lines high, and we'll lose badly. That's ok because standard
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
957 ;; nroff doesn't do any diagnostics, and the "gnroff" wrapper for groff
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
958 ;; turns off error messages for compatibility. (At least, it's supposed
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
959 ;; to.)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
960 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
961 (goto-char (point-min))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
962 ;; first lose the status output
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
963 (let ((case-fold-search t))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
964 (if (and (not (looking-at "[^\n]*warning"))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
965 (looking-at "Reformatting.*\n"))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
966 (delete-region (match-beginning 0) (match-end 0))))
4
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents: 2
diff changeset
967
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
968 ;; kludge around a groff bug where it won't keep quiet about some
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
969 ;; warnings even with -Wall or -Ww.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
970 (cond ((looking-at "grotty:")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
971 (while (looking-at "grotty:")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
972 (delete-region (point) (progn (forward-line 1) (point))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
973 (if (looking-at " *done\n")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
974 (delete-region (point) (match-end 0)))))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
975
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
976 (let ((pages '())
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
977 p)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
978 ;; collect the page boundary markers before we start deleting, to make
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
979 ;; it easier to strip things out without changing the page sizes.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
980 (while (not (eobp))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
981 (forward-line 66)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
982 (setq pages (cons (point-marker) pages)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
983 (setq pages (nreverse pages))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
984 (while pages
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
985 (goto-char (car pages))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
986 (set-marker (car pages) nil)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
987 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
988 ;; The lines are: 3 blank; footer; 6 blank; header; 3 blank.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
989 ;; We're in between the previous footer and the following header,
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
990 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
991 ;; First lose 3 blank lines, the header, and then 3 more.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
992 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
993 (setq p (point))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
994 (skip-chars-forward "\n")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
995 (delete-region p (point))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
996 (and (looking-at "[^\n]+\n\n?\n?\n?")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
997 (delete-region (match-beginning 0) (match-end 0)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
998 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
999 ;; Next lose the footer, and the 3 blank lines after, and before it.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1000 ;; But don't lose the last footer of the manual entry; that contains
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1001 ;; the "last change" date, so it's not completely uninteresting.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1002 ;; (Actually lose all blank lines before it; sh(1) needs this.)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1003 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1004 (skip-chars-backward "\n")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1005 (beginning-of-line)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1006 (if (null (cdr pages))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1007 nil
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1008 (and (looking-at "[^\n]+\n\n?\n?\n?")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1009 (delete-region (match-beginning 0) (match-end 0))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1010 (setq p (point))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1011 (skip-chars-backward "\n")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1012 (if (> (- p (point)) 4)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1013 (delete-region (+ 2 (point)) p)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1014 (delete-region (1+ (point)) p))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1015 ; (and (looking-at "\n\n?\n?")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1016 ; (delete-region (match-beginning 0) (match-end 0)))
4
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents: 2
diff changeset
1017
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1018 (setq pages (cdr pages)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1019 ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1020 ;; Now nuke the extra blank lines at the beginning and end.
4
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents: 2
diff changeset
1021 (goto-char (point-min))
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1022 (if (looking-at "\n+")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1023 (delete-region (match-beginning 0) (match-end 0)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1024 (forward-line 1)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1025 (if (looking-at "\n\n+")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1026 (delete-region (1+ (match-beginning 0)) (match-end 0)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1027 (goto-char (point-max))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1028 (skip-chars-backward "\n")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1029 (delete-region (point) (point-max))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1030 (beginning-of-line)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1031 (forward-char -1)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1032 (setq p (point))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1033 (skip-chars-backward "\n")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1034 (if (= ?\n (following-char)) (forward-char 1))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1035 (if (> (point) (1+ p))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1036 (delete-region (point) p))
4
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents: 2
diff changeset
1037 ))
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents: 2
diff changeset
1038
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1039 ;(defun Manual-nuke-nroff-bs-footers ()
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1040 ; ;; Nuke headers: "MORE(1) UNIX Programmer's Manual MORE(1)"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1041 ; (goto-char (point-min))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1042 ; (while (re-search-forward "^ *\\([A-Za-z][-_A-Za-z0-9]*([0-9A-Za-z]+)\\).*\\1$" nil t)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1043 ; (replace-match ""))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1044 ;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1045 ; ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1046 ; ;; it would appear that we have a choice between sometimes introducing
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1047 ; ;; an extra blank line when a paragraph was broken by a footer, and
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1048 ; ;; sometimes not putting in a blank line between two paragraphs when
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1049 ; ;; a footer appeared right between them. FMH; I choose the latter.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1050 ; ;;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1051 ;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1052 ; ;; Nuke footers: "Printed 12/3/85 27 April 1981 1"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1053 ; ;; Sun appear to be on drugz:
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1054 ; ;; "Sun Release 3.0B Last change: 1 February 1985 1"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1055 ; ;; HP are even worse!
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1056 ; ;; " Hewlett-Packard -1- (printed 12/31/99)" FMHWA12ID!!
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1057 ; ;; System V (well WICATs anyway):
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1058 ; ;; "Page 1 (printed 7/24/85)"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1059 ; ;; Who is administering PCP to these corporate bozos?
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1060 ; (goto-char (point-min))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1061 ; (while (re-search-forward
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1062 ; (cond
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1063 ; ((eq system-type 'hpux)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1064 ; "\n\n?[ \t]*Hewlett-Packard\\(\\| Company\\)[ \t]*- [0-9]* -.*\n")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1065 ; ((eq system-type 'dgux-unix)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1066 ; "\n\n?[ \t]*Licensed material--.*Page [0-9]*\n")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1067 ; ((eq system-type 'usg-unix-v)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1068 ; "\n\n? *Page [0-9]*.*(printed [0-9/]*)\n")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1069 ; (t
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1070 ; "\n\n?\\(Printed\\|Sun Release\\) [0-9].*[0-9]\n"))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1071 ; nil t)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1072 ; (replace-match ""))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1073 ;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1074 ; ;; Also, hack X footers:
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1075 ; ;; "X Version 11 Last change: Release 5 1"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1076 ; (goto-char (point-min))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1077 ; (while (re-search-forward "\n\n?X Version [^\n]+\n" nil t)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1078 ; (replace-match ""))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1079 ;
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1080 ; ;; Crunch blank lines
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1081 ; (goto-char (point-min))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1082 ; (while (re-search-forward "\n\n\n\n*" nil t)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1083 ; (replace-match "\n\n"))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1084 ; )
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1085
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1086 (defun Manual-mouseify-xrefs ()
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1087 (goto-char (point-min))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1088 (forward-line 1)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1089 (let ((case-fold-search nil)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1090 s e name extent)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1091 ;; possibly it would be faster to rewrite this expression to search for
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1092 ;; a less common sequence first (like "([0-9]") and then back up to see
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1093 ;; if it's really a match. This function is 15% of the total time, 13%
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1094 ;; of which is this call to re-search-forward.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1095 (while (re-search-forward "[a-zA-Z_][-a-zA-Z0-9_.]*([0-9][a-zA-Z0-9]*)"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1096 nil t)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1097 (setq s (match-beginning 0)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1098 e (match-end 0)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1099 name (buffer-substring s e))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1100 (goto-char s)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1101 (skip-chars-backward " \t")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1102 (if (and (bolp)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1103 (progn (backward-char 1) (= (preceding-char) ?-)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1104 (progn
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1105 (setq s (point))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1106 (skip-chars-backward "-a-zA-Z0-9_.")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1107 (setq name (concat (buffer-substring (point) (1- s)) name))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1108 (setq s (point))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1109 ;; if there are upper case letters in the section, downcase them.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1110 (if (string-match "(.*[A-Z]+.*)$" name)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1111 (setq name (concat (substring name 0 (match-beginning 0))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1112 (downcase (substring name (match-beginning 0))))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1113 ;; (setq already-fontified (extent-at s))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1114 (setq extent (make-extent s e))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1115 (set-extent-property extent 'man (list 'Manual-follow-xref name))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1116 (set-extent-property extent 'highlight t)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1117 ;; (if (not already-fontified)...
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1118 (set-extent-face extent 'man-xref)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1119 (goto-char e))))
4
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents: 2
diff changeset
1120
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1121 (defun Manual-follow-xref (&optional name-or-event)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1122 "Invoke `manual-entry' on the cross-reference under the mouse.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1123 When invoked noninteractively, the arg may be an xref string to parse instead."
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1124 (interactive "e")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1125 (if (eventp name-or-event)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1126 (let* ((p (event-point name-or-event))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1127 (extent (and p (extent-at p
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1128 (event-buffer name-or-event)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1129 'highlight)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1130 (data (and extent (extent-property extent 'man))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1131 (if (eq (car-safe data) 'Manual-follow-xref)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1132 (eval data)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1133 (error "no manual cross-reference there.")))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1134 (let ((Manual-match-topic-exactly t)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1135 (Manual-query-multiple-pages nil))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1136 (or (manual-entry name-or-event)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1137 ;; If that didn't work, maybe it's in a different section than the
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1138 ;; man page writer expected. For example, man pages tend assume
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1139 ;; that all user programs are in section 1, but X tends to generate
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1140 ;; makefiles that put things in section "n" instead...
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1141 (and (string-match "[ \t]*([^)]+)\\'" name-or-event)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1142 (progn
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1143 (message "No entries found for %s; checking other sections..."
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1144 name-or-event)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1145 (manual-entry
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1146 (substring name-or-event 0 (match-beginning 0))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1147 nil t)))))))
4
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents: 2
diff changeset
1148
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1149 (defun Manual-popup-menu (&optional event)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1150 "Pops up a menu of cross-references in this manual page.
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1151 If there is a cross-reference under the mouse button which invoked this
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1152 command, it will be the first item on the menu. Otherwise, they are
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1153 on the menu in the order in which they appear in the buffer."
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1154 (interactive "e")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1155 (let ((buffer (current-buffer))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1156 (sep "---")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1157 (prefix "Show Manual Page for ")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1158 xref items)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1159 (cond (event
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1160 (setq buffer (event-buffer event))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1161 (let* ((p (event-point event))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1162 (extent (and p (extent-at p buffer 'highlight)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1163 (data (and extent (extent-property extent 'man))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1164 (if (eq (car-safe data) 'Manual-follow-xref)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1165 (setq xref (nth 1 data))))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1166 (if xref (setq items (list sep xref)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1167 (map-extents #'(lambda (extent ignore)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1168 (let ((data (extent-property extent 'man)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1169 (if (and (eq (car-safe data) 'Manual-follow-xref)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1170 (not (member (nth 1 data) items)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1171 (setq items (cons (nth 1 data) items)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1172 nil))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1173 buffer)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1174 (if (eq sep (car items)) (setq items (cdr items)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1175 (let ((popup-menu-titles nil))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1176 (popup-menu
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1177 (cons "Manual Entry"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1178 (mapcar #'(lambda (item)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1179 (if (eq item sep)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1180 item
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1181 (vector (concat prefix item)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1182 (list 'Manual-follow-xref item) t)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1183 (nreverse items)))))))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1184
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1185 (defun pager-cleanup-hook ()
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1186 "cleanup man page if called via $PAGER"
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1187 (let ((buf-name (or buffer-file-name (buffer-name))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1188 (if (and (or (string-match "^/tmp/man[0-9]+" buf-name)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1189 (string-match ".*/man/\\(man\\|cat\\)[1-9a-z]/" buf-name))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1190 (not (string-match Manual-bogus-file-pattern buf-name)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1191 (let (buffer manpage)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1192 (require 'man)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1193 (goto-char (point-min))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1194 (setq buffer-read-only nil)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1195 (Manual-nuke-nroff-bs)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1196 (goto-char (point-min))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1197 (if (re-search-forward "[^ \t]")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1198 (goto-char (- (point) 1)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1199 (if (looking-at "\\([a-zA-Z0-9]+\\)[ \t]*(")
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1200 (setq manpage (buffer-substring (match-beginning 1) (match-end 1)))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1201 (setq manpage "???"))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1202 (setq buffer
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1203 (rename-buffer
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1204 (generate-new-buffer-name (concat "*man " manpage "*"))))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1205 (setq buffer-file-name nil)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1206 (goto-char (point-min))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1207 (insert (format "%s\n" buf-name))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1208 (goto-char (point-min))
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1209 (buffer-disable-undo buffer)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1210 (set-buffer-modified-p nil)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1211 (Manual-mode)
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1212 ))))
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1213
8
4b173ad71786 Import from CVS: tag r19-15b5
cvs
parents: 4
diff changeset
1214 (add-hook 'server-visit-hook 'pager-cleanup-hook)
4
b82b59fe008d Import from CVS: tag r19-15b3
cvs
parents: 2
diff changeset
1215 (provide 'man)