From f9bf695080bde66ba8d6180a23bfa8c0408dfb72 Mon Sep 17 00:00:00 2001 From: Bastien Guerry Date: Fri, 7 Mar 2008 19:31:59 +0000 Subject: [PATCH] * 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. --- lisp/ChangeLog | 16 ++++++++++++++++ lisp/bookmark.el | 20 +++++++++++++++----- lisp/info.el | 15 ++++++++++++++- 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index d6d0a08451b..d162ea33fb1 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,19 @@ +2008-03-07 Bastien Guerry + + * 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 * bookmark.el (bookmark-set): Make `bookmark-make-record-function' diff --git a/lisp/bookmark.el b/lisp/bookmark.el index 3d5db0de53c..46e3841f337 100644 --- a/lisp/bookmark.el +++ b/lisp/bookmark.el @@ -314,6 +314,7 @@ through a file easier.") ;; 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)) @@ -463,6 +464,13 @@ menus, so `completing-read' never gets a chance to set `bookmark-history'." (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 @@ -738,7 +746,6 @@ and it removes only the first instance of a bookmark with that name from 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")) @@ -947,8 +954,9 @@ The directory part of the file name is not used." "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? @@ -988,8 +996,10 @@ In Info, return the current node." "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 diff --git a/lisp/info.el b/lisp/info.el index ae295cc06ef..5f074b686d6 100644 --- a/lisp/info.el +++ b/lisp/info.el @@ -3489,6 +3489,8 @@ Advanced commands: (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 @@ -4326,6 +4328,13 @@ BUFFER is the buffer speedbar is requesting buttons for." ;; 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)) @@ -4356,15 +4365,19 @@ BUFFER is the buffer speedbar is requesting buttons for." ;; 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 -- 2.39.2