;;; help-mode.el --- `help-mode' used by *Help* buffers
-;; Copyright (C) 1985, 1986, 1993, 1994, 1998, 1999, 2000, 2001, 2002, 2004
-;; Free Software Foundation, Inc.
+;; Copyright (C) 1985, 1986, 1993, 1994, 1998, 1999, 2000, 2001, 2002,
+;; 2003, 2004, 2005 Free Software Foundation, Inc.
;; Maintainer: FSF
;; Keywords: help, internal
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
;; Button types used by help
(define-button-type 'help-xref
+ 'follow-link t
'action #'help-button-action)
(defun help-button-action (button)
(goto-char (cdr location))))
'help-echo (purecopy"mouse-2, RET: find variable's definition"))
+(define-button-type 'help-face-def
+ :supertype 'help-xref
+ 'help-function (lambda (fun file)
+ (require 'find-func)
+ ;; Don't use find-function-noselect because it follows
+ ;; aliases (which fails for built-in functions).
+ (let ((location
+ (find-function-search-for-symbol fun 'defface file)))
+ (pop-to-buffer (car location))
+ (goto-char (cdr location))))
+ 'help-echo (purecopy "mouse-2, RET: find face's definition"))
+
\f
;;;###autoload
(defun help-mode ()
(view-mode)
(make-local-variable 'view-no-disable-on-exit)
(setq view-no-disable-on-exit t)
- (run-hooks 'help-mode-hook))
+ (run-mode-hooks 'help-mode-hook))
;;;###autoload
(defun help-mode-setup ()
;;;###autoload
(defun help-mode-finish ()
(let ((entry (assq (selected-window) view-return-to-alist)))
- (if entry (setcdr entry (cons (selected-window)
- help-return-method))
+ (if entry
+ ;; When entering Help mode from the Help window,
+ ;; such as by following a link, preserve the same
+ ;; meaning for the q command.
+ ;; (setcdr entry (cons (selected-window) help-return-method))
+ nil
(setq view-return-to-alist
(cons (cons (selected-window) help-return-method)
view-return-to-alist))))
;;; (pop-to-buffer (car location))
;;; (goto-char (cdr location))))
(help-xref-button 8 'help-function-def sym))
- ((facep sym)
- (if (save-match-data (looking-at "[ \t\n]+face\\W"))
- (help-xref-button 8 'help-face sym)))
+ ((and
+ (facep sym)
+ (save-match-data (looking-at "[ \t\n]+face\\W")))
+ (help-xref-button 8 'help-face sym))
((and (boundp sym) (fboundp sym))
;; We can't intuit whether to use the
;; variable or function doc -- supply both.
(interactive)
(if help-xref-stack
(help-xref-go-back (current-buffer))
- (error "No previous help buffer.")))
+ (error "No previous help buffer")))
(defun help-do-xref (pos function args)
"Call the help cross-reference function FUNCTION with args ARGS.
(provide 'help-mode)
-;;; arch-tag: 850954ae-3725-4cb4-8e91-0bf6d52d6b0b
+;; arch-tag: 850954ae-3725-4cb4-8e91-0bf6d52d6b0b
;;; help-mode.el ends here