From: Drew Adams Date: Tue, 12 Jun 2012 01:03:10 +0000 (-0400) Subject: * lisp/help-mode.el (help-bookmark-make-record, help-bookmark-jump): New funs. X-Git-Tag: emacs-24.2.90~1199^2~474^2~45 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=0c9e42b592893c53f9c88aa65970aaf1fe6e940f;p=emacs.git * lisp/help-mode.el (help-bookmark-make-record, help-bookmark-jump): New funs. (help-mode): Use them. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c3930f27a6d..0618a7a14b1 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-06-12 Drew Adams + + * help-mode.el (help-bookmark-make-record, help-bookmark-jump): + New functions. + (help-mode): Use them. + 2012-06-11 Glenn Morris * progmodes/fortran.el (fortran-font-lock-keywords-3): 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