Mercurial > emacs
annotate lisp/help-mode.el @ 39764:fb28cd06b2f6
(copyright): Add final \n.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Thu, 11 Oct 2001 01:50:43 +0000 |
parents | 3806fe844742 |
children | b44e34df3fa2 |
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 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
41 (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
|
42 (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
|
43 ;; 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
|
44 (define-key help-mode-map "\r" 'help-follow) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
45 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
46 (defvar help-xref-stack nil |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
47 "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
|
48 Used by `help-follow' and `help-xref-go-back'. |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
49 An element looks like (POSITION FUNCTION ARGS...), where POSITION is |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
50 `(POINT . BUFFER-NAME)'. |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
51 To use the element, do (apply FUNCTION ARGS) then goto the point in |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
52 the named buffer.") |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
53 (put 'help-xref-stack 'permanent-local t) |
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) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
59 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
60 (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
|
61 |
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 ;; Button types used by help |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
65 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
66 ;; 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
|
67 (dolist (help-type '("function" "variable" "face" |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
68 "coding-system" "input-method" "character-set")) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
69 (define-button-type (intern (purecopy (concat "help-" help-type))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
70 'help-function (intern (concat "describe-" help-type)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
71 'help-echo (purecopy (concat "mouse-2, RET: describe this " help-type)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
72 'action #'help-button-action)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
73 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
74 ;; make some more ideosyncratic button types |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
75 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
76 (define-button-type 'help-symbol |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
77 'help-function #'help-xref-interned |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
78 'help-echo (purecopy "mouse-2, RET: describe this symbol") |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
79 'action #'help-button-action) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
80 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
81 (define-button-type 'help-back |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
82 'help-function #'help-xref-go-back |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
83 'help-echo (purecopy "mouse-2, RET: go back to previous help buffer") |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
84 'action #'help-button-action) |
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-info |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
87 'help-function #'info |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
88 'help-echo (purecopy"mouse-2, RET: read this Info node") |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
89 'action #'help-button-action) |
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-customize-variable |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
92 'help-function (lambda (v) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
93 (if help-xref-stack |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
94 (pop help-xref-stack)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
95 (customize-variable v)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
96 'help-echo (purecopy "mouse-2, RET: customize variable") |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
97 'action #'help-button-action) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
98 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
99 (define-button-type 'help-function-def |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
100 'help-function (lambda (fun file) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
101 (require 'find-func) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
102 ;; 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
|
103 ;; aliases (which fails for built-in functions). |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
104 (let* ((location (find-function-search-for-symbol |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
105 fun nil file))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
106 (pop-to-buffer (car location)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
107 (goto-char (cdr location)))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
108 'help-echo (purecopy "mouse-2, RET: find function's definition") |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
109 'action #'help-button-action) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
110 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
111 (define-button-type 'help-variable-def |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
112 'help-function (lambda (var &optional file) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
113 (let ((location |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
114 (find-variable-noselect var file))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
115 (pop-to-buffer (car location)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
116 (goto-char (cdr location)))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
117 'help-echo (purecopy"mouse-2, RET: find variable's definition") |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
118 'action #'help-button-action) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
119 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
120 (defun help-button-action (button) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
121 "Call BUTTON's help function." |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
122 (help-do-xref (button-start button) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
123 (button-get button 'help-function) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
124 (button-get button 'help-args))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
125 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
126 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
127 ;;;###autoload |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
128 (define-derived-mode help-mode nil "Help" |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
129 "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
|
130 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
|
131 Commands: |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
132 \\{help-mode-map}" |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
133 (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
|
134 (view-mode) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
135 (make-local-variable 'view-no-disable-on-exit) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
136 (setq view-no-disable-on-exit t)) |
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 ;;;###autoload |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
139 (defun help-mode-setup () |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
140 (help-mode) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
141 (setq buffer-read-only nil)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
142 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
143 ;;;###autoload |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
144 (defun help-mode-finish () |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
145 (when (eq major-mode 'help-mode) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
146 ;; 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
|
147 ;; by with-output-to-temp-buffer. |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
148 (toggle-read-only 1) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
149 (help-make-xrefs (current-buffer))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
150 (setq view-return-to-alist |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
151 (list (cons (selected-window) help-return-method)))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
152 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
153 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
154 ;;; Grokking cross-reference information in doc strings and |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
155 ;;; hyperlinking it. |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
156 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
157 ;; 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
|
158 ;; 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
|
159 ;; another mechanism. |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
160 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
161 (defcustom help-highlight-p t |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
162 "*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
|
163 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
|
164 `help-highlight-face'." |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
165 :group 'help |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
166 :version "20.3" |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
167 :type 'boolean) |
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 (defcustom help-highlight-face 'underline |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
170 "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
|
171 Must be previously-defined." |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
172 :group 'help |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
173 :version "20.3" |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
174 :type 'face) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
175 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
176 (defvar help-back-label (purecopy "[back]") |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
177 "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
|
178 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
179 (defconst help-xref-symbol-regexp |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
180 (purecopy (concat "\\(\\<\\(\\(variable\\|option\\)\\|" |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
181 "\\(function\\|command\\)\\|" |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
182 "\\(face\\)\\|" |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
183 "\\(symbol\\)\\|" |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
184 "\\(source \\(?:code \\)?\\(?:of\\|for\\)\\)\\)\\s-+\\)?" |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
185 ;; Note starting with word-syntax character: |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
186 "`\\(\\sw\\(\\sw\\|\\s_\\)+\\)'")) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
187 "Regexp matching doc string references to symbols. |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
188 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
189 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
|
190 distinguish references to variables, functions and symbols.") |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
191 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
192 (defconst help-xref-mule-regexp nil |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
193 "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
|
194 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
195 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
|
196 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
|
197 `describe-coding-system') are invoked.") |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
198 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
199 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
200 (defconst help-xref-info-regexp |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
201 (purecopy "\\<[Ii]nfo[ \t\n]+node[ \t\n]+`\\([^']+\\)'") |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
202 "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
|
203 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
204 ;;;###autoload |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
205 (defun help-setup-xref (item interactive-p) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
206 "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
|
207 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
208 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
|
209 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
|
210 calling command was invoked interactively. In this case the stack of |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
211 items for help buffer \"back\" buttons is cleared." |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
212 (if interactive-p |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
213 (setq help-xref-stack nil)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
214 (setq help-xref-stack-item item)) |
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 (defvar help-xref-following nil |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
217 "Non-nil when following a help cross-reference.") |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
218 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
219 ;;;###autoload |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
220 (defun help-make-xrefs (&optional buffer) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
221 "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
|
222 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
223 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
|
224 `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
|
225 `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
|
226 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
|
227 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
|
228 word(s) used in `help-xref-symbol-regexp'. |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
229 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
230 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
|
231 cross-reference information related to multilingual environment |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
232 \(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
|
233 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
|
234 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
235 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
|
236 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
|
237 that." |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
238 (interactive "b") |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
239 (save-excursion |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
240 (set-buffer (or buffer (current-buffer))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
241 (goto-char (point-min)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
242 ;; 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
|
243 ;; 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
|
244 (forward-paragraph) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
245 (let ((old-modified (buffer-modified-p))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
246 (let ((stab (syntax-table)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
247 (case-fold-search t) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
248 (inhibit-read-only t)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
249 (set-syntax-table emacs-lisp-mode-syntax-table) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
250 ;; The following should probably be abstracted out. |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
251 (unwind-protect |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
252 (progn |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
253 ;; Info references |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
254 (save-excursion |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
255 (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
|
256 (let ((data (match-string 1))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
257 (save-match-data |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
258 (unless (string-match "^([^)]+)" data) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
259 (setq data (concat "(emacs)" data)))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
260 (help-xref-button 1 'help-info data)))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
261 ;; Mule related keywords. Do this before trying |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
262 ;; `help-xref-symbol-regexp' because some of Mule |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
263 ;; keywords have variable or function definitions. |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
264 (if help-xref-mule-regexp |
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 (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
|
267 (let* ((data (match-string 7)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
268 (sym (intern-soft data))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
269 (cond |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
270 ((match-string 3) ; coding system |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
271 (and sym (coding-system-p sym) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
272 (help-xref-button 6 'help-coding-system sym))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
273 ((match-string 4) ; input method |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
274 (and (assoc data input-method-alist) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
275 (help-xref-button 7 'help-input-method data))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
276 ((or (match-string 5) (match-string 6)) ; charset |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
277 (and sym (charsetp sym) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
278 (help-xref-button 7 'help-character-set sym))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
279 ((assoc data input-method-alist) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
280 (help-xref-button 7 'help-character-set data)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
281 ((and sym (coding-system-p sym)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
282 (help-xref-button 7 'help-coding-system sym)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
283 ((and sym (charsetp sym)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
284 (help-xref-button 7 'help-character-set sym))))))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
285 ;; Quoted symbols |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
286 (save-excursion |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
287 (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
|
288 (let* ((data (match-string 8)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
289 (sym (intern-soft data))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
290 (if sym |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
291 (cond |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
292 ((match-string 3) ; `variable' &c |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
293 (and (boundp sym) ; `variable' doesn't ensure |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
294 ; it's actually bound |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
295 (help-xref-button 8 'help-variable sym))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
296 ((match-string 4) ; `function' &c |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
297 (and (fboundp sym) ; similarly |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
298 (help-xref-button 8 'help-function sym))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
299 ((match-string 5) ; `face' |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
300 (and (facep sym) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
301 (help-xref-button 8 'help-face sym))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
302 ((match-string 6)) ; nothing for `symbol' |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
303 ((match-string 7) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
304 ;; this used: |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
305 ;; #'(lambda (arg) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
306 ;; (let ((location |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
307 ;; (find-function-noselect arg))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
308 ;; (pop-to-buffer (car location)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
309 ;; (goto-char (cdr location)))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
310 (help-xref-button 8 'help-function-def sym)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
311 ((and (boundp sym) (fboundp sym)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
312 ;; We can't intuit whether to use the |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
313 ;; variable or function doc -- supply both. |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
314 (help-xref-button 8 'help-symbol sym)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
315 ((boundp sym) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
316 (help-xref-button 8 'help-variable sym)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
317 ((fboundp sym) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
318 (help-xref-button 8 'help-function sym)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
319 ((facep sym) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
320 (help-xref-button 8 'help-face sym))))))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
321 ;; An obvious case of a key substitution: |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
322 (save-excursion |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
323 (while (re-search-forward |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
324 ;; Assume command name is only word characters |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
325 ;; 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
|
326 "\\<M-x\\s-+\\(\\sw\\(\\sw\\|-\\)+\\)" nil t) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
327 (let ((sym (intern-soft (match-string 1)))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
328 (if (fboundp sym) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
329 (help-xref-button 1 'help-function sym))))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
330 ;; Look for commands in whole keymap substitutions: |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
331 (save-excursion |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
332 ;; Make sure to find the first keymap. |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
333 (goto-char (point-min)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
334 ;; 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
|
335 ;; name will be found. |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
336 (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
|
337 nil t) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
338 (let ((col (- (match-end 1) (match-beginning 1)))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
339 (while |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
340 ;; Ignore single blank lines in table, but not |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
341 ;; double ones, which should terminate it. |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
342 (and (not (looking-at "\n\\s-*\n")) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
343 (progn |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
344 (and (eolp) (forward-line)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
345 (end-of-line) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
346 (skip-chars-backward "^\t\n") |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
347 (if (and (>= (current-column) col) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
348 (looking-at "\\(\\sw\\|-\\)+$")) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
349 (let ((sym (intern-soft (match-string 0)))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
350 (if (fboundp sym) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
351 (help-xref-button 0 'help-function sym)))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
352 (zerop (forward-line))))))))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
353 (set-syntax-table stab)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
354 ;; 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
|
355 (goto-char (point-max)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
356 (while (and (not (bobp)) (bolp)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
357 (delete-char -1)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
358 ;; Make a back-reference in this buffer if appropriate. |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
359 (when (and help-xref-following help-xref-stack) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
360 (insert "\n\n") |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
361 (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
|
362 (current-buffer)))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
363 ;; View mode steals RET from us. |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
364 (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
|
365 (list (cons 'view-mode |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
366 (let ((map (make-sparse-keymap))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
367 (set-keymap-parent map view-mode-map) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
368 (define-key map "\r" 'help-follow) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
369 map)))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
370 (set-buffer-modified-p old-modified)))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
371 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
372 ;;;###autoload |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
373 (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
|
374 "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
|
375 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
|
376 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
|
377 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
|
378 See `help-make-xrefs'." |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
379 ;; 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
|
380 (unless (button-at (match-beginning match-number)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
381 (make-text-button (match-beginning match-number) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
382 (match-end match-number) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
383 'type type 'help-args args))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
384 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
385 ;;;###autoload |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
386 (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
|
387 "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
|
388 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
|
389 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
|
390 See `help-make-xrefs'." |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
391 (unless (button-at (point)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
392 (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
|
393 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
394 ;;;###autoload |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
395 (defun help-xref-on-pp (from to) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
396 "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
|
397 (let ((ost (syntax-table))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
398 (unwind-protect |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
399 (save-excursion |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
400 (save-restriction |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
401 (set-syntax-table emacs-lisp-mode-syntax-table) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
402 (narrow-to-region from to) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
403 (goto-char (point-min)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
404 (while (not (eobp)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
405 (cond |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
406 ((looking-at "\"") (forward-sexp 1)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
407 ((looking-at "#<") (search-forward ">" nil 'move)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
408 ((looking-at "\\(\\(\\sw\\|\\s_\\)+\\)") |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
409 (let* ((sym (intern-soft (match-string 1))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
410 (type (cond ((fboundp sym) 'help-function) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
411 ((or (memq sym '(t nil)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
412 (keywordp sym)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
413 nil) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
414 ((and sym (boundp sym)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
415 'help-variable)))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
416 (when type (help-xref-button 1 type sym))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
417 (goto-char (match-end 1))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
418 (t (forward-char 1)))))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
419 (set-syntax-table ost)))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
420 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
421 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
422 ;; 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
|
423 (defun help-xref-interned (symbol) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
424 "Follow a hyperlink which appeared to be an arbitrary interned SYMBOL. |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
425 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
426 Both variable and function documentation are extracted into a single |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
427 help buffer." |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
428 (let ((fdoc (when (fboundp symbol) (describe-function symbol))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
429 (facedoc (when (facep symbol) (describe-face symbol)))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
430 (when (or (boundp symbol) (not fdoc)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
431 (describe-variable symbol) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
432 ;; We now have a help buffer on the variable. Insert the function |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
433 ;; text before it. |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
434 (when (or fdoc facedoc) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
435 (with-current-buffer "*Help*" |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
436 (goto-char (point-min)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
437 (let ((inhibit-read-only t)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
438 (when fdoc |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
439 (insert fdoc "\n\n")) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
440 (when facedoc |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
441 (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
|
442 " is also a " "face." "\n\n" facedoc "\n\n")) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
443 (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
|
444 " is also a " "variable." "\n\n")) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
445 (help-setup-xref (list #'help-xref-interned symbol) nil)))))) |
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 ;;; Navigation/hyperlinking with xrefs |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
449 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
450 (defun help-xref-go-back (buffer) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
451 "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
|
452 (let (item position method args) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
453 (with-current-buffer buffer |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
454 (when help-xref-stack |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
455 (setq help-xref-stack (cdr help-xref-stack)) ; due to help-follow |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
456 (setq item (pop help-xref-stack) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
457 position (car item) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
458 method (cadr item) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
459 args (cddr item)))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
460 (apply method args) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
461 ;; We assume that the buffer we just recreated has the saved name, |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
462 ;; which might not always be true. |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
463 (when (get-buffer (cdr position)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
464 (with-current-buffer (cdr position) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
465 (goto-char (car position)))))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
466 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
467 (defun help-go-back () |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
468 "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
|
469 (interactive) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
470 (let ((back-button (button-at (1- (point-max))))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
471 (if back-button |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
472 (button-activate back-button) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
473 (error "No [back] button")))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
474 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
475 (defun help-do-xref (pos function args) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
476 "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
|
477 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
|
478 a proper [back] button." |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
479 (setq help-xref-stack (cons (cons (cons pos (buffer-name)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
480 help-xref-stack-item) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
481 help-xref-stack)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
482 (setq help-xref-stack-item nil) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
483 ;; There is a reference at point. Follow it. |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
484 (let ((help-xref-following t)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
485 (apply function args))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
486 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
487 (defun help-follow (&optional pos) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
488 "Follow cross-reference at POS, defaulting to point. |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
489 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
490 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
|
491 (interactive "d") |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
492 (unless pos |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
493 (setq pos (point))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
494 (unless (push-button pos) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
495 ;; 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
|
496 (let ((sym |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
497 (intern |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
498 (save-excursion |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
499 (goto-char pos) (skip-syntax-backward "w_") |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
500 (buffer-substring (point) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
501 (progn (skip-syntax-forward "w_") |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
502 (point))))))) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
503 (when (or (boundp sym) (fboundp sym)) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
504 (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
|
505 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
506 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
507 (provide 'help-mode) |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
508 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
509 ;;; help-mode.el ends here |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
510 |
3806fe844742
New file, contents mostly from `help.el'.
Miles Bader <miles@gnu.org>
parents:
diff
changeset
|
511 |