+2008-03-07 Bastien Guerry <bzg@altern.org>
+
+ * bookmark.el (bookmark-set): Don't check for
+ `bookmark-make-name-function' since `bookmark-buffer-file-name'
+ already takes care of this.
+ (bookmark-buffer-name): Removed Info-mode specific code.
+ (bookmark-buffer-file-name): Removed Info-mode specific code.
+
+ * info.el (bookmark-get-info-node): Define this function in
+ info.el, not in bookmark.el.
+ (Info-mode): Set `bookmark-make-name-function' to
+ `Info-bookmark-make-name' locally.
+ (Info-bookmark-make-name): New function.
+
+ * bookmark.el (bookmark-make-name-function): New variable.
+
2008-03-07 Karl Fogel <kfogel@red-bean.com>
* bookmark.el (bookmark-set): Make `bookmark-make-record-function'
;; know anything about the format of bookmark-alist entries.
;; Everyone else should go through them.
+
(defun bookmark-name-from-full-record (full-record)
"Return name of FULL-RECORD \(an alist element instead of a string\)."
(car full-record))
(interactive-p)
(setq bookmark-history (cons ,string bookmark-history))))
+(defvar bookmark-make-name-function nil
+ "A function that should be called to return the name of the bookmark.
+When called with an argument, the function should return a file
+name -- or whatever is required to jump to the location. Modes
+may set this variable buffer-locally to enable a default name to
+be proposed when calling `bookmark-set'.")
+
(defvar bookmark-make-record-function 'bookmark-make-record-for-text-file
"A function that should be called to create a bookmark record.
Modes may set this variable buffer-locally to enable bookmarking of
the list of bookmarks.\)"
(interactive (list nil current-prefix-arg))
(or
- (local-variable-p 'bookmark-make-record-function)
(bookmark-buffer-file-name)
(error "Buffer not visiting a file or directory"))
"Return the name of the current buffer's file, non-directory.
In Info, return the current node."
(cond
- ;; Are we in Info?
- ((derived-mode-p 'Info-mode) Info-current-node)
+ ;; Is the mode defining the bookmark buffer name?
+ (bookmark-make-name-function
+ (funcall bookmark-make-name-function))
;; Or are we a file?
(buffer-file-name (file-name-nondirectory buffer-file-name))
;; Or are we a directory?
"Return the current buffer's file in a way useful for bookmarks.
For example, if this is a Info buffer, return the Info file's name."
(cond
- ((eq major-mode 'Info-mode)
- Info-current-file)
+ ;; Return the location the handler should jump to
+ ;; E.g. the Info file name for the Info handler
+ (bookmark-make-name-function
+ (funcall bookmark-make-name-function t))
(buffer-file-name
;; Abbreviate the path, both so it's shorter and so it's more
;; portable. E.g., the user's home dir might be a different
(Info-set-mode-line)
(set (make-local-variable 'bookmark-make-record-function)
'Info-bookmark-make-record)
+ (set (make-local-variable 'bookmark-make-name-function)
+ 'Info-bookmark-make-name)
(run-mode-hooks 'Info-mode-hook))
;; When an Info buffer is killed, make sure the associated tags buffer
;; This is only called from bookmark.el.
(declare-function bookmark-buffer-file-name "bookmark" ())
+
+(defun Info-bookmark-make-name (&optional file)
+ "Return the default name for the bookmark.
+When FILE is non-nil, return the Info file instead."
+ (if file Info-current-file Info-current-node))
+
+
(defun Info-bookmark-make-record (annotation)
(let ((the-record
`((filename . ,(bookmark-buffer-file-name))
;; Finally, return the completed record.
the-record))
+
(defvar bookmark-current-bookmark)
(declare-function bookmark-get-filename "bookmark" (bookmark))
(declare-function bookmark-get-front-context-string "bookmark" (bookmark))
(declare-function bookmark-get-rear-context-string "bookmark" (bookmark))
(declare-function bookmark-get-position "bookmark" (bookmark))
-(declare-function bookmark-get-info-node "bookmark" (bookmark))
(declare-function bookmark-file-or-variation-thereof "bookmark" (file))
(declare-function bookmark-jump-noselect "bookmark" (str))
+(defun bookmark-get-info-node (bookmark)
+ "Get the info node associated with BOOKMARK."
+ (cdr (assq 'info-node (bookmark-get-bookmark-record bookmark))))
+
;;;###autoload
(defun Info-bookmark-jump (bmk)
;; This implements the `handler' function interface for record type returned