annotate lisp/help.el @ 3736:01830ac74073

[xemacs-hg @ 2006-12-11 12:22:47 by aidan] 2006-12-08 Aidan Kehoe <kehoea@parhasard.net> * specifier.c (charset_matches_specifier_tag_set_p): A charset's entry in Vcharset_tag_lists may be nil, if, when that charset was created, no tags with associated charset predicates existed. Accept this possibility, treat it as the tag not matching that charset.
author aidan
date Mon, 11 Dec 2006 12:22:52 +0000
parents 959746c534f6
children b4f4e0cc90f1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3368
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1 ;; help.el --- help commands for XEmacs.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 ;; Copyright (C) 1985, 1986, 1992-4, 1997 Free Software Foundation, Inc.
2537
b7b90f750a78 [xemacs-hg @ 2005-01-31 20:08:32 by ben]
ben
parents: 2275
diff changeset
4 ;; Copyright (C) 2001, 2002, 2003 Ben Wing.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 ;; Maintainer: FSF
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 ;; Keywords: help, internal, dumped
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 ;; This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 ;; XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 ;; under the terms of the GNU General Public License as published by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 ;; any later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 ;; XEmacs is distributed in the hope that it will be useful, but
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 ;; WITHOUT ANY WARRANTY; without even the implied warranty of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 ;; General Public License for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 ;; along with XEmacs; see the file COPYING. If not, write to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 ;; Free Software Foundation, 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 ;; Boston, MA 02111-1307, USA.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 ;;; Synched up with: FSF 19.30.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 ;;; Commentary:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 ;; This file is dumped with XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 ;; This code implements XEmacs's on-line help system, the one invoked by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 ;;`M-x help-for-help'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 ;; 06/11/1997 -- Converted to use char-after instead of broken
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 ;; following-char. -slb
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 ;;; Code:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 ;; Get the macro make-help-screen when this is compiled,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 ;; or run interpreted, but not when the compiled code is loaded.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 (eval-when-compile (require 'help-macro))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43
3368
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
44 (require 'loadhist) ;; For symbol-file.
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
45
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 (defgroup help nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 "Support for on-line help systems."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 :group 'emacs)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 (defgroup help-appearance nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 "Appearance of help buffers."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 :group 'help)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 (defvar help-map (let ((map (make-sparse-keymap)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 (set-keymap-name map 'help-map)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 (set-keymap-prompt
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
57 map (gettext "(Type ? for further options)"))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 map)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 "Keymap for characters following the Help key.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 ;; global-map definitions moved to keydefs.el
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 (fset 'help-command help-map)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 (define-key help-map (vector help-char) 'help-for-help)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 (define-key help-map "?" 'help-for-help)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 (define-key help-map 'help 'help-for-help)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 (define-key help-map '(f1) 'help-for-help)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 (define-key help-map "a" 'hyper-apropos) ; 'command-apropos in FSFmacs
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
70 (define-key help-map "A" 'command-hyper-apropos)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
71 ;; #### should be hyper-apropos-documentation, once that's written.
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
72 (define-key help-map "\C-a" 'apropos-documentation)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 (define-key help-map "b" 'describe-bindings)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 (define-key help-map "B" 'describe-beta)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
77 (define-key help-map "c" 'describe-key-briefly)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 (define-key help-map "C" 'customize)
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
79 ;; FSFmacs has Info-goto-emacs-command-node on C-f, no binding
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
80 ;; for Info-elisp-ref
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
81 (define-key help-map "\C-c" 'Info-goto-emacs-command-node)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 (define-key help-map "d" 'describe-function)
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
84 (define-key help-map "\C-d" 'describe-distribution)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
85
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
86 (define-key help-map "e" (if (fboundp 'view-last-error) 'view-last-error
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
87 'describe-last-error))
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
88
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 (define-key help-map "f" 'describe-function)
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
90 ;; #### not a good interface. no way to specify that C-h is preferred
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
91 ;; as a prefix and not BS. should instead be specified as part of
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
92 ;; `define-key'.
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
93 ;; (put 'describe-function 'preferred-key-sequence "\C-hf")
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 (define-key help-map "F" 'xemacs-local-faq)
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
95 (define-key help-map "\C-f" 'Info-elisp-ref)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 (define-key help-map "i" 'info)
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
98 (define-key help-map "I" 'Info-search-index-in-xemacs-and-lispref)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
99 (define-key help-map "\C-i" 'Info-query)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
100
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
101 (define-key help-map "k" 'describe-key)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
102 (define-key help-map "\C-k" 'Info-goto-emacs-key-command-node)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 (define-key help-map "l" 'view-lossage)
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
105 (define-key help-map "\C-l" 'describe-copying) ; on \C-c in FSFmacs
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 (define-key help-map "m" 'describe-mode)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
109 (define-key help-map "n" 'view-emacs-news)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 (define-key help-map "\C-n" 'view-emacs-news)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 (define-key help-map "p" 'finder-by-keyword)
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
113 (define-key help-map "\C-p" 'describe-pointer)
3074
0f411920c8db [xemacs-hg @ 2005-11-16 12:12:57 by malcolmp]
malcolmp
parents: 3065
diff changeset
114 (define-key help-map "P" 'view-xemacs-problems)
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
115
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
116 (define-key help-map "q" 'help-quit)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 ;; Do this right with an autoload cookie in finder.el.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 ;;(autoload 'finder-by-keyword "finder"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 ;; "Find packages matching a given keyword." t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 (define-key help-map "s" 'describe-syntax)
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
123 (define-key help-map "S" 'view-sample-init-el)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 (define-key help-map "t" 'help-with-tutorial)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 (define-key help-map "v" 'describe-variable)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
129 (define-key help-map "w" 'where-is)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
130 (define-key help-map "\C-w" 'describe-no-warranty)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
132 ;; #### It would be nice if the code below to add hyperlinks was
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
133 ;; generalized. We would probably need a "hyperlink mode" from which
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
134 ;; help-mode is derived. This means we probably need multiple
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
135 ;; inheritance of modes! Thankfully this is not hard to implement; we
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
136 ;; already have the ability for a keymap to have multiple parents.
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
137 ;; However, we'd have to define any multiply-inherited-from modes using
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
138 ;; a standard `define-mode' construction instead of manually doing it,
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
139 ;; because we don't want each guy calling `kill-all-local-variables' and
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
140 ;; messing up the previous one.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142 (define-derived-mode help-mode view-major-mode "Help"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 "Major mode for viewing help text.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 Entry to this mode runs the normal hook `help-mode-hook'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 Commands:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146 \\{help-mode-map}"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 (define-key help-mode-map "q" 'help-mode-quit)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 (define-key help-mode-map "Q" 'help-mode-bury)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 (define-key help-mode-map "f" 'find-function-at-point)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 (define-key help-mode-map "d" 'describe-function-at-point)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 (define-key help-mode-map "v" 'describe-variable-at-point)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 (define-key help-mode-map "i" 'Info-elisp-ref)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 (define-key help-mode-map "c" 'customize-variable)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 (define-key help-mode-map [tab] 'help-next-symbol)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 (define-key help-mode-map [(shift tab)] 'help-prev-symbol)
3368
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
158 (define-key help-mode-map [return] 'help-find-source-or-scroll-up)
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
159 (define-key help-mode-map [button2] 'help-mouse-find-source-or-track)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 (define-key help-mode-map "n" 'help-next-section)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 (define-key help-mode-map "p" 'help-prev-section)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
163 (define-derived-mode temp-buffer-mode view-major-mode "Temp"
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
164 "Major mode for viewing temporary buffers.
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
165 Exit using \\<temp-buffer-mode-map>\\[help-mode-quit].
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
166
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
167 Entry to this mode runs the normal hook `temp-buffer-mode-hook'.
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
168 Commands:
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
169 \\{temp-buffer-mode-map}"
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
170 )
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
171
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
172 (define-key temp-buffer-mode-map "q" 'help-mode-quit)
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
173 (define-key temp-buffer-mode-map "Q" 'help-mode-bury)
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
174
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 (defun describe-function-at-point ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 "Describe directly the function at point in the other window."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 (let ((symb (function-at-point)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 (when symb
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 (describe-function symb))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 (defun describe-variable-at-point ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 "Describe directly the variable at point in the other window."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 (let ((symb (variable-at-point)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 (when symb
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 (describe-variable symb))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 (defun help-next-symbol ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 "Move point to the next quoted symbol."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 (search-forward "`" nil t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 (defun help-prev-symbol ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 "Move point to the previous quoted symbol."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 (search-backward "'" nil t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 (defun help-next-section ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 "Move point to the next quoted symbol."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 (search-forward-regexp "^\\w+:" nil t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 (defun help-prev-section ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 "Move point to the previous quoted symbol."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 (search-backward-regexp "^\\w+:" nil t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 (defun help-mode-bury ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 "Bury the help buffer, possibly restoring the previous window configuration."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 (help-mode-quit t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 (defun help-mode-quit (&optional bury)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 "Exit from help mode, possibly restoring the previous window configuration.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 If the optional argument BURY is non-nil, the help buffer is buried,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 otherwise it is killed."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 (let ((buf (current-buffer)))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
220 (cond (help-window-config
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
221 (set-window-configuration help-window-config))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 ((not (one-window-p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 (delete-window)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 (if bury
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225 (bury-buffer buf)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 (kill-buffer buf))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 (defun help-quit ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
232 (define-obsolete-function-alias 'deprecated-help-command 'help-for-help)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 ;;(define-key global-map 'backspace 'deprecated-help-command)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
236 (defconst tutorial-supported-languages
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
237 '(
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
238 ("Croatian" hr iso-8859-2)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
239 ("Czech" cs iso-8859-2)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
240 ("Dutch" nl iso-8859-1)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
241 ("English" nil raw-text)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
242 ("French" fr iso-8859-1)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
243 ("German" de iso-8859-1)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
244 ("Norwegian" no iso-8859-1)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
245 ("Polish" pl iso-8859-2)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
246 ("Romanian" ro iso-8859-2)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
247 ("Slovak" sk iso-8859-2)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
248 ("Slovenian" sl iso-8859-2)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
249 ("Spanish" es iso-8859-1)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
250 ("Swedish" se iso-8859-1)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
251 )
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
252 "Alist of supported languages in TUTORIAL files.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
253 Add languages here, as more are translated.")
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
254
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
255 ;; TUTORIAL arg is XEmacs addition
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
256 (defun help-with-tutorial (&optional tutorial language)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
257 "Select the XEmacs learn-by-doing tutorial.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
258 Optional arg TUTORIAL specifies the tutorial file; if not specified or
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
259 if this command is invoked interactively, the tutorial appropriate to
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
260 the current language environment is used. If there is no tutorial
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
261 written in that language, or if this version of XEmacs has no
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
262 international (Mule) support, the English-language tutorial is used.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
263 With a prefix argument, you are asked to select which language."
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
264 (interactive "i\nP")
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
265 (when (and language (consp language))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
266 (setq language
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
267 (if (featurep 'mule)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
268 (or (declare-fboundp (read-language-name 'tutorial "Language: "))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
269 (error "No tutorial file of the specified language"))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
270 (let ((completion-ignore-case t))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
271 (completing-read "Language: "
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
272 tutorial-supported-languages nil t)))))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
273 (or language
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
274 (setq language
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
275 (if (featurep 'mule) (declare-boundp current-language-environment)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
276 "English")))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
277 (or tutorial
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
278 (setq tutorial
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
279 (cond ((featurep 'mule)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
280 (or (declare-fboundp (get-language-info language 'tutorial))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
281 "TUTORIAL"))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
282 ((equal language "English") "TUTORIAL")
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
283 (t (format "TUTORIAL.%s"
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
284 (cadr (assoc language
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
285 tutorial-supported-languages)))))))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
286 (let ((file (expand-file-name tutorial "~")))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
287 (delete-other-windows)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
288 (let ((buffer (or (get-file-buffer file)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
289 (create-file-buffer file)))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
290 (window-configuration (current-window-configuration)))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
291 (condition-case error-data
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
292 (progn
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
293 (switch-to-buffer buffer)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
294 (setq buffer-file-name file)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
295 (setq default-directory (expand-file-name "~/"))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
296 (setq buffer-auto-save-file-name nil)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
297 ;; Because of non-Mule users, TUTORIALs are not coded
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
298 ;; independently, so we must guess the coding according to
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
299 ;; the language.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
300 (let ((coding-system-for-read
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
301 (if (featurep 'mule)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
302 (with-fboundp 'get-language-info
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
303 (or (get-language-info language
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
304 'tutorial-coding-system)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
305 (car (get-language-info language
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
306 'coding-system))))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
307 (nth 2 (assoc language tutorial-supported-languages)))))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
308 (insert-file-contents (locate-data-file tutorial)))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
309 (goto-char (point-min))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
310 ;; [The 'didactic' blank lines: possibly insert blank lines
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
311 ;; around <<nya nya nya>> and replace << >> with [ ].] No more
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
312 ;; didactic blank lines. It was just a bad idea, anyway. I
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
313 ;; rewrote the TUTORIAL so it doesn't need them. However, some
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
314 ;; tutorials in other languages haven't yet been updated. ####
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
315 ;; Delete this code when they're all updated.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
316 (if (re-search-forward "^<<.+>>" nil t)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
317 (let ((n (- (window-height (selected-window))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
318 (count-lines (point-min) (point-at-bol))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
319 6)))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
320 (if (< n 12)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
321 (progn (beginning-of-line) (kill-line))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
322 ;; Some people get confused by the large gap
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
323 (delete-backward-char 2)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
324 (insert "]")
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
325 (beginning-of-line)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
326 (save-excursion
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
327 (delete-char 2)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
328 (insert "["))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
329 (newline (/ n 2))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
330 (next-line 1)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
331 (newline (- n (/ n 2))))))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
332 (goto-char (point-min))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
333 (set-buffer-modified-p nil))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
334 ;; TUTORIAL was not found: kill the buffer and restore the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
335 ;; window configuration.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
336 (file-error (kill-buffer buffer)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
337 (set-window-configuration window-configuration)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
338 ;; Now, signal the error
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
339 (signal (car error-data) (cdr error-data)))))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 ;; used by describe-key, describe-key-briefly, insert-key-binding, etc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 (defun key-or-menu-binding (key &optional menu-flag)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 "Return the command invoked by KEY.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 Like `key-binding', but handles menu events and toolbar presses correctly.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 KEY is any value returned by `next-command-event'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 MENU-FLAG is a symbol that should be set to t if KEY is a menu event,
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
347 or nil otherwise."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 (let (defn)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 (and menu-flag (set menu-flag nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 ;; If the key typed was really a menu selection, grab the form out
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 ;; of the event object and intuit the function that would be called,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 ;; and describe that instead.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 (if (and (vectorp key) (= 1 (length key))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 (or (misc-user-event-p (aref key 0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 (eq (car-safe (aref key 0)) 'menu-selection)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 (let ((event (aref key 0)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 (setq defn (if (eventp event)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 (list (event-function event) (event-object event))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 (cdr event)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 (and menu-flag (set menu-flag t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 (when (eq (car defn) 'eval)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 (setq defn (car (cdr defn))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 (when (eq (car-safe defn) 'call-interactively)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 (setq defn (car (cdr defn))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 (when (and (consp defn) (null (cdr defn)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 (setq defn (car defn))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 ;; else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 (setq defn (key-binding key)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 ;; kludge: if a toolbar button was pressed on, try to find the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 ;; binding of the toolbar button.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 (if (and (eq defn 'press-toolbar-button)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 (vectorp key)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 (button-press-event-p (aref key (1- (length key)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 ;; wait for the button release. We're on shaky ground here ...
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 (let ((event (next-command-event))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 button)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 (if (and (button-release-event-p event)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 (event-over-toolbar-p event)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 (eq 'release-and-activate-toolbar-button
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 (key-binding (vector event)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 (setq button (event-toolbar-button event)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 (toolbar-button-callback button)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 ;; if anything went wrong, try returning the binding of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 ;; the button-up event, of the original binding
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 (or (key-or-menu-binding (vector event))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 defn)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 ;; no toolbar kludge
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 defn)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 ))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 (defun describe-key-briefly (key &optional insert)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 "Print the name of the function KEY invokes. KEY is a string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393 If INSERT (the prefix arg) is non-nil, insert the message in the buffer."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 (interactive "kDescribe key briefly: \nP")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 (let ((standard-output (if insert (current-buffer) t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 defn menup)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397 (setq defn (key-or-menu-binding key 'menup))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 (if (or (null defn) (integerp defn))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 (princ (format "%s is undefined" (key-description key)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 ;; If it's a keyboard macro which trivially invokes another command,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 ;; document that instead.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 (if (or (stringp defn) (vectorp defn))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 (setq defn (or (key-binding defn)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 defn)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 (let ((last-event (and (vectorp key)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 (aref key (1- (length key))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407 (princ (format (cond (insert
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 "%s (%s)")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 ((or (button-press-event-p last-event)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 (button-release-event-p last-event))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 (gettext "%s at that spot runs the command %s"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 (gettext "%s runs the command %s")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 ;; This used to say 'This menu item' but it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 ;; could also be a scrollbar event. We can't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416 ;; distinguish at the moment.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 (if menup
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 (if insert "item" "This item")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 (key-description key))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 (if (symbolp defn) defn (prin1-to-string defn))))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 ;; #### this is a horrible piece of shit function that should
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 ;; not exist. In FSF 19.30 this function has gotten three times
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 ;; as long and has tons and tons of dumb shit checking
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 ;; special-display-buffer-names and such crap. I absolutely
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 ;; refuse to insert that Ebolification here. I wanted to delete
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 ;; this function entirely but Mly bitched.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 ;;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 ;; If your user-land code calls this function, rewrite it to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 ;; call with-displaying-help-buffer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 (defun print-help-return-message (&optional function)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 "Display or return message saying how to restore windows after help command.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 Computes a message and applies the optional argument FUNCTION to it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 If FUNCTION is nil, applies `message' to it, thus printing it."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 (and (not (get-buffer-window standard-output))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437 (funcall
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 (or function 'message)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 (concat
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 (substitute-command-keys
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 (if (one-window-p t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 (if pop-up-windows
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 (gettext "Type \\[delete-other-windows] to remove help window.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 (gettext "Type \\[switch-to-buffer] RET to remove help window."))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 (gettext "Type \\[switch-to-buffer-other-window] RET to restore the other window.")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 (substitute-command-keys
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 (gettext " \\[scroll-other-window] to scroll the help."))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 (defcustom help-selects-help-window t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 "*If nil, use the \"old Emacs\" behavior for Help buffers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 This just displays the buffer in another window, rather than selecting
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 the window."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 :type 'boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 :group 'help-appearance)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 (defcustom help-max-help-buffers 10
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 "*Maximum help buffers to allow before they start getting killed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 If this is a positive integer, before a help buffer is displayed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 by `with-displaying-help-buffer', any excess help buffers which
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 are not being displayed are first killed. Otherwise, if it is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 zero or nil, only one help buffer, \"*Help*\" is ever used."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 :type '(choice integer (const :tag "None" nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 :group 'help-appearance)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 (defvar help-buffer-list nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 "List of help buffers used by `help-register-and-maybe-prune-excess'")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 (defun help-register-and-maybe-prune-excess (newbuf)
2030
488b2f76d852 [xemacs-hg @ 2004-04-19 08:54:47 by stephent]
stephent
parents: 1779
diff changeset
469 "Register help buffer named NEWBUF and possibly kill excess ones."
488b2f76d852 [xemacs-hg @ 2004-04-19 08:54:47 by stephent]
stephent
parents: 1779
diff changeset
470 ;; don't let client code pass us bogus NEWBUF---if it gets in the list,
488b2f76d852 [xemacs-hg @ 2004-04-19 08:54:47 by stephent]
stephent
parents: 1779
diff changeset
471 ;; help can become unusable
488b2f76d852 [xemacs-hg @ 2004-04-19 08:54:47 by stephent]
stephent
parents: 1779
diff changeset
472 (unless (stringp newbuf)
488b2f76d852 [xemacs-hg @ 2004-04-19 08:54:47 by stephent]
stephent
parents: 1779
diff changeset
473 (error 'wrong-type-argument "help buffer name must be string" newbuf))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 ;; remove new buffer from list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 (setq help-buffer-list (remove newbuf help-buffer-list))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 ;; maybe kill excess help buffers
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 (if (and (integerp help-max-help-buffers)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 (> (length help-buffer-list) help-max-help-buffers))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 (let ((keep-list nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 (num-kill (- (length help-buffer-list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 help-max-help-buffers)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 (while help-buffer-list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 (let ((buf (car help-buffer-list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 (if (and (or (equal buf newbuf) (get-buffer buf))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 (string-match "^*Help" buf)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 (save-excursion (set-buffer buf)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 (eq major-mode 'help-mode)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 (if (and (>= num-kill (length help-buffer-list))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 (not (get-buffer-window buf t t)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490 (kill-buffer buf)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 (setq keep-list (cons buf keep-list)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492 (setq help-buffer-list (cdr help-buffer-list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 (setq help-buffer-list (nreverse keep-list))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 ;; push new buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 (setq help-buffer-list (cons newbuf help-buffer-list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 (defvar help-buffer-prefix-string "Help"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 "Initial string to use in constructing help buffer names.
2030
488b2f76d852 [xemacs-hg @ 2004-04-19 08:54:47 by stephent]
stephent
parents: 1779
diff changeset
499 You should never set this directly, only let-bind it.")
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 (defun help-buffer-name (name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 "Return a name for a Help buffer using string NAME for context."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503 (if (and (integerp help-max-help-buffers)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504 (> help-max-help-buffers 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 (stringp name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 (if help-buffer-prefix-string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 (format "*%s: %s*" help-buffer-prefix-string name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508 (format "*%s*" name))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 (format "*%s*" help-buffer-prefix-string)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 793
diff changeset
511 ;; with-displaying-help-buffer
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 ;; #### Should really be a macro to eliminate the requirement of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514 ;; caller to code a lambda form in THUNK -- mrb
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 ;; #### BEFORE you rush to make this a macro, think about backward
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 ;; compatibility. The right way would be to create a macro with
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518 ;; another name (which is a shame, because w-d-h-b is a perfect name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 ;; for a macro) that uses with-displaying-help-buffer internally.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
521 (defcustom mode-for-help 'help-mode
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
522 "*Mode that help buffers are put into.")
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
523
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
524 (defcustom mode-for-temp-buffer 'temp-buffer-mode
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
525 "*Mode that help buffers are put into.")
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
526
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
527 (defvar help-sticky-window nil
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
528 ;; Window into which help buffers will be displayed, rather than
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
529 ;; always searching for a new one. This is INTERNAL and liable to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
530 ;; change its interface and/or name at any moment. It should be
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
531 ;; bound, not set.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
532 )
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
533
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
534 (defvar help-window-config nil)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
535
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
536 (make-variable-buffer-local 'help-window-config)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
537 (put 'help-window-config 'permanent-local t)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
538
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
539 (defmacro with-displaying-temp-buffer (name &rest body)
2030
488b2f76d852 [xemacs-hg @ 2004-04-19 08:54:47 by stephent]
stephent
parents: 1779
diff changeset
540 "Make a help buffer with given NAME and evaluate BODY, sending stdout there.
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
541
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
542 Use this function for displaying information in temporary buffers, where the
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
543 user will typically view the information and then exit using
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
544 \\<temp-buffer-mode-map>\\[help-mode-quit].
863
42375619fa45 [xemacs-hg @ 2002-06-04 06:03:59 by andyp]
andyp
parents: 793
diff changeset
545
2030
488b2f76d852 [xemacs-hg @ 2004-04-19 08:54:47 by stephent]
stephent
parents: 1779
diff changeset
546 On exit from this form, the buffer is put into the mode specified in
488b2f76d852 [xemacs-hg @ 2004-04-19 08:54:47 by stephent]
stephent
parents: 1779
diff changeset
547 `mode-for-temp-buffer' and displayed, typically in a popup window. Ie,
488b2f76d852 [xemacs-hg @ 2004-04-19 08:54:47 by stephent]
stephent
parents: 1779
diff changeset
548 the buffer is a scratchpad which is displayed all at once in formatted
488b2f76d852 [xemacs-hg @ 2004-04-19 08:54:47 by stephent]
stephent
parents: 1779
diff changeset
549 form.
488b2f76d852 [xemacs-hg @ 2004-04-19 08:54:47 by stephent]
stephent
parents: 1779
diff changeset
550
488b2f76d852 [xemacs-hg @ 2004-04-19 08:54:47 by stephent]
stephent
parents: 1779
diff changeset
551 N.B. Write to this buffer with functions like `princ', not `insert'."
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
552 `(let* ((winconfig (current-window-configuration))
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
553 (was-one-window (one-window-p))
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
554 (buffer-name ,name)
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
555 (help-not-visible
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
556 (not (and (windows-of-buffer buffer-name) ;shortcut
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
557 (memq (selected-frame)
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
558 (mapcar 'window-frame
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
559 (windows-of-buffer buffer-name)))))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 (help-register-and-maybe-prune-excess buffer-name)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
561 ;; if help-sticky-window is bogus or deleted, get rid of it.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
562 (if (and help-sticky-window (or (not (windowp help-sticky-window))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
563 (not (window-live-p help-sticky-window))))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
564 (setq help-sticky-window nil))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
565 (prog1
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
566 (let ((temp-buffer-show-function
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
567 (if help-sticky-window
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
568 #'(lambda (buffer)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
569 (set-window-buffer help-sticky-window buffer))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
570 temp-buffer-show-function)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
571 (with-output-to-temp-buffer buffer-name
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
572 (prog1 (progn ,@body)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
573 (save-excursion
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
574 (set-buffer standard-output)
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
575 (funcall mode-for-temp-buffer)))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
576 (let ((helpwin (get-buffer-window buffer-name)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577 (when helpwin
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
578 ;; If the temp buffer is already displayed on this
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
579 ;; frame, don't override the previous configuration
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
580 (when help-not-visible
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
581 (with-current-buffer (window-buffer helpwin)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
582 (setq help-window-config winconfig)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583 (when help-selects-help-window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584 (select-window helpwin))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585 (cond ((eq helpwin (selected-window))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586 (display-message 'command
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
587 (substitute-command-keys "Type \\[help-mode-quit] to remove window, \\[scroll-up] to scroll the text.")))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 (was-one-window
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589 (display-message 'command
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
590 (substitute-command-keys "Type \\[delete-other-windows] to remove window, \\[scroll-other-window] to scroll the text.")))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592 (display-message 'command
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
593 (substitute-command-keys "Type \\[switch-to-buffer-other-window] to restore the other window, \\[scroll-other-window] to scroll the text.")))))))))
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
594
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
595 (put 'with-displaying-temp-buffer 'lisp-indent-function 1)
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
596
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
597 (defun with-displaying-help-buffer (thunk &optional name)
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
598 "Form which makes a help buffer with given NAME and evaluates BODY there.
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
599 The actual name of the buffer is generated by the function `help-buffer-name'.
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
600
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
601 Use this function for displaying help when C-h something is pressed or
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
602 in similar situations. Do *not* use it when you are displaying a help
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
603 message and then prompting for input in the minibuffer -- this macro
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
604 usually selects the help buffer, which is not what you want in those
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
605 situations."
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
606 (let ((mode-for-temp-buffer mode-for-help))
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
607 (with-displaying-temp-buffer (help-buffer-name name)
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1038
diff changeset
608 (funcall thunk))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 (defun describe-key (key)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 "Display documentation of the function invoked by KEY.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612 KEY is a string, or vector of events.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
613 When called interactively, KEY may also be a menu selection."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
614 (interactive "kDescribe key: ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
615 (let ((defn (key-or-menu-binding key))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
616 (key-string (key-description key)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
617 (if (or (null defn) (integerp defn))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
618 (message "%s is undefined" key-string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
619 (with-displaying-help-buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
620 (lambda ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
621 (princ key-string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622 (princ " runs ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623 (if (symbolp defn)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624 (princ (format "`%s'" defn))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
625 (princ defn))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
626 (princ "\n\n")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
627 (cond ((or (stringp defn) (vectorp defn))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628 (let ((cmd (key-binding defn)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
629 (if (not cmd)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
630 (princ "a keyboard macro")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631 (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632 (princ "a keyboard macro which runs the command ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633 (princ cmd)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 (princ ":\n\n")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
635 (if (documentation cmd) (princ (documentation cmd)))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
636 ((and (consp defn) (not (eq 'lambda (car-safe defn))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 (let ((describe-function-show-arglist nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 (describe-function-1 (car defn))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639 ((symbolp defn)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640 (describe-function-1 defn))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641 ((documentation defn)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 (princ (documentation defn)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644 (princ "not documented"))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 (format "key `%s'" key-string)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 (defun describe-mode ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648 "Display documentation of current major mode and minor modes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
649 For this to work correctly for a minor mode, the mode's indicator variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650 \(listed in `minor-mode-alist') must also be a function whose documentation
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
651 describes the minor mode."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653 (with-displaying-help-buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 (lambda ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655 ;; XEmacs change: print the major-mode documentation before
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 ;; the minor modes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657 (princ mode-name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658 (princ " mode:\n")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 (princ (documentation major-mode))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660 (princ "\n\n----\n\n")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661 (let ((minor-modes minor-mode-alist))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662 (while minor-modes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 (let* ((minor-mode (car (car minor-modes)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 (indicator (car (cdr (car minor-modes)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 ;; Document a minor mode if it is listed in minor-mode-alist,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666 ;; bound locally in this buffer, non-nil, and has a function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667 ;; definition.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 (if (and (boundp minor-mode)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669 (symbol-value minor-mode)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670 (fboundp minor-mode))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 (let ((pretty-minor-mode minor-mode))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
672 (if (string-match "-mode\\'" (symbol-name minor-mode))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673 (setq pretty-minor-mode
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674 (capitalize
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675 (substring (symbol-name minor-mode)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676 0 (match-beginning 0)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
677 (while (and (consp indicator) (extentp (car indicator)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678 (setq indicator (cdr indicator)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
679 (while (and indicator (symbolp indicator))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680 (setq indicator (symbol-value indicator)))
732
b9b8621c2439 [xemacs-hg @ 2002-01-22 14:16:38 by youngs]
youngs
parents: 622
diff changeset
681 (princ (format "%s minor mode (%s):\n"
b9b8621c2439 [xemacs-hg @ 2002-01-22 14:16:38 by youngs]
youngs
parents: 622
diff changeset
682 pretty-minor-mode
b9b8621c2439 [xemacs-hg @ 2002-01-22 14:16:38 by youngs]
youngs
parents: 622
diff changeset
683 (if indicator
b9b8621c2439 [xemacs-hg @ 2002-01-22 14:16:38 by youngs]
youngs
parents: 622
diff changeset
684 (format "indicator%s" indicator)
b9b8621c2439 [xemacs-hg @ 2002-01-22 14:16:38 by youngs]
youngs
parents: 622
diff changeset
685 "no indicator")))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686 (princ (documentation minor-mode))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687 (princ "\n\n----\n\n"))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
688 (setq minor-modes (cdr minor-modes)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
689 (format "%s mode" mode-name)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
690
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
691 ;; So keyboard macro definitions are documented correctly
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
692 (fset 'defining-kbd-macro (symbol-function 'start-kbd-macro))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
693
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
694 ;; view a read-only file intelligently
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
695 (defun Help-find-file (file)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
696 (if (fboundp 'view-file)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
697 (view-file file)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
698 (find-file-read-only file)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
699 (goto-char (point-min))))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
700
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
701 (defun describe-distribution ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702 "Display info on how to obtain the latest version of XEmacs."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
703 (interactive)
2537
b7b90f750a78 [xemacs-hg @ 2005-01-31 20:08:32 by ben]
ben
parents: 2275
diff changeset
704 (save-window-excursion
b7b90f750a78 [xemacs-hg @ 2005-01-31 20:08:32 by ben]
ben
parents: 2275
diff changeset
705 (info)
b7b90f750a78 [xemacs-hg @ 2005-01-31 20:08:32 by ben]
ben
parents: 2275
diff changeset
706 (Info-find-node "xemacs-faq" "Q1.1.1"))
b7b90f750a78 [xemacs-hg @ 2005-01-31 20:08:32 by ben]
ben
parents: 2275
diff changeset
707 (switch-to-buffer "*info*"))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
708
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
709 (defun describe-beta ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
710 "Display info on how to deal with Beta versions of XEmacs."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
711 (interactive)
2537
b7b90f750a78 [xemacs-hg @ 2005-01-31 20:08:32 by ben]
ben
parents: 2275
diff changeset
712 (save-window-excursion
b7b90f750a78 [xemacs-hg @ 2005-01-31 20:08:32 by ben]
ben
parents: 2275
diff changeset
713 (info "(beta)Top"))
b7b90f750a78 [xemacs-hg @ 2005-01-31 20:08:32 by ben]
ben
parents: 2275
diff changeset
714 (switch-to-buffer "*info*"))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
715
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
716 (defun describe-copying ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
717 "Display info on how you may redistribute copies of XEmacs."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
718 (interactive)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
719 (Help-find-file (locate-data-file "COPYING")))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
720
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
721 (defun describe-pointer ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
722 "Show a list of all defined mouse buttons, and their definitions."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
723 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
724 (describe-bindings nil t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
725
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
726 (defun describe-no-warranty ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
727 "Display info on all the kinds of warranty XEmacs does NOT have."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
728 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
729 (describe-copying)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
730 (let (case-fold-search)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
731 (search-forward "NO WARRANTY")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
732 (recenter 0)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
733
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
734 (defun describe-bindings (&optional prefix mouse-only-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
735 "Show a list of all defined keys, and their definitions.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
736 The list is put in a buffer, which is displayed.
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
737 If optional first argument PREFIX is supplied, only commands
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
738 which start with that sequence of keys are described.
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
739 If optional second argument MOUSE-ONLY-P (prefix arg, interactively)
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
740 is non-nil then only the mouse bindings are displayed."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
741 (interactive (list nil current-prefix-arg))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
742 (with-displaying-help-buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
743 (lambda ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
744 (describe-bindings-1 prefix mouse-only-p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
745 (format "bindings for %s" major-mode)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
746
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
747 (defun describe-bindings-1 (&optional prefix mouse-only-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
748 (let ((heading (if mouse-only-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
749 (gettext "button binding\n------ -------\n")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
750 (gettext "key binding\n--- -------\n")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
751 (buffer (current-buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
752 (minor minor-mode-map-alist)
430
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
753 (extent-maps (mapcar-extents
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
754 'extent-keymap
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
755 nil (current-buffer) (point) (point) nil 'keymap))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
756 (local (current-local-map))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
757 (shadow '()))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
758 (set-buffer standard-output)
430
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
759 (while extent-maps
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
760 (insert "Bindings for Text Region:\n"
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
761 heading)
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
762 (describe-bindings-internal
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
763 (car extent-maps) nil shadow prefix mouse-only-p)
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
764 (insert "\n")
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
765 (setq shadow (cons (car extent-maps) shadow)
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
766 extent-maps (cdr extent-maps)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
767 (while minor
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
768 (let ((sym (car (car minor)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
769 (map (cdr (car minor))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
770 (if (symbol-value-in-buffer sym buffer nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
771 (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
772 (insert (format "Minor Mode Bindings for `%s':\n"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
773 sym)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
774 heading)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
775 (describe-bindings-internal map nil shadow prefix mouse-only-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
776 (insert "\n")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
777 (setq shadow (cons map shadow))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
778 (setq minor (cdr minor))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
779 (if local
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
780 (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
781 (insert "Local Bindings:\n" heading)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
782 (describe-bindings-internal local nil shadow prefix mouse-only-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
783 (insert "\n")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
784 (setq shadow (cons local shadow))))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
785 (if (console-on-window-system-p)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
786 (progn
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
787 (insert "Global Window-System-Only Bindings:\n" heading)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
788 (describe-bindings-internal global-window-system-map nil
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
789 shadow prefix mouse-only-p)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
790 (push global-window-system-map shadow))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
791 (insert "Global TTY-Only Bindings:\n" heading)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
792 (describe-bindings-internal global-tty-map nil
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
793 shadow prefix mouse-only-p)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
794 (push global-tty-map shadow))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 732
diff changeset
795 (insert "\nGlobal Bindings:\n" heading)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
796 (describe-bindings-internal (current-global-map)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
797 nil shadow prefix mouse-only-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
798 (when (and prefix function-key-map (not mouse-only-p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
799 (insert "\nFunction key map translations:\n" heading)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
800 (describe-bindings-internal function-key-map nil nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
801 prefix mouse-only-p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
802 (set-buffer buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
803 standard-output))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
804
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
805 (defun describe-prefix-bindings ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
806 "Describe the bindings of the prefix used to reach this command.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
807 The prefix described consists of all but the last event
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
808 of the key sequence that ran this command."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
809 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
810 (let* ((key (this-command-keys))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
811 (prefix (make-vector (1- (length key)) nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
812 i)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
813 (setq i 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
814 (while (< i (length prefix))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
815 (aset prefix i (aref key i))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
816 (setq i (1+ i)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
817 (with-displaying-help-buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
818 (lambda ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
819 (princ "Key bindings starting with ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
820 (princ (key-description prefix))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
821 (princ ":\n\n")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
822 (describe-bindings-1 prefix nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
823 (format "%s prefix" (key-description prefix)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
824
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
825 ;; Make C-h after a prefix, when not specifically bound,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
826 ;; run describe-prefix-bindings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
827 (setq prefix-help-command 'describe-prefix-bindings)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
828
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
829 (defun describe-installation ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
830 "Display a buffer showing information about this XEmacs was compiled."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
831 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
832 (if (and (boundp 'Installation-string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
833 (stringp Installation-string))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
834 (with-displaying-help-buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
835 (lambda ()
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
836 (princ
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
837 (if (fboundp 'decode-coding-string)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
838 (decode-coding-string Installation-string 'automatic-conversion)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
839 Installation-string)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
840 "Installation")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
841 (error "No Installation information available.")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
842
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
843 (defun view-emacs-news ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
844 "Display info on recent changes to XEmacs."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
845 (interactive)
2986
66ad30774567 [xemacs-hg @ 2005-10-10 02:45:31 by youngs]
youngs
parents: 2537
diff changeset
846 (Help-find-file (expand-file-name "NEWS" data-directory)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
847
3074
0f411920c8db [xemacs-hg @ 2005-11-16 12:12:57 by malcolmp]
malcolmp
parents: 3065
diff changeset
848 (defun view-xemacs-problems ()
0f411920c8db [xemacs-hg @ 2005-11-16 12:12:57 by malcolmp]
malcolmp
parents: 3065
diff changeset
849 "Display known problems with XEmacs."
0f411920c8db [xemacs-hg @ 2005-11-16 12:12:57 by malcolmp]
malcolmp
parents: 3065
diff changeset
850 (interactive)
0f411920c8db [xemacs-hg @ 2005-11-16 12:12:57 by malcolmp]
malcolmp
parents: 3065
diff changeset
851 (Help-find-file (expand-file-name "PROBLEMS" data-directory)))
0f411920c8db [xemacs-hg @ 2005-11-16 12:12:57 by malcolmp]
malcolmp
parents: 3065
diff changeset
852
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
853 (defun xemacs-www-page ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
854 "Go to the XEmacs World Wide Web page."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
855 (interactive)
776
79940b592197 [xemacs-hg @ 2002-03-15 07:43:14 by ben]
ben
parents: 771
diff changeset
856 (if-fboundp 'browse-url
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
857 (browse-url "http://www.xemacs.org/")
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
858 (error "xemacs-www-page requires browse-url")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
859
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
860 (defun xemacs-www-faq ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
861 "View the latest and greatest XEmacs FAQ using the World Wide Web."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
862 (interactive)
776
79940b592197 [xemacs-hg @ 2002-03-15 07:43:14 by ben]
ben
parents: 771
diff changeset
863 (if-fboundp 'browse-url
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
864 (browse-url "http://www.xemacs.org/faq/index.html")
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
865 (error "xemacs-www-faq requires browse-url")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
866
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
867 (defun xemacs-local-faq ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
868 "View the local copy of the XEmacs FAQ.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
869 If you have access to the World Wide Web, you should use `xemacs-www-faq'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
870 instead, to ensure that you get the most up-to-date information."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
871 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
872 (save-window-excursion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
873 (info)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
874 (Info-find-node "xemacs-faq" "Top"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
875 (switch-to-buffer "*info*"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
876
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
877 (defun view-sample-init-el ()
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
878 "Display the sample init.el file."
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
879 (interactive)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
880 (Help-find-file (locate-data-file "sample.init.el")))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
881
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
882 (defcustom view-lossage-key-count 100
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
883 "*Number of keys `view-lossage' shows.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
884 The maximum number of available keys is governed by `recent-keys-ring-size'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
885 :type 'integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
886 :group 'help)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
887
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
888 (defcustom view-lossage-message-count 100
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
889 "*Number of minibuffer messages `view-lossage' shows."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
890 :type 'integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
891 :group 'help)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
892
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
893 (defun print-recent-messages (n)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
894 "Print N most recent messages to standard-output, most recent first.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
895 If N is nil, all messages will be printed."
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
896 (clear-message) ;; make sure current message goes into log
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
897 (save-excursion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
898 (let ((buffer (get-buffer-create " *Message-Log*"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
899 oldpoint extent)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
900 (goto-char (point-max buffer) buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
901 (set-buffer standard-output)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
902 (while (and (not (bobp buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
903 (or (null n) (>= (decf n) 0)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
904 (setq oldpoint (point buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
905 (setq extent (extent-at oldpoint buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
906 'message-multiline nil 'before))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
907 ;; If the message was multiline, move all the way to the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
908 ;; beginning.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
909 (if extent
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
910 (goto-char (extent-start-position extent) buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
911 (forward-line -1 buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
912 (insert-buffer-substring buffer (point buffer) oldpoint)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
913
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
914 (defun view-warnings ()
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
915 "Display warnings issued."
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
916 (interactive)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
917 (with-displaying-help-buffer
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
918 (lambda ()
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
919 (let ((buf (get-buffer "*Warnings*")))
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
920 (when buf
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
921 (save-excursion
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
922 (set-buffer standard-output)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
923 (map-extents
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
924 #'(lambda (extent arg)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
925 (goto-char (point-min))
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
926 (insert (extent-string extent)))
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
927 buf)))))
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
928 "warnings"))
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
929
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
930 (defun view-lossage (&optional no-keys)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
931 "Display recent input keystrokes and recent minibuffer messages.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
932 The number of keys shown is controlled by `view-lossage-key-count'.
1038
4bc5bb3ea5ad [xemacs-hg @ 2002-10-08 03:36:09 by youngs]
youngs
parents: 863
diff changeset
933 The number of messages shown is controlled by `view-lossage-message-count'.
4bc5bb3ea5ad [xemacs-hg @ 2002-10-08 03:36:09 by youngs]
youngs
parents: 863
diff changeset
934
4bc5bb3ea5ad [xemacs-hg @ 2002-10-08 03:36:09 by youngs]
youngs
parents: 863
diff changeset
935 If optional arg NO-KEYS (prefix arg, interactively) is non-nil,
4bc5bb3ea5ad [xemacs-hg @ 2002-10-08 03:36:09 by youngs]
youngs
parents: 863
diff changeset
936 then recent input keystrokes output is omitted."
4bc5bb3ea5ad [xemacs-hg @ 2002-10-08 03:36:09 by youngs]
youngs
parents: 863
diff changeset
937 (interactive "P")
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
938 (with-displaying-help-buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
939 (lambda ()
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
940 (unless no-keys
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
941 (princ (key-description (recent-keys view-lossage-key-count)))
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
942 (save-excursion
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
943 (set-buffer standard-output)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
944 (goto-char (point-min))
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
945 (insert "Recent keystrokes:\n\n")
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
946 (while (progn (move-to-column 50) (not (eobp)))
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
947 (search-forward " " nil t)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
948 (insert "\n")))
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
949 (princ "\n\n\n"))
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
950 ;; Copy the messages from " *Message-Log*", reversing their order and
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
951 ;; handling multiline messages correctly.
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 776
diff changeset
952 (princ "Recent minibuffer messages (most recent first):\n\n")
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
953 (print-recent-messages view-lossage-message-count))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
954 "lossage"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
955
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
956 (define-function 'help 'help-for-help)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
957
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
958 (make-help-screen help-for-help
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
959 "A B C F I K L M N P S T V W C-c C-d C-f C-i C-k C-n C-w; ? for more help:"
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
960 (concat
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
961 "Type a Help option:
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
962 \(Use SPC or DEL to scroll through this text. Type \\<help-map>\\[help-quit] to exit the Help command.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
963
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
964 Help on key bindings:
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
965
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
966 \\[describe-bindings] Table of all key bindings.
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
967 \\[describe-key-briefly] Type a key sequence or select a menu item;
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
968 it displays the corresponding command name.
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
969 \\[describe-key] Type a key sequence or select a menu item;
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
970 it displays the documentation for the command bound to that key.
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
971 (Terser but more up-to-date than what's in the manual.)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
972 \\[Info-goto-emacs-key-command-node] Type a key sequence or select a menu item;
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
973 it jumps to the full documentation in the XEmacs User's Manual
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
974 for the corresponding command.
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
975 \\[view-lossage] Recent input keystrokes and minibuffer messages.
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
976 \\[describe-mode] Documentation of current major and minor modes.
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
977 \\[describe-pointer] Table of all mouse-button bindings.
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
978 \\[where-is] Type a command name; it displays which keystrokes invoke that command.
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
979
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
980 Help on functions and variables:
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
981
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
982 \\[hyper-apropos] Type a substring; it shows a hypertext list of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
983 functions and variables that contain that substring.
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
984 \\[command-apropos] Older version of apropos; superseded by previous command.
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
985 \\[apropos-documentation] Type a substring; it shows a hypertext list of
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
986 functions and variables containing that substring anywhere
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
987 in their documentation.
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
988 \\[Info-goto-emacs-command-node] Type a command name; it jumps to the full documentation
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
989 in the XEmacs User's Manual.
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
990 \\[describe-function] Type a command or function name; it shows its documentation.
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
991 (Terser but more up-to-date than what's in the manual.)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
992 \\[Info-elisp-ref] Type a function name; it jumps to the full documentation
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
993 in the XEmacs Lisp Reference Manual.
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
994 \\[Info-search-index-in-xemacs-and-lispref] Type a substring; it looks it up in the indices of both
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
995 the XEmacs User's Manual and the XEmacs Lisp Reference Manual.
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
996 It jumps to the first match (preferring an exact match); you
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
997 can use `\\<Info-mode-map>\\[Info-index-next]\\<help-map>' to successively visit other matches.
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
998 \\[describe-variable] Type a variable name; it displays its documentation and value.
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
999
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
1000 Miscellaneous:
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
1001
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
1002 "
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
1003 (if (string-match "beta" emacs-version)
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
1004 "\\[describe-beta] Special considerations about running a beta version of XEmacs.
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
1005 "
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
1006 "")
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
1007 "
3074
0f411920c8db [xemacs-hg @ 2005-11-16 12:12:57 by malcolmp]
malcolmp
parents: 3065
diff changeset
1008 \\[view-xemacs-problems] Known problems.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1009 \\[customize] Customize Emacs options.
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
1010 \\[describe-distribution] How to obtain XEmacs.
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
1011 \\[describe-last-error] Information about the most recent error.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1012 \\[xemacs-local-faq] Local copy of the XEmacs FAQ.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1013 \\[info] Info documentation reader.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1014 \\[Info-query] Type an Info file name; it displays it in Info reader.
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
1015 \\[describe-copying] XEmacs copying permission (General Public License).
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1016 \\[view-emacs-news] News of recent XEmacs changes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1017 \\[finder-by-keyword] Type a topic keyword; it finds matching packages.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1018 \\[describe-syntax] Contents of syntax table with explanations.
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
1019 \\[view-sample-init-el] View the sample init.el that comes with XEmacs.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1020 \\[help-with-tutorial] XEmacs learn-by-doing tutorial.
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
1021 \\[describe-no-warranty] Information on absence of warranty for XEmacs."
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
1022 )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1023 help-map)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1024
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1025 (defun function-called-at-point ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1026 "Return the function which is called by the list containing point.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1027 If that gives no function, return the function whose name is around point.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1028 If that doesn't give a function, return nil."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1029 (or (ignore-errors
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1030 (save-excursion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1031 (save-restriction
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1032 (narrow-to-region (max (point-min) (- (point) 1000))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1033 (point-max))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1034 (backward-up-list 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1035 (forward-char 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1036 (let (obj)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1037 (setq obj (read (current-buffer)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1038 (and (symbolp obj) (fboundp obj) obj)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1039 (ignore-errors
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1040 (with-syntax-table emacs-lisp-mode-syntax-table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1041 (save-excursion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1042 (or (not (zerop (skip-syntax-backward "_w")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1043 (eq (char-syntax (char-after (point))) ?w)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1044 (eq (char-syntax (char-after (point))) ?_)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1045 (forward-sexp -1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1046 (skip-chars-forward "`'")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1047 (let ((obj (read (current-buffer))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1048 (and (symbolp obj) (fboundp obj) obj)))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1049
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1050 (defun function-at-point ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1051 "Return the function whose name is around point.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1052 If that gives no function, return the function which is called by the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1053 list containing point. If that doesn't give a function, return nil."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1054 (or (ignore-errors
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1055 (with-syntax-table emacs-lisp-mode-syntax-table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1056 (save-excursion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1057 (or (not (zerop (skip-syntax-backward "_w")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1058 (eq (char-syntax (char-after (point))) ?w)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1059 (eq (char-syntax (char-after (point))) ?_)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1060 (forward-sexp -1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1061 (skip-chars-forward "`'")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1062 (let ((obj (read (current-buffer))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1063 (and (symbolp obj) (fboundp obj) obj)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1064 (ignore-errors
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1065 (save-excursion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1066 (save-restriction
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1067 (narrow-to-region (max (point-min) (- (point) 1000))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1068 (point-max))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1069 (backward-up-list 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1070 (forward-char 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1071 (let (obj)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1072 (setq obj (read (current-buffer)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1073 (and (symbolp obj) (fboundp obj) obj)))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1074
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1075 (defun function-at-event (event)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1076 "Return the function whose name is around the position of EVENT.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1077 EVENT should be a mouse event. When calling from a popup or context menu,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1078 use `last-popup-menu-event' to find out where the mouse was clicked.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1079 \(You cannot use (interactive \"e\"), unfortunately. This returns a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1080 misc-user event.)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1081
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1082 If the event contains no position, or the position is not over text, or
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1083 there is no function around that point, nil is returned."
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1084 (if (and event (event-buffer event) (event-point event))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1085 (save-excursion
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1086 (set-buffer (event-buffer event))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1087 (goto-char (event-point event))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1088 (function-at-point))))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1089
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1090 ;; Default to nil for the non-hackers? Not until we find a way to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1091 ;; distinguish hackers from non-hackers automatically!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1092 (defcustom describe-function-show-arglist t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1093 "*If non-nil, describe-function will show its arglist,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1094 unless the function is autoloaded."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1095 :type 'boolean
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1096 :group 'help-appearance)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1097
3368
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1098 (define-obsolete-function-alias
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1099 ;; Moved to using the version in loadhist.el
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1100 'describe-function-find-symbol
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1101 'symbol-file)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1102
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1103 (define-obsolete-function-alias
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1104 'describe-function-find-file
3368
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1105 'symbol-file)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1106
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1107 (defun describe-function (function)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1108 "Display the full documentation of FUNCTION (a symbol).
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1109 When run interactively, it defaults to any function found by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1110 `function-at-point'."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1111 (interactive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1112 (let* ((fn (function-at-point))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1113 (val (let ((enable-recursive-minibuffers t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1114 (completing-read
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1115 (if fn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1116 (format (gettext "Describe function (default %s): ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1117 fn)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1118 (gettext "Describe function: "))
430
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
1119 obarray 'fboundp t nil 'function-history
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
1120 (symbol-name fn)))))
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
1121 (list (intern val))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1122 (with-displaying-help-buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1123 (lambda ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1124 (describe-function-1 function)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1125 ;; Return the text we displayed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1126 (buffer-string nil nil standard-output))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1127 (format "function `%s'" function)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1128
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1129 (defun function-obsolete-p (function)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1130 "Return non-nil if FUNCTION is obsolete."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1131 (not (null (get function 'byte-obsolete-info))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1132
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1133 (defun function-obsoleteness-doc (function)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1134 "If FUNCTION is obsolete, return a string describing this."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1135 (let ((obsolete (get function 'byte-obsolete-info)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1136 (if obsolete
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1137 (format "Obsolete; %s"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1138 (if (stringp (car obsolete))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1139 (car obsolete)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1140 (format "use `%s' instead." (car obsolete)))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1141
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1142 (defun function-compatible-p (function)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1143 "Return non-nil if FUNCTION is present for Emacs compatibility."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1144 (not (null (get function 'byte-compatible-info))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1145
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1146 (defun function-compatibility-doc (function)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1147 "If FUNCTION is Emacs compatible, return a string describing this."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1148 (let ((compatible (get function 'byte-compatible-info)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1149 (if compatible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1150 (format "Emacs Compatible; %s"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1151 (if (stringp (car compatible))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1152 (car compatible)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1153 (format "use `%s' instead." (car compatible)))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1154
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1155 ;Here are all the possibilities below spelled out, for the benefit
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1156 ;of the I18N3 snarfer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1157 ;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1158 ;(gettext "a built-in function")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1159 ;(gettext "an interactive built-in function")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1160 ;(gettext "a built-in macro")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1161 ;(gettext "an interactive built-in macro")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1162 ;(gettext "a compiled Lisp function")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1163 ;(gettext "an interactive compiled Lisp function")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1164 ;(gettext "a compiled Lisp macro")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1165 ;(gettext "an interactive compiled Lisp macro")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1166 ;(gettext "a Lisp function")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1167 ;(gettext "an interactive Lisp function")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1168 ;(gettext "a Lisp macro")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1169 ;(gettext "an interactive Lisp macro")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1170 ;(gettext "a mocklisp function")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1171 ;(gettext "an interactive mocklisp function")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1172 ;(gettext "a mocklisp macro")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1173 ;(gettext "an interactive mocklisp macro")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1174 ;(gettext "an autoloaded Lisp function")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1175 ;(gettext "an interactive autoloaded Lisp function")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1176 ;(gettext "an autoloaded Lisp macro")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1177 ;(gettext "an interactive autoloaded Lisp macro")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1178
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1179 ;; taken out of `describe-function-1'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1180 (defun function-arglist (function)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1181 "Return a string giving the argument list of FUNCTION.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1182 For example:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1183
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1184 (function-arglist 'function-arglist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1185 => (function-arglist FUNCTION)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1186
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1187 This function is used by `describe-function-1' to list function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1188 arguments in the standard Lisp style."
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
1189 (let* ((fnc (indirect-function function))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
1190 (fndef (if (eq (car-safe fnc) 'macro)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
1191 (cdr fnc)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
1192 fnc))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1193 (arglist
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
1194 (cond ((compiled-function-p fndef)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
1195 (compiled-function-arglist fndef))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
1196 ((eq (car-safe fndef) 'lambda)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
1197 (nth 1 fndef))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
1198 ((subrp fndef)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
1199 (let* ((doc (documentation function))
3065
3fa430e1aa35 [xemacs-hg @ 2005-11-13 10:52:47 by ben]
ben
parents: 2986
diff changeset
1200 (args (and doc
3fa430e1aa35 [xemacs-hg @ 2005-11-13 10:52:47 by ben]
ben
parents: 2986
diff changeset
1201 (string-match
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
1202 "[\n\t ]*\narguments: ?(\\(.*\\))\n?\\'"
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
1203 doc)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
1204 (match-string 1 doc))))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
1205 ;; If there are no arguments documented for the
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
1206 ;; subr, rather don't print anything.
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
1207 (cond ((null args) t)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
1208 ((equal args "") nil)
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
1209 (args))))
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
1210 (t t))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1211 (cond ((listp arglist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1212 (prin1-to-string
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1213 (cons function (mapcar (lambda (arg)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1214 (if (memq arg '(&optional &rest))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1215 arg
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1216 (intern (upcase (symbol-name arg)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1217 arglist))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1218 t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1219 ((stringp arglist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1220 (format "(%s %s)" function arglist)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1221
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1222 (defun function-documentation (function &optional strip-arglist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1223 "Return a string giving the documentation for FUNCTION, if any.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1224 If the optional argument STRIP-ARGLIST is non-nil, remove the arglist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1225 part of the documentation of internal subroutines."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1226 (let ((doc (condition-case nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1227 (or (documentation function)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1228 (gettext "not documented"))
2275
445bd1969ed0 [xemacs-hg @ 2004-09-15 08:30:25 by stephent]
stephent
parents: 2137
diff changeset
1229 (void-function "(alias for undefined function)")
445bd1969ed0 [xemacs-hg @ 2004-09-15 08:30:25 by stephent]
stephent
parents: 2137
diff changeset
1230 (error "(unexpected error from `documention')"))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1231 (if (and strip-arglist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1232 (string-match "[\n\t ]*\narguments: ?(\\(.*\\))\n?\\'" doc))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1233 (setq doc (substring doc 0 (match-beginning 0))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1234 doc))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1235
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1236 ;; replacement for `princ' that puts the text in the specified face,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1237 ;; if possible
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1238 (defun Help-princ-face (object face)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1239 (cond ((bufferp standard-output)
464
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1240 (let ((opoint (point standard-output)))
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1241 (princ object)
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1242 (put-nonduplicable-text-property opoint (point standard-output)
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1243 'face face standard-output)))
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1244 ((markerp standard-output)
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1245 (let ((buf (marker-buffer standard-output))
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1246 (pos (marker-position standard-output)))
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1247 (princ object)
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1248 (put-nonduplicable-text-property
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1249 pos (marker-position standard-output) 'face face buf)))
1779
fb556d2c7344 [xemacs-hg @ 2003-11-06 05:11:15 by stephent]
stephent
parents: 1123
diff changeset
1250 (t (princ object))))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1251
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1252 ;; replacement for `prin1' that puts the text in the specified face,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1253 ;; if possible
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1254 (defun Help-prin1-face (object face)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1255 (cond ((bufferp standard-output)
464
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1256 (let ((opoint (point standard-output)))
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1257 (prin1 object)
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1258 (put-nonduplicable-text-property opoint (point standard-output)
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1259 'face face standard-output)))
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1260 ((markerp standard-output)
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1261 (let ((buf (marker-buffer standard-output))
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1262 (pos (marker-position standard-output)))
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1263 (prin1 object)
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1264 (put-nonduplicable-text-property
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1265 pos (marker-position standard-output) 'face face buf)))
1779
fb556d2c7344 [xemacs-hg @ 2003-11-06 05:11:15 by stephent]
stephent
parents: 1123
diff changeset
1266 (t (prin1 object))))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1267
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1268 (defvar help-symbol-regexp
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1269 (let ((sym-char "[+a-zA-Z0-9_:*]")
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1270 (sym-char-no-dash "[-+a-zA-Z0-9_:*]"))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1271 (concat "\\("
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1272 ;; a symbol with a - in it.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1273 "\\<\\(" sym-char-no-dash "+\\(-" sym-char-no-dash "+\\)+\\)\\>"
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1274 "\\|"
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1275 "`\\(" sym-char "+\\)'"
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1276 "\\)")))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1277
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1278 (defun help-symbol-run-function-1 (ev ex fun)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1279 (let ((help-sticky-window
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1280 ;; if we were called from a help buffer, make sure the new help
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1281 ;; goes in the same window.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1282 (if (and (event-buffer ev)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1283 (symbol-value-in-buffer 'help-window-config
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1284 (event-buffer ev)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1285 (event-window ev)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1286 help-sticky-window)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1287 (funcall fun (extent-property ex 'help-symbol))))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1288
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1289 (defun help-symbol-run-function (fun)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1290 (let ((ex (extent-at-event last-popup-menu-event 'help-symbol)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1291 (when ex
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1292 (help-symbol-run-function-1 last-popup-menu-event ex fun))))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1293
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1294 (defvar help-symbol-function-context-menu
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1295 '(["View %_Documentation" (help-symbol-run-function 'describe-function)]
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1296 ["Find %_Function Source" (help-symbol-run-function 'find-function)]
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1297 ["Find %_Tag" (help-symbol-run-function 'find-tag)]
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1298 ))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1299
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1300 (defvar help-symbol-variable-context-menu
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1301 '(["View %_Documentation" (help-symbol-run-function 'describe-variable)]
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1302 ["Find %_Variable Source" (help-symbol-run-function 'find-variable)]
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1303 ["Find %_Tag" (help-symbol-run-function 'find-tag)]
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1304 ))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1305
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1306 (defvar help-symbol-function-and-variable-context-menu
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1307 '(["View Function %_Documentation" (help-symbol-run-function
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1308 'describe-function)]
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1309 ["View Variable D%_ocumentation" (help-symbol-run-function
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1310 'describe-variable)]
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1311 ["Find %_Function Source" (help-symbol-run-function 'find-function)]
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1312 ["Find %_Variable Source" (help-symbol-run-function 'find-variable)]
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1313 ["Find %_Tag" (help-symbol-run-function 'find-tag)]
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1314 ))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1315
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1316 (defun frob-help-extents (buffer)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1317 ;; Look through BUFFER, starting at the buffer's point and continuing
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1318 ;; till end of file, and find documented functions and variables.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1319 ;; any such symbol found is tagged with an extent, that sets up these
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1320 ;; properties:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1321 ;; 1. mouse-face is 'highlight (so the extent gets highlighted on mouse over)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1322 ;; 2. help-symbol is the name of the symbol.
464
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1323 ;; 3. face is 'hyper-apropos-hyperlink.
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1324 ;; 4. context-menu is a list of context menu items, specific to whether
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1325 ;; the symbol is a function, variable, or both.
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1326 ;; 5. activate-function will cause the function or variable to be described,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1327 ;; replacing the existing help contents.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1328 (save-excursion
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1329 (set-buffer buffer)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1330 (let (b e name)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1331 (while (re-search-forward help-symbol-regexp nil t)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1332 (setq b (or (match-beginning 2) (match-beginning 4)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1333 (setq e (or (match-end 2) (match-end 4)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1334 (setq name (buffer-substring b e))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1335 (let* ((sym (intern-soft name))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1336 (var (and sym (boundp sym)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1337 (documentation-property sym
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1338 'variable-documentation t)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1339 (fun (and sym (fboundp sym)
2275
445bd1969ed0 [xemacs-hg @ 2004-09-15 08:30:25 by stephent]
stephent
parents: 2137
diff changeset
1340 (condition-case nil
445bd1969ed0 [xemacs-hg @ 2004-09-15 08:30:25 by stephent]
stephent
parents: 2137
diff changeset
1341 (documentation sym t)
445bd1969ed0 [xemacs-hg @ 2004-09-15 08:30:25 by stephent]
stephent
parents: 2137
diff changeset
1342 (void-function "(alias for undefined function)")
445bd1969ed0 [xemacs-hg @ 2004-09-15 08:30:25 by stephent]
stephent
parents: 2137
diff changeset
1343 (error "(unexpected error from `documention')")))))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1344 (when (or var fun)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1345 (let ((ex (make-extent b e)))
622
11502791fc1c [xemacs-hg @ 2001-06-22 01:49:57 by ben]
ben
parents: 502
diff changeset
1346 (require 'hyper-apropos)
3368
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1347
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1348 (set-extent-property ex 'mouse-face 'highlight)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1349 (set-extent-property ex 'help-symbol sym)
464
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1350 (set-extent-property ex 'face 'hyper-apropos-hyperlink)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1351 (set-extent-property
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1352 ex 'context-menu
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1353 (cond ((and var fun)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1354 help-symbol-function-and-variable-context-menu)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1355 (var help-symbol-variable-context-menu)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1356 (fun help-symbol-function-context-menu)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1357 (set-extent-property
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1358 ex 'activate-function
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1359 (if fun
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1360 #'(lambda (ev ex)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1361 (help-symbol-run-function-1 ev ex 'describe-function))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1362 #'(lambda (ev ex)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1363 (help-symbol-run-function-1 ev ex 'describe-variable))))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1364 ))))))) ;; 11 parentheses!
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1365
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1366 (defun describe-function-1 (function &optional nodoc)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1367 "This function does the work for `describe-function'."
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1368 (princ "`")
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1369 ;; (Help-princ-face function 'font-lock-function-name-face) overkill
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1370 (princ function)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1371 (princ "' is ")
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1372 (let* ((def function)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1373 aliases file-name autoload-file kbd-macro-p fndef macrop)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1374 (while (and (symbolp def) (fboundp def))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1375 (when (not (eq def function))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1376 (setq aliases
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1377 (if aliases
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1378 ;; I18N3 Need gettext due to concat
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1379 (concat aliases
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1380 (format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1381 "\n which is an alias for `%s', "
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1382 (symbol-name def)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1383 (format "an alias for `%s', " (symbol-name def)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1384 (setq def (symbol-function def)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1385 (if (and (fboundp 'compiled-function-annotation)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1386 (compiled-function-p def))
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
1387 (setq file-name (declare-fboundp (compiled-function-annotation def))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1388 (if (eq 'macro (car-safe def))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1389 (setq fndef (cdr def)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1390 file-name (and (compiled-function-p (cdr def))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1391 (fboundp 'compiled-function-annotation)
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
1392 (declare-fboundp
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
1393 (compiled-function-annotation (cdr def))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1394 macrop t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1395 (setq fndef def))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1396 (if aliases (princ aliases))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1397 (let ((int #'(lambda (string an-p macro-p)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1398 (princ (format
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1399 (gettext (concat
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1400 (cond ((commandp def)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1401 "an interactive ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1402 (an-p "an ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1403 (t "a "))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1404 "%s"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1405 (if macro-p " macro" " function")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1406 string)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1407 (cond ((or (stringp def) (vectorp def))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1408 (princ "a keyboard macro.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1409 (setq kbd-macro-p t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1410 ((subrp fndef)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1411 (funcall int "built-in" nil macrop))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1412 ((compiled-function-p fndef)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1413 (funcall int "compiled Lisp" nil macrop))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1414 ((eq (car-safe fndef) 'lambda)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1415 (funcall int "Lisp" nil macrop))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1416 ((eq (car-safe fndef) 'mocklisp)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1417 (funcall int "mocklisp" nil macrop))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1418 ((eq (car-safe def) 'autoload)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1419 (setq autoload-file (elt def 1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1420 (funcall int "autoloaded Lisp" t (elt def 4)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1421 ((and (symbolp def) (not (fboundp def)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1422 (princ "a symbol with a void (unbound) function definition."))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1423 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1424 nil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1425 (princ "\n")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1426 (if autoload-file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1427 (princ (format " -- autoloads from \"%s\"\n" autoload-file)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1428 (or file-name
3368
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1429 (setq file-name (symbol-file function)))
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1430 (when file-name
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1431 (princ " -- loaded from \"")
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1432 (if (not (bufferp standard-output))
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1433 (princ file-name)
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1434 (let ((opoint (point standard-output))
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1435 e)
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1436 (require 'hyper-apropos)
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1437 (princ file-name)
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1438 (setq e (make-extent opoint (point standard-output)
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1439 standard-output))
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1440 (set-extent-property e 'face 'hyper-apropos-hyperlink)
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1441 (set-extent-property e 'mouse-face 'highlight)
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1442 (set-extent-property e 'find-function-symbol function)))
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1443 (princ "\"\n"))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1444 (if describe-function-show-arglist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1445 (let ((arglist (function-arglist function)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1446 (when arglist
464
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1447 (require 'hyper-apropos)
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1448 (Help-princ-face arglist 'hyper-apropos-documentation)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1449 (terpri))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1450 (terpri)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1451 (cond (kbd-macro-p
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1452 (princ "These characters are executed:\n\n\t")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1453 (princ (key-description def))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1454 (cond ((setq def (key-binding def))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1455 (princ (format "\n\nwhich executes the command `%s'.\n\n"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1456 def))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1457 (describe-function-1 def))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1458 (nodoc nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1459 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1460 ;; tell the user about obsoleteness.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1461 ;; If the function is obsolete and is aliased, don't
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1462 ;; even bother to report the documentation, as a further
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1463 ;; encouragement to use the new function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1464 (let ((obsolete (function-obsoleteness-doc function))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1465 (compatible (function-compatibility-doc function)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1466 (when obsolete
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1467 (princ obsolete)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1468 (terpri)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1469 (terpri))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1470 (when compatible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1471 (princ compatible)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1472 (terpri)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1473 (terpri))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1474 (unless (and obsolete aliases)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1475 (let ((doc (function-documentation function t)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1476 (princ "Documentation:\n")
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1477 (let ((oldp (point standard-output))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1478 newp)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1479 (princ doc)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1480 (setq newp (point standard-output))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1481 (goto-char oldp standard-output)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1482 (frob-help-extents standard-output)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1483 (goto-char newp standard-output))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1484 (unless (or (equal doc "")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1485 (eq ?\n (aref doc (1- (length doc)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1486 (terpri)))))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1487
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1488 ;;; [Obnoxious, whining people who complain very LOUDLY on Usenet
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1489 ;;; are binding this to keys.]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1490 (defun describe-function-arglist (function)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1491 (interactive (list (or (function-at-point)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1492 (error "no function call at point"))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1493 (message nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1494 (message (function-arglist function)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1495
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1496 (defun variable-at-point ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1497 (ignore-errors
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1498 (with-syntax-table emacs-lisp-mode-syntax-table
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1499 (save-excursion
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1500 (or (not (zerop (skip-syntax-backward "_w")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1501 (eq (char-syntax (char-after (point))) ?w)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1502 (eq (char-syntax (char-after (point))) ?_)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1503 (forward-sexp -1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1504 (skip-chars-forward "'")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1505 (let ((obj (read (current-buffer))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1506 (and (symbolp obj) (boundp obj) obj))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1507
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1508 (defun variable-at-event (event)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1509 "Return the variable whose name is around the position of EVENT.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1510 EVENT should be a mouse event. When calling from a popup or context menu,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1511 use `last-popup-menu-event' to find out where the mouse was clicked.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1512 \(You cannot use (interactive \"e\"), unfortunately. This returns a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1513 misc-user event.)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1514
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1515 If the event contains no position, or the position is not over text, or
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1516 there is no variable around that point, nil is returned."
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1517 (if (and event (event-buffer event) (event-point event))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1518 (save-excursion
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1519 (set-buffer (event-buffer event))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1520 (goto-char (event-point event))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1521 (variable-at-point))))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1522
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1523 (defun variable-obsolete-p (variable)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1524 "Return non-nil if VARIABLE is obsolete."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1525 (not (null (get variable 'byte-obsolete-variable))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1526
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1527 (defun variable-obsoleteness-doc (variable)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1528 "If VARIABLE is obsolete, return a string describing this."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1529 (let ((obsolete (get variable 'byte-obsolete-variable)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1530 (if obsolete
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1531 (format "Obsolete; %s"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1532 (if (stringp obsolete)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1533 obsolete
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1534 (format "use `%s' instead." obsolete))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1535
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1536 (defun variable-compatible-p (variable)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1537 "Return non-nil if VARIABLE is Emacs compatible."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1538 (not (null (get variable 'byte-compatible-variable))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1539
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1540 (defun variable-compatibility-doc (variable)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1541 "If VARIABLE is Emacs compatible, return a string describing this."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1542 (let ((compatible (get variable 'byte-compatible-variable)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1543 (if compatible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1544 (format "Emacs Compatible; %s"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1545 (if (stringp compatible)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1546 compatible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1547 (format "use `%s' instead." compatible))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1548
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1549 (defun built-in-variable-doc (variable)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1550 "Return a string describing whether VARIABLE is built-in."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1551 (let ((type (built-in-variable-type variable)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1552 (case type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1553 (integer "a built-in integer variable")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1554 (const-integer "a built-in constant integer variable")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1555 (boolean "a built-in boolean variable")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1556 (const-boolean "a built-in constant boolean variable")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1557 (object "a simple built-in variable")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1558 (const-object "a simple built-in constant variable")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1559 (const-specifier "a built-in constant specifier variable")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1560 (current-buffer "a built-in buffer-local variable")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1561 (const-current-buffer "a built-in constant buffer-local variable")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1562 (default-buffer "a built-in default buffer-local variable")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1563 (selected-console "a built-in console-local variable")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1564 (const-selected-console "a built-in constant console-local variable")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1565 (default-console "a built-in default console-local variable")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1566 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1567 (if type "an unknown type of built-in variable?"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1568 "a variable declared in Lisp")))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1569
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1570 (defun describe-variable (variable)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1571 "Display the full documentation of VARIABLE (a symbol)."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1572 (interactive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1573 (let* ((v (variable-at-point))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1574 (val (let ((enable-recursive-minibuffers t))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1575 (completing-read
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1576 (if v
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1577 (format "Describe variable (default %s): " v)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1578 (gettext "Describe variable: "))
430
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
1579 obarray 'boundp t nil 'variable-history
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
1580 (symbol-name v)))))
a5df635868b2 Import from CVS: tag r21-2-23
cvs
parents: 428
diff changeset
1581 (list (intern val))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1582 (with-displaying-help-buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1583 (lambda ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1584 (let ((origvar variable)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1585 aliases)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1586 (let ((print-escape-newlines t))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1587 (princ "`")
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1588 ;; (Help-princ-face (symbol-name variable)
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 464
diff changeset
1589 ;; 'font-lock-variable-name-face) overkill
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1590 (princ (symbol-name variable))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents: 456
diff changeset
1591 (princ "' is ")
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1592 (while (variable-alias variable)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1593 (let ((newvar (variable-alias variable)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1594 (if aliases
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1595 ;; I18N3 Need gettext due to concat
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1596 (setq aliases
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1597 (concat aliases
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1598 (format "\n which is an alias for `%s',"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1599 (symbol-name newvar))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1600 (setq aliases
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1601 (format "an alias for `%s',"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1602 (symbol-name newvar))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1603 (setq variable newvar)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1604 (if aliases
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1605 (princ (format "%s" aliases)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1606 (princ (built-in-variable-doc variable))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1607 (princ ".\n")
3368
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1608 (require 'hyper-apropos)
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1609 (let ((file-name (symbol-file variable))
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1610 opoint e)
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1611 (when file-name
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1612 (princ " -- loaded from \"")
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1613 (if (not (bufferp standard-output))
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1614 (princ file-name)
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1615 (setq opoint (point standard-output))
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1616 (princ file-name)
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1617 (setq e (make-extent opoint (point standard-output)
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1618 standard-output))
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1619 (set-extent-property e 'face 'hyper-apropos-hyperlink)
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1620 (set-extent-property e 'mouse-face 'highlight)
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1621 (set-extent-property e 'find-variable-symbol variable))
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1622 (princ"\"\n")))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1623 (princ "\nValue: ")
464
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1624 (if (not (boundp variable))
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1625 (Help-princ-face "void\n" 'hyper-apropos-documentation)
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1626 (Help-prin1-face (symbol-value variable)
5aa1854ad537 Import from CVS: tag r21-2-47
cvs
parents: 462
diff changeset
1627 'hyper-apropos-documentation)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1628 (terpri))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1629 (terpri)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1630 (cond ((local-variable-p variable (current-buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1631 (let* ((void (cons nil nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1632 (def (condition-case nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1633 (default-value variable)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1634 (error void))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1635 (princ "This value is specific to the current buffer.\n")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1636 (if (local-variable-p variable nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1637 (princ "(Its value is local to each buffer.)\n"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1638 (terpri)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1639 (if (if (eq def void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1640 (boundp variable)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1641 (not (eq (symbol-value variable) def)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1642 ;; #### I18N3 doesn't localize properly!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1643 (progn (princ "Default-value: ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1644 (if (eq def void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1645 (princ "void\n")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1646 (prin1 def)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1647 (terpri))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1648 (terpri)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1649 ((local-variable-p variable (current-buffer) t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1650 (princ "Setting it would make its value buffer-local.\n\n"))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1651 (princ "Documentation:")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1652 (terpri)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1653 (let ((doc (documentation-property variable 'variable-documentation))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1654 (obsolete (variable-obsoleteness-doc origvar))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1655 (compatible (variable-compatibility-doc origvar)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1656 (when obsolete
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1657 (princ obsolete)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1658 (terpri)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1659 (terpri))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1660 (when compatible
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1661 (princ compatible)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1662 (terpri)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1663 (terpri))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1664 ;; don't bother to print anything if variable is obsolete and aliased.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1665 (when (or (not obsolete) (not aliases))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1666 (if doc
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1667 ;; note: documentation-property calls substitute-command-keys.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1668 (let ((oldp (point standard-output))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1669 newp)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1670 (princ doc)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1671 (setq newp (point standard-output))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1672 (goto-char oldp standard-output)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1673 (frob-help-extents standard-output)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1674 (goto-char newp standard-output))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1675 (princ "not documented as a variable."))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1676 (terpri)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1677 (format "variable `%s'" variable)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1678
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1679 (defun sorted-key-descriptions (keys &optional separator)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1680 "Sort and separate the key descriptions for KEYS.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1681 The sorting is done by length (shortest bindings first), and the bindings
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1682 are separated with SEPARATOR (\", \" by default)."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1683 (mapconcat 'key-description
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1684 (sort keys #'(lambda (x y)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1685 (< (length x) (length y))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1686 (or separator ", ")))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1687
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1688 (defun where-is (definition &optional insert)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1689 "Print message listing key sequences that invoke specified command.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1690 Argument is a command definition, usually a symbol with a function definition.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1691 When run interactively, it defaults to any function found by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1692 `function-at-point'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1693 If INSERT (the prefix arg) is non-nil, insert the message in the buffer."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1694 (interactive
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1695 (let ((fn (function-at-point))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1696 (enable-recursive-minibuffers t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1697 val)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1698 (setq val (read-command
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1699 (if fn (format "Where is command (default %s): " fn)
456
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 444
diff changeset
1700 "Where is command: ")
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 444
diff changeset
1701 (and fn (symbol-name fn))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1702 (list (if (equal (symbol-name val) "")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1703 fn val)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1704 current-prefix-arg)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1705 (let ((keys (where-is-internal definition)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1706 (if keys
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1707 (if insert
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1708 (princ (format "%s (%s)" (sorted-key-descriptions keys)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1709 definition) (current-buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1710 (message "%s is on %s" definition (sorted-key-descriptions keys)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1711 (if insert
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1712 (princ (format (if (commandp definition) "M-x %s RET"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1713 "M-: (%s ...)") definition) (current-buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1714 (message "%s is not on any keys" definition))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1715 nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1716
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1717 ;; `locate-library' moved to "packages.el"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1718
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1719
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1720 ;; Functions ported from C into Lisp in XEmacs
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1721
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1722 (defun describe-syntax ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1723 "Describe the syntax specifications in the syntax table.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1724 The descriptions are inserted in a buffer, which is then displayed."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1725 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1726 (with-displaying-help-buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1727 (lambda ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1728 ;; defined in syntax.el
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1729 (describe-syntax-table (syntax-table) standard-output))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1730 (format "syntax-table for %s" major-mode)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1731
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1732 (defun list-processes ()
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1733 "Display a list of all processes.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1734 \(Any processes listed as Exited or Signaled are actually eliminated
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1735 after the listing is made.)"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1736 (interactive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1737 (with-output-to-temp-buffer "*Process List*"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1738 (set-buffer standard-output)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1739 (buffer-disable-undo standard-output)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1740 (make-local-variable 'truncate-lines)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1741 (setq truncate-lines t)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1742 ;; 00000000001111111111222222222233333333334444444444
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1743 ;; 01234567890123456789012345678901234567890123456789
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1744 ;; rewritten for I18N3. This one should stay rewritten
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1745 ;; so that the dashes will line up properly.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1746 (princ "Proc Status Buffer Tty Command\n---- ------ ------ --- -------\n")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1747 (let ((tail (process-list)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1748 (while tail
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1749 (let* ((p (car tail))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1750 (pid (process-id p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1751 (s (process-status p)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1752 (setq tail (cdr tail))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1753 (princ (format "%-13s" (process-name p)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1754 (princ s)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1755 (if (and (eq s 'exit) (/= (process-exit-status p) 0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1756 (princ (format " %d" (process-exit-status p))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1757 (if (memq s '(signal exit closed))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1758 ;; Do delete-exited-processes' work
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1759 (delete-process p))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1760 (indent-to 22 1) ;####
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1761 (let ((b (process-buffer p)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1762 (cond ((not b)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1763 (princ "(none)"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1764 ((not (buffer-name b))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1765 (princ "(killed)"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1766 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1767 (princ (buffer-name b)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1768 (indent-to 37 1) ;####
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1769 (let ((tn (process-tty-name p)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1770 (cond ((not tn)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1771 (princ "(none)"))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1772 (t
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1773 (princ (format "%s" tn)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1774 (indent-to 49 1) ;####
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1775 (if (not (integerp pid))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1776 (progn
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1777 (princ "network stream connection ")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1778 (princ (car pid))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1779 (princ "@")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1780 (princ (cdr pid)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1781 (let ((cmd (process-command p)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1782 (while cmd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1783 (princ (car cmd))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1784 (setq cmd (cdr cmd))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1785 (if cmd (princ " ")))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1786 (terpri))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1787
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 430
diff changeset
1788 ;; Stop gap for 21.0 until we do help-char etc properly.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1789 (defun help-keymap-with-help-key (keymap form)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1790 "Return a copy of KEYMAP with an help-key binding according to help-char
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1791 invoking FORM like help-form. An existing binding is not overridden.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1792 If FORM is nil then no binding is made."
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1793 (let ((map (copy-keymap keymap))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1794 (key (if (characterp help-char)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1795 (vector (character-to-event help-char))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1796 help-char)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1797 (when (and form key (not (lookup-key map key)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1798 (define-key map key
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1799 `(lambda () (interactive) (help-print-help-form ,form))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1800 map))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1801
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1802 (defun help-print-help-form (form)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1803 (let ((string (eval form)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1804 (if (stringp string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1805 (with-displaying-help-buffer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1806 (insert string)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1807
3368
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1808 (defun help-find-source-or-scroll-up (&optional pos)
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1809 "Follow any cross reference to source code; if none, scroll up. "
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1810 (interactive "d")
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1811 (let ((e (extent-at pos nil 'find-function-symbol)))
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1812 (if e
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1813 (find-function (extent-property e 'find-function-symbol))
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1814 (setq e (extent-at pos nil 'find-variable-symbol))
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1815 (if e
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1816 (find-variable (extent-property e 'find-variable-symbol))
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1817 (view-scroll-lines-up 1)))))
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1818
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1819 (defun help-mouse-find-source-or-track (event)
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1820 "Follow any cross reference to source code under the mouse;
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1821 if none, call mouse-track. "
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1822 (interactive "e")
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1823 (mouse-set-point event)
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1824 (let ((e (extent-at (point) nil 'find-function-symbol)))
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1825 (if e
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1826 (find-function (extent-property e 'find-function-symbol))
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1827 (setq e (extent-at (point) nil 'find-variable-symbol))
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1828 (if e
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1829 (find-variable (extent-property e 'find-variable-symbol))
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1830 (mouse-track event)))))
959746c534f6 [xemacs-hg @ 2006-04-29 16:15:21 by aidan]
aidan
parents: 3074
diff changeset
1831
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1832 ;;; help.el ends here