comparison lisp/help-mode.el @ 40638:84e66cdcffc5

(help-xref): New button type. (help-function, help-variable, help-face, help-coding-system) (help-input-method, help-character-set, help-type, help-symbol) (help-back, help-info, help-customize-variable, help-customize-face) (help-function-def, help-variable-def): Use it as a supertype. Remove `action' property.
author Miles Bader <miles@gnu.org>
date Fri, 02 Nov 2001 05:49:48 +0000
parents 296982d27c41
children 8fa706b1026c
comparison
equal deleted inserted replaced
40637:9b6f792026b9 40638:84e66cdcffc5
62 62
63 63
64 64
65 ;; Button types used by help 65 ;; Button types used by help
66 66
67 (define-button-type 'help-xref
68 'action #'help-button-action)
69
70 (defun help-button-action (button)
71 "Call BUTTON's help function."
72 (help-do-xref (button-start button)
73 (button-get button 'help-function)
74 (button-get button 'help-args)))
75
67 ;; Make some button types that all use the same naming conventions 76 ;; Make some button types that all use the same naming conventions
68 (dolist (help-type '("function" "variable" "face" 77 (dolist (help-type '("function" "variable" "face"
69 "coding-system" "input-method" "character-set")) 78 "coding-system" "input-method" "character-set"))
70 (define-button-type (intern (purecopy (concat "help-" help-type))) 79 (define-button-type (intern (purecopy (concat "help-" help-type)))
80 :supertype 'help-xref
71 'help-function (intern (concat "describe-" help-type)) 81 'help-function (intern (concat "describe-" help-type))
72 'help-echo (purecopy (concat "mouse-2, RET: describe this " help-type)) 82 'help-echo (purecopy (concat "mouse-2, RET: describe this " help-type))))
73 'action #'help-button-action))
74 83
75 ;; make some more ideosyncratic button types 84 ;; make some more ideosyncratic button types
76 85
77 (define-button-type 'help-symbol 86 (define-button-type 'help-symbol
87 :supertype 'help-xref
78 'help-function #'help-xref-interned 88 'help-function #'help-xref-interned
79 'help-echo (purecopy "mouse-2, RET: describe this symbol") 89 'help-echo (purecopy "mouse-2, RET: describe this symbol"))
80 'action #'help-button-action)
81 90
82 (define-button-type 'help-back 91 (define-button-type 'help-back
92 :supertype 'help-xref
83 'help-function #'help-xref-go-back 93 'help-function #'help-xref-go-back
84 'help-echo (purecopy "mouse-2, RET: go back to previous help buffer") 94 'help-echo (purecopy "mouse-2, RET: go back to previous help buffer"))
85 'action #'help-button-action)
86 95
87 (define-button-type 'help-info 96 (define-button-type 'help-info
97 :supertype 'help-xref
88 'help-function #'info 98 'help-function #'info
89 'help-echo (purecopy"mouse-2, RET: read this Info node") 99 'help-echo (purecopy"mouse-2, RET: read this Info node"))
90 'action #'help-button-action)
91 100
92 (define-button-type 'help-customize-variable 101 (define-button-type 'help-customize-variable
102 :supertype 'help-xref
93 'help-function (lambda (v) 103 'help-function (lambda (v)
94 (if help-xref-stack 104 (if help-xref-stack
95 (pop help-xref-stack)) 105 (pop help-xref-stack))
96 (customize-variable v)) 106 (customize-variable v))
97 'help-echo (purecopy "mouse-2, RET: customize variable") 107 'help-echo (purecopy "mouse-2, RET: customize variable"))
98 'action #'help-button-action)
99 108
100 (define-button-type 'help-customize-face 109 (define-button-type 'help-customize-face
110 :supertype 'help-xref
101 'help-function (lambda (v) 111 'help-function (lambda (v)
102 (if help-xref-stack 112 (if help-xref-stack
103 (pop help-xref-stack)) 113 (pop help-xref-stack))
104 (customize-face v)) 114 (customize-face v))
105 'help-echo (purecopy "mouse-2, RET: customize face") 115 'help-echo (purecopy "mouse-2, RET: customize face"))
106 'action #'help-button-action)
107 116
108 (define-button-type 'help-function-def 117 (define-button-type 'help-function-def
118 :supertype 'help-xref
109 'help-function (lambda (fun file) 119 'help-function (lambda (fun file)
110 (require 'find-func) 120 (require 'find-func)
111 ;; Don't use find-function-noselect because it follows 121 ;; Don't use find-function-noselect because it follows
112 ;; aliases (which fails for built-in functions). 122 ;; aliases (which fails for built-in functions).
113 (let* ((location (find-function-search-for-symbol 123 (let* ((location (find-function-search-for-symbol
114 fun nil file))) 124 fun nil file)))
115 (pop-to-buffer (car location)) 125 (pop-to-buffer (car location))
116 (goto-char (cdr location)))) 126 (goto-char (cdr location))))
117 'help-echo (purecopy "mouse-2, RET: find function's definition") 127 'help-echo (purecopy "mouse-2, RET: find function's definition"))
118 'action #'help-button-action)
119 128
120 (define-button-type 'help-variable-def 129 (define-button-type 'help-variable-def
130 :supertype 'help-xref
121 'help-function (lambda (var &optional file) 131 'help-function (lambda (var &optional file)
122 (let ((location 132 (let ((location
123 (find-variable-noselect var file))) 133 (find-variable-noselect var file)))
124 (pop-to-buffer (car location)) 134 (pop-to-buffer (car location))
125 (goto-char (cdr location)))) 135 (goto-char (cdr location))))
126 'help-echo (purecopy"mouse-2, RET: find variable's definition") 136 'help-echo (purecopy"mouse-2, RET: find variable's definition"))
127 'action #'help-button-action)
128
129 (defun help-button-action (button)
130 "Call BUTTON's help function."
131 (help-do-xref (button-start button)
132 (button-get button 'help-function)
133 (button-get button 'help-args)))
134 137
135 138
136 ;;;###autoload 139 ;;;###autoload
137 (define-derived-mode help-mode nil "Help" 140 (define-derived-mode help-mode nil "Help"
138 "Major mode for viewing help text and navigating references in it. 141 "Major mode for viewing help text and navigating references in it.