annotate lisp/help-mode.el @ 40819:668787248f9b

* dired.el (dired-move-to-filename-regexp): Do not distinguish between ASCII letters and non-ASCII characters. Don't allow comma except in the form "month day, year". Don't allow space between month name and comma. Clean up the code that checks for trailing period, comma, and space. Remove now-obsolete comments, and add more commentary about Japanese dates. Always gobble up trailing spaces, instead of doing it only sometimes.
author Paul Eggert <eggert@twinsun.com>
date Wed, 07 Nov 2001 21:59:39 +0000
parents 84e66cdcffc5
children 8fa706b1026c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
1 ;;; help-mode.el --- `help-mode' used by *Help* buffers
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
2
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
3 ;; Copyright (C) 1985, 1986, 1993, 1994, 1998, 1999, 2000, 2001
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
4 ;; Free Software Foundation, Inc.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
5
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
6 ;; Maintainer: FSF
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
7 ;; Keywords: help, internal
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
8
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
10
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
14 ;; any later version.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
15
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
20
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
24 ;; Boston, MA 02111-1307, USA.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
25
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
26 ;;; Commentary:
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
27
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
28 ;; Defines `help-mode', which is the mode used by *Help* buffers, and
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
29 ;; associated support machinery, such as adding hyperlinks, etc.,
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
30
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
31 ;;; Code:
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
32
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
33 (require 'button)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
34 (eval-when-compile (require 'view))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
35
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
36 (defvar help-mode-map (make-sparse-keymap)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
37 "Keymap for help mode.")
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
38
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
39 (set-keymap-parent help-mode-map button-buffer-map)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
40
39787
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
41 (define-key help-mode-map [mouse-2] 'help-follow-mouse)
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
42 (define-key help-mode-map "\C-c\C-b" 'help-go-back)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
43 (define-key help-mode-map "\C-c\C-c" 'help-follow)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
44 ;; Documentation only, since we use minor-mode-overriding-map-alist.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
45 (define-key help-mode-map "\r" 'help-follow)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
46
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
47 (defvar help-xref-stack nil
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
48 "A stack of ways by which to return to help buffers after following xrefs.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
49 Used by `help-follow' and `help-xref-go-back'.
39787
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
50 An element looks like (POSITION FUNCTION ARGS...).
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
51 To use the element, do (apply FUNCTION ARGS) then goto the point.")
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
52 (put 'help-xref-stack 'permanent-local t)
39787
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
53 (make-variable-buffer-local 'help-xref-stack)
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
54
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
55 (defvar help-xref-stack-item nil
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
56 "An item for `help-follow' in this buffer to push onto `help-xref-stack'.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
57 The format is (FUNCTION ARGS...).")
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
58 (put 'help-xref-stack-item 'permanent-local t)
39787
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
59 (make-variable-buffer-local 'help-xref-stack-item)
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
60
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
61 (setq-default help-xref-stack nil help-xref-stack-item nil)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
62
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
63
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
64
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
65 ;; Button types used by help
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
66
40638
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
67 (define-button-type 'help-xref
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
68 'action #'help-button-action)
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
69
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
70 (defun help-button-action (button)
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
71 "Call BUTTON's help function."
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
72 (help-do-xref (button-start button)
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
73 (button-get button 'help-function)
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
74 (button-get button 'help-args)))
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
75
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
76 ;; Make some button types that all use the same naming conventions
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
77 (dolist (help-type '("function" "variable" "face"
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
78 "coding-system" "input-method" "character-set"))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
79 (define-button-type (intern (purecopy (concat "help-" help-type)))
40638
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
80 :supertype 'help-xref
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
81 'help-function (intern (concat "describe-" help-type))
40638
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
82 'help-echo (purecopy (concat "mouse-2, RET: describe this " help-type))))
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
83
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
84 ;; make some more ideosyncratic button types
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
85
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
86 (define-button-type 'help-symbol
40638
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
87 :supertype 'help-xref
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
88 'help-function #'help-xref-interned
40638
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
89 'help-echo (purecopy "mouse-2, RET: describe this symbol"))
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
90
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
91 (define-button-type 'help-back
40638
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
92 :supertype 'help-xref
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
93 'help-function #'help-xref-go-back
40638
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
94 'help-echo (purecopy "mouse-2, RET: go back to previous help buffer"))
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
95
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
96 (define-button-type 'help-info
40638
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
97 :supertype 'help-xref
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
98 'help-function #'info
40638
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
99 'help-echo (purecopy"mouse-2, RET: read this Info node"))
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
100
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
101 (define-button-type 'help-customize-variable
40638
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
102 :supertype 'help-xref
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
103 'help-function (lambda (v)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
104 (if help-xref-stack
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
105 (pop help-xref-stack))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
106 (customize-variable v))
40638
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
107 'help-echo (purecopy "mouse-2, RET: customize variable"))
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
108
39800
8f2810b5b5e8 (help-customize-face): New button-type.
Miles Bader <miles@gnu.org>
parents: 39787
diff changeset
109 (define-button-type 'help-customize-face
40638
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
110 :supertype 'help-xref
39800
8f2810b5b5e8 (help-customize-face): New button-type.
Miles Bader <miles@gnu.org>
parents: 39787
diff changeset
111 'help-function (lambda (v)
8f2810b5b5e8 (help-customize-face): New button-type.
Miles Bader <miles@gnu.org>
parents: 39787
diff changeset
112 (if help-xref-stack
8f2810b5b5e8 (help-customize-face): New button-type.
Miles Bader <miles@gnu.org>
parents: 39787
diff changeset
113 (pop help-xref-stack))
8f2810b5b5e8 (help-customize-face): New button-type.
Miles Bader <miles@gnu.org>
parents: 39787
diff changeset
114 (customize-face v))
40638
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
115 'help-echo (purecopy "mouse-2, RET: customize face"))
39800
8f2810b5b5e8 (help-customize-face): New button-type.
Miles Bader <miles@gnu.org>
parents: 39787
diff changeset
116
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
117 (define-button-type 'help-function-def
40638
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
118 :supertype 'help-xref
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
119 'help-function (lambda (fun file)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
120 (require 'find-func)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
121 ;; Don't use find-function-noselect because it follows
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
122 ;; aliases (which fails for built-in functions).
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
123 (let* ((location (find-function-search-for-symbol
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
124 fun nil file)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
125 (pop-to-buffer (car location))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
126 (goto-char (cdr location))))
40638
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
127 'help-echo (purecopy "mouse-2, RET: find function's definition"))
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
128
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
129 (define-button-type 'help-variable-def
40638
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
130 :supertype 'help-xref
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
131 'help-function (lambda (var &optional file)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
132 (let ((location
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
133 (find-variable-noselect var file)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
134 (pop-to-buffer (car location))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
135 (goto-char (cdr location))))
40638
84e66cdcffc5 (help-xref): New button type.
Miles Bader <miles@gnu.org>
parents: 40191
diff changeset
136 'help-echo (purecopy"mouse-2, RET: find variable's definition"))
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
137
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
138
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
139 ;;;###autoload
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
140 (define-derived-mode help-mode nil "Help"
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
141 "Major mode for viewing help text and navigating references in it.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
142 Entry to this mode runs the normal hook `help-mode-hook'.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
143 Commands:
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
144 \\{help-mode-map}"
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
145 (setq font-lock-defaults nil) ; font-lock would defeat xref
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
146 (view-mode)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
147 (make-local-variable 'view-no-disable-on-exit)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
148 (setq view-no-disable-on-exit t))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
149
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
150 ;;;###autoload
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
151 (defun help-mode-setup ()
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
152 (help-mode)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
153 (setq buffer-read-only nil))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
154
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
155 ;;;###autoload
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
156 (defun help-mode-finish ()
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
157 (when (eq major-mode 'help-mode)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
158 ;; View mode's read-only status of existing *Help* buffer is lost
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
159 ;; by with-output-to-temp-buffer.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
160 (toggle-read-only 1)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
161 (help-make-xrefs (current-buffer)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
162 (setq view-return-to-alist
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
163 (list (cons (selected-window) help-return-method))))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
164
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
165
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
166 ;;; Grokking cross-reference information in doc strings and
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
167 ;;; hyperlinking it.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
168
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
169 ;; This may have some scope for extension and the same or something
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
170 ;; similar should be done for widget doc strings, which currently use
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
171 ;; another mechanism.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
172
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
173 (defcustom help-highlight-p t
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
174 "*If non-nil, `help-make-xrefs' highlight cross-references.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
175 Under a window system it highlights them with face defined by
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
176 `help-highlight-face'."
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
177 :group 'help
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
178 :version "20.3"
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
179 :type 'boolean)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
180
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
181 (defcustom help-highlight-face 'underline
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
182 "Face used by `help-make-xrefs' to highlight cross-references.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
183 Must be previously-defined."
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
184 :group 'help
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
185 :version "20.3"
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
186 :type 'face)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
187
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
188 (defvar help-back-label (purecopy "[back]")
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
189 "Label to use by `help-make-xrefs' for the go-back reference.")
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
190
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
191 (defconst help-xref-symbol-regexp
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
192 (purecopy (concat "\\(\\<\\(\\(variable\\|option\\)\\|"
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
193 "\\(function\\|command\\)\\|"
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
194 "\\(face\\)\\|"
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
195 "\\(symbol\\)\\|"
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
196 "\\(source \\(?:code \\)?\\(?:of\\|for\\)\\)\\)\\s-+\\)?"
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
197 ;; Note starting with word-syntax character:
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
198 "`\\(\\sw\\(\\sw\\|\\s_\\)+\\)'"))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
199 "Regexp matching doc string references to symbols.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
200
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
201 The words preceding the quoted symbol can be used in doc strings to
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
202 distinguish references to variables, functions and symbols.")
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
203
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
204 (defconst help-xref-mule-regexp nil
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
205 "Regexp matching doc string references to MULE-related keywords.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
206
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
207 It is usually nil, and is temporarily bound to an appropriate regexp
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
208 when help commands related to multilingual environment (e.g.,
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
209 `describe-coding-system') are invoked.")
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
210
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
211
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
212 (defconst help-xref-info-regexp
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
213 (purecopy "\\<[Ii]nfo[ \t\n]+node[ \t\n]+`\\([^']+\\)'")
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
214 "Regexp matching doc string references to an Info node.")
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
215
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
216 ;;;###autoload
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
217 (defun help-setup-xref (item interactive-p)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
218 "Invoked from commands using the \"*Help*\" buffer to install some xref info.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
219
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
220 ITEM is a (FUNCTION . ARGS) pair appropriate for recreating the help
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
221 buffer after following a reference. INTERACTIVE-P is non-nil if the
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
222 calling command was invoked interactively. In this case the stack of
39787
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
223 items for help buffer \"back\" buttons is cleared.
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
224
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
225 This should be called very early, before the output buffer is cleared,
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
226 because we want to record the \"previous\" position of point so we can
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
227 restore it properly when going back."
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
228 (with-current-buffer (help-buffer)
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
229 (if interactive-p
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
230 ;; Why do we want to prevent the user from going back ?? -stef
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
231 (setq help-xref-stack nil)
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
232 (when help-xref-stack-item
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
233 (push (cons (point) help-xref-stack-item) help-xref-stack)))
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
234 (setq help-xref-stack-item item)))
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
235
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
236 (defvar help-xref-following nil
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
237 "Non-nil when following a help cross-reference.")
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
238
39787
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
239 (defun help-buffer ()
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
240 (buffer-name ;for with-output-to-temp-buffer
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
241 (if help-xref-following
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
242 (current-buffer)
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
243 (get-buffer-create "*Help*"))))
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
244
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
245 ;;;###autoload
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
246 (defun help-make-xrefs (&optional buffer)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
247 "Parse and hyperlink documentation cross-references in the given BUFFER.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
248
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
249 Find cross-reference information in a buffer and, if
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
250 `help-highlight-p' is non-nil, highlight it with face defined by
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
251 `help-highlight-face'; activate such cross references for selection
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
252 with `help-follow'. Cross-references have the canonical form `...'
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
253 and the type of reference may be disambiguated by the preceding
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
254 word(s) used in `help-xref-symbol-regexp'.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
255
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
256 If the variable `help-xref-mule-regexp' is non-nil, find also
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
257 cross-reference information related to multilingual environment
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
258 \(e.g., coding-systems). This variable is also used to disambiguate
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
259 the type of reference as the same way as `help-xref-symbol-regexp'.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
260
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
261 A special reference `back' is made to return back through a stack of
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
262 help buffers. Variable `help-back-label' specifies the text for
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
263 that."
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
264 (interactive "b")
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
265 (save-excursion
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
266 (set-buffer (or buffer (current-buffer)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
267 (goto-char (point-min))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
268 ;; Skip the header-type info, though it might be useful to parse
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
269 ;; it at some stage (e.g. "function in `library'").
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
270 (forward-paragraph)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
271 (let ((old-modified (buffer-modified-p)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
272 (let ((stab (syntax-table))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
273 (case-fold-search t)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
274 (inhibit-read-only t))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
275 (set-syntax-table emacs-lisp-mode-syntax-table)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
276 ;; The following should probably be abstracted out.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
277 (unwind-protect
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
278 (progn
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
279 ;; Info references
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
280 (save-excursion
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
281 (while (re-search-forward help-xref-info-regexp nil t)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
282 (let ((data (match-string 1)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
283 (save-match-data
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
284 (unless (string-match "^([^)]+)" data)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
285 (setq data (concat "(emacs)" data))))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
286 (help-xref-button 1 'help-info data))))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
287 ;; Mule related keywords. Do this before trying
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
288 ;; `help-xref-symbol-regexp' because some of Mule
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
289 ;; keywords have variable or function definitions.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
290 (if help-xref-mule-regexp
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
291 (save-excursion
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
292 (while (re-search-forward help-xref-mule-regexp nil t)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
293 (let* ((data (match-string 7))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
294 (sym (intern-soft data)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
295 (cond
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
296 ((match-string 3) ; coding system
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
297 (and sym (coding-system-p sym)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
298 (help-xref-button 6 'help-coding-system sym)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
299 ((match-string 4) ; input method
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
300 (and (assoc data input-method-alist)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
301 (help-xref-button 7 'help-input-method data)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
302 ((or (match-string 5) (match-string 6)) ; charset
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
303 (and sym (charsetp sym)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
304 (help-xref-button 7 'help-character-set sym)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
305 ((assoc data input-method-alist)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
306 (help-xref-button 7 'help-character-set data))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
307 ((and sym (coding-system-p sym))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
308 (help-xref-button 7 'help-coding-system sym))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
309 ((and sym (charsetp sym))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
310 (help-xref-button 7 'help-character-set sym)))))))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
311 ;; Quoted symbols
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
312 (save-excursion
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
313 (while (re-search-forward help-xref-symbol-regexp nil t)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
314 (let* ((data (match-string 8))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
315 (sym (intern-soft data)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
316 (if sym
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
317 (cond
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
318 ((match-string 3) ; `variable' &c
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
319 (and (boundp sym) ; `variable' doesn't ensure
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
320 ; it's actually bound
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
321 (help-xref-button 8 'help-variable sym)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
322 ((match-string 4) ; `function' &c
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
323 (and (fboundp sym) ; similarly
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
324 (help-xref-button 8 'help-function sym)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
325 ((match-string 5) ; `face'
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
326 (and (facep sym)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
327 (help-xref-button 8 'help-face sym)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
328 ((match-string 6)) ; nothing for `symbol'
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
329 ((match-string 7)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
330 ;; this used:
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
331 ;; #'(lambda (arg)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
332 ;; (let ((location
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
333 ;; (find-function-noselect arg)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
334 ;; (pop-to-buffer (car location))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
335 ;; (goto-char (cdr location))))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
336 (help-xref-button 8 'help-function-def sym))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
337 ((and (boundp sym) (fboundp sym))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
338 ;; We can't intuit whether to use the
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
339 ;; variable or function doc -- supply both.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
340 (help-xref-button 8 'help-symbol sym))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
341 ((boundp sym)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
342 (help-xref-button 8 'help-variable sym))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
343 ((fboundp sym)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
344 (help-xref-button 8 'help-function sym))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
345 ((facep sym)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
346 (help-xref-button 8 'help-face sym)))))))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
347 ;; An obvious case of a key substitution:
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
348 (save-excursion
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
349 (while (re-search-forward
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
350 ;; Assume command name is only word characters
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
351 ;; and dashes to get things like `use M-x foo.'.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
352 "\\<M-x\\s-+\\(\\sw\\(\\sw\\|-\\)+\\)" nil t)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
353 (let ((sym (intern-soft (match-string 1))))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
354 (if (fboundp sym)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
355 (help-xref-button 1 'help-function sym)))))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
356 ;; Look for commands in whole keymap substitutions:
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
357 (save-excursion
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
358 ;; Make sure to find the first keymap.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
359 (goto-char (point-min))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
360 ;; Find a header and the column at which the command
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
361 ;; name will be found.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
362 (while (re-search-forward "^key +binding\n\\(-+ +\\)-+\n\n"
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
363 nil t)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
364 (let ((col (- (match-end 1) (match-beginning 1))))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
365 (while
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
366 ;; Ignore single blank lines in table, but not
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
367 ;; double ones, which should terminate it.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
368 (and (not (looking-at "\n\\s-*\n"))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
369 (progn
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
370 (and (eolp) (forward-line))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
371 (end-of-line)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
372 (skip-chars-backward "^\t\n")
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
373 (if (and (>= (current-column) col)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
374 (looking-at "\\(\\sw\\|-\\)+$"))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
375 (let ((sym (intern-soft (match-string 0))))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
376 (if (fboundp sym)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
377 (help-xref-button 0 'help-function sym))))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
378 (zerop (forward-line)))))))))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
379 (set-syntax-table stab))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
380 ;; Delete extraneous newlines at the end of the docstring
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
381 (goto-char (point-max))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
382 (while (and (not (bobp)) (bolp))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
383 (delete-char -1))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
384 ;; Make a back-reference in this buffer if appropriate.
39787
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
385 (when help-xref-stack
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
386 (insert "\n\n")
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
387 (help-insert-xref-button help-back-label 'help-back
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
388 (current-buffer))))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
389 ;; View mode steals RET from us.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
390 (set (make-local-variable 'minor-mode-overriding-map-alist)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
391 (list (cons 'view-mode
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
392 (let ((map (make-sparse-keymap)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
393 (set-keymap-parent map view-mode-map)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
394 (define-key map "\r" 'help-follow)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
395 map))))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
396 (set-buffer-modified-p old-modified))))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
397
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
398 ;;;###autoload
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
399 (defun help-xref-button (match-number type &rest args)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
400 "Make a hyperlink for cross-reference text previously matched.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
401 MATCH-NUMBER is the subexpression of interest in the last matched
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
402 regexp. TYPE is the type of button to use. Any remaining arguments are
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
403 passed to the button's help-function when it is invoked.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
404 See `help-make-xrefs'."
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
405 ;; Don't mung properties we've added specially in some instances.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
406 (unless (button-at (match-beginning match-number))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
407 (make-text-button (match-beginning match-number)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
408 (match-end match-number)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
409 'type type 'help-args args)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
410
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
411 ;;;###autoload
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
412 (defun help-insert-xref-button (string type &rest args)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
413 "Insert STRING and make a hyperlink from cross-reference text on it.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
414 TYPE is the type of button to use. Any remaining arguments are passed
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
415 to the button's help-function when it is invoked.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
416 See `help-make-xrefs'."
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
417 (unless (button-at (point))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
418 (insert-text-button string 'type type 'help-args args)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
419
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
420 ;;;###autoload
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
421 (defun help-xref-on-pp (from to)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
422 "Add xrefs for symbols in `pp's output between FROM and TO."
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
423 (let ((ost (syntax-table)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
424 (unwind-protect
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
425 (save-excursion
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
426 (save-restriction
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
427 (set-syntax-table emacs-lisp-mode-syntax-table)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
428 (narrow-to-region from to)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
429 (goto-char (point-min))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
430 (while (not (eobp))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
431 (cond
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
432 ((looking-at "\"") (forward-sexp 1))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
433 ((looking-at "#<") (search-forward ">" nil 'move))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
434 ((looking-at "\\(\\(\\sw\\|\\s_\\)+\\)")
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
435 (let* ((sym (intern-soft (match-string 1)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
436 (type (cond ((fboundp sym) 'help-function)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
437 ((or (memq sym '(t nil))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
438 (keywordp sym))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
439 nil)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
440 ((and sym (boundp sym))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
441 'help-variable))))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
442 (when type (help-xref-button 1 type sym)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
443 (goto-char (match-end 1)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
444 (t (forward-char 1))))))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
445 (set-syntax-table ost))))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
446
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
447
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
448 ;; Additional functions for (re-)creating types of help buffers.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
449 (defun help-xref-interned (symbol)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
450 "Follow a hyperlink which appeared to be an arbitrary interned SYMBOL.
39787
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
451 Both variable, function and face documentation are extracted into a single
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
452 help buffer."
39787
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
453 (with-current-buffer (help-buffer)
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
454 ;; Push the previous item on the stack before clobbering the output buffer.
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
455 (help-setup-xref nil nil)
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
456 (let ((facedoc (when (facep symbol)
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
457 ;; Don't record the current entry in the stack.
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
458 (setq help-xref-stack-item nil)
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
459 (describe-face symbol)))
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
460 (fdoc (when (fboundp symbol)
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
461 ;; Don't record the current entry in the stack.
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
462 (setq help-xref-stack-item nil)
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
463 (describe-function symbol)))
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
464 (sdoc (when (boundp symbol)
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
465 ;; Don't record the current entry in the stack.
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
466 (setq help-xref-stack-item nil)
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
467 (describe-variable symbol))))
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
468 (cond
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
469 (sdoc
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
470 ;; We now have a help buffer on the variable.
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
471 ;; Insert the function and face text before it.
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
472 (when (or fdoc facedoc)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
473 (goto-char (point-min))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
474 (let ((inhibit-read-only t))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
475 (when fdoc
39787
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
476 (insert fdoc "\n\n")
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
477 (when facedoc
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
478 (insert (make-string 30 ?-) "\n\n" (symbol-name symbol)
39787
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
479 " is also a " "face." "\n\n")))
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
480 (when facedoc
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
481 (insert facedoc "\n\n"))
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
482 (insert (make-string 30 ?-) "\n\n" (symbol-name symbol)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
483 " is also a " "variable." "\n\n"))
39787
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
484 ;; Don't record the `describe-variable' item in the stack.
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
485 (setq help-xref-stack-item nil)
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
486 (help-setup-xref (list #'help-xref-interned symbol) nil)))
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
487 (fdoc
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
488 ;; We now have a help buffer on the function.
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
489 ;; Insert face text before it.
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
490 (when facedoc
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
491 (goto-char (point-max))
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
492 (let ((inhibit-read-only t))
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
493 (insert "\n\n" (make-string 30 ?-) "\n\n" (symbol-name symbol)
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
494 " is also a " "face." "\n\n" facedoc))
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
495 ;; Don't record the `describe-function' item in the stack.
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
496 (setq help-xref-stack-item nil)
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
497 (help-setup-xref (list #'help-xref-interned symbol) nil)))))))
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
498
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
499
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
500 ;;; Navigation/hyperlinking with xrefs
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
501
39787
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
502 (defun help-follow-mouse (click)
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
503 "Follow the cross-reference that you CLICK on."
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
504 (interactive "e")
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
505 (let* ((start (event-start click))
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
506 (window (car start))
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
507 (pos (car (cdr start))))
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
508 (with-current-buffer (window-buffer window)
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
509 (help-follow pos))))
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
510
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
511 (defun help-xref-go-back (buffer)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
512 "From BUFFER, go back to previous help buffer text using `help-xref-stack'."
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
513 (let (item position method args)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
514 (with-current-buffer buffer
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
515 (when help-xref-stack
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
516 (setq item (pop help-xref-stack)
39787
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
517 ;; Clear the current item so that it won't get pushed
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
518 ;; by the function we're about to call. TODO: We could also
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
519 ;; push it onto a "forward" stack and add a `forw' button.
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
520 help-xref-stack-item nil
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
521 position (car item)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
522 method (cadr item)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
523 args (cddr item))))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
524 (apply method args)
39787
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
525 ;; FIXME: are we sure we're in the right buffer ?
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
526 (goto-char position)))
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
527
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
528 (defun help-go-back ()
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
529 "Invoke the [back] button (if any) in the Help mode buffer."
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
530 (interactive)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
531 (let ((back-button (button-at (1- (point-max)))))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
532 (if back-button
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
533 (button-activate back-button)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
534 (error "No [back] button"))))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
535
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
536 (defun help-do-xref (pos function args)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
537 "Call the help cross-reference function FUNCTION with args ARGS.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
538 Things are set up properly so that the resulting help-buffer has
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
539 a proper [back] button."
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
540 ;; There is a reference at point. Follow it.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
541 (let ((help-xref-following t))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
542 (apply function args)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
543
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
544 (defun help-follow (&optional pos)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
545 "Follow cross-reference at POS, defaulting to point.
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
546
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
547 For the cross-reference format, see `help-make-xrefs'."
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
548 (interactive "d")
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
549 (unless pos
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
550 (setq pos (point)))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
551 (unless (push-button pos)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
552 ;; check if the symbol under point is a function or variable
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
553 (let ((sym
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
554 (intern
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
555 (save-excursion
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
556 (goto-char pos) (skip-syntax-backward "w_")
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
557 (buffer-substring (point)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
558 (progn (skip-syntax-forward "w_")
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
559 (point)))))))
39787
b44e34df3fa2 (help-buffer): New function.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39727
diff changeset
560 (when (or (boundp sym) (fboundp sym) (facep sym))
39727
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
561 (help-do-xref pos #'help-xref-interned (list sym))))))
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
562
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
563
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
564 (provide 'help-mode)
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
565
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
566 ;;; help-mode.el ends here
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
567
3806fe844742 New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff changeset
568