summaryrefslogtreecommitdiff
path: root/lisp/help-mode.el
diff options
context:
space:
mode:
authorDrew Adams <drew.adams@oracle.com>2012-06-11 21:03:10 -0400
committerStefan Monnier <monnier@iro.umontreal.ca>2012-06-11 21:03:10 -0400
commit0c9e42b592893c53f9c88aa65970aaf1fe6e940f (patch)
treeda1ff1142c0c554da73b21a2b1131084f5fc1a7e /lisp/help-mode.el
parent43682bb61e35cb20ae6bc45ccaf2d18f23e5b81a (diff)
downloademacs-0c9e42b592893c53f9c88aa65970aaf1fe6e940f.tar.gz
* lisp/help-mode.el (help-bookmark-make-record, help-bookmark-jump): New funs.
(help-mode): Use them.
Diffstat (limited to 'lisp/help-mode.el')
-rw-r--r--lisp/help-mode.el36
1 files changed, 35 insertions, 1 deletions
diff --git a/lisp/help-mode.el b/lisp/help-mode.el
index eb0834e243a..d3fe21abd95 100644
--- a/lisp/help-mode.el
+++ b/lisp/help-mode.el
@@ -267,6 +267,8 @@ The format is (FUNCTION ARGS...).")
'help-function 'customize-create-theme
'help-echo (purecopy "mouse-2, RET: edit this theme file"))
+(defvar bookmark-make-record-function)
+
;;;###autoload
(define-derived-mode help-mode special-mode "Help"
"Major mode for viewing help text and navigating references in it.
@@ -274,7 +276,9 @@ Entry to this mode runs the normal hook `help-mode-hook'.
Commands:
\\{help-mode-map}"
(set (make-local-variable 'revert-buffer-function)
- 'help-mode-revert-buffer))
+ 'help-mode-revert-buffer)
+ (set (make-local-variable 'bookmark-make-record-function)
+ 'help-bookmark-make-record))
;;;###autoload
(defun help-mode-setup ()
@@ -791,6 +795,36 @@ help buffer by other means."
(with-output-to-temp-buffer (help-buffer)
(insert string)))
+
+;; Bookmark support
+
+(declare-function bookmark-prop-get "bookmark" (bookmark prop))
+
+(defun help-bookmark-make-record ()
+ "Create and return a help-mode bookmark record.
+Implements `bookmark-make-record-function' for help-mode buffers."
+ (unless (car help-xref-stack-item)
+ (error "Cannot create bookmark - help command not known"))
+ `(,@(bookmark-make-record-default 'NO-FILE 'NO-CONTEXT)
+ (buffer-name . "*Help*")
+ (help-fn . ,(car help-xref-stack-item))
+ (help-arg . ,(cadr help-xref-stack-item))
+ (position . ,(point))
+ (handler . help-bookmark-jump)))
+
+;;;###autoload
+(defun help-bookmark-jump (bookmark)
+ "Jump to help-mode bookmark BOOKMARK.
+Handler function for record returned by `help-bookmark-make-record'.
+BOOKMARK is a bookmark name or a bookmark record."
+ (let ((help-fn (bookmark-prop-get bookmark 'help-fn))
+ (help-arg (bookmark-prop-get bookmark 'help-arg))
+ (position (bookmark-prop-get bookmark 'position)))
+ (funcall help-fn help-arg)
+ (pop-to-buffer "*Help*")
+ (goto-char position)))
+
+
(provide 'help-mode)
;;; help-mode.el ends here