Function: bookmark-handle-bookmark
bookmark-handle-bookmark is a byte-compiled function defined in
bookmark.el.gz.
Signature
(bookmark-handle-bookmark BOOKMARK-NAME-OR-RECORD)
Documentation
Call BOOKMARK-NAME-OR-RECORD's handler or bookmark-default-handler
if it has none. This changes current buffer and point and returns nil,
or signals a file-error.
If BOOKMARK-NAME-OR-RECORD has no file, this is a no-op. If BOOKMARK-NAME-OR-RECORD has a file, but that file no longer exists, then offer interactively to relocate BOOKMARK-NAME-OR-RECORD.
Source Code
;; Defined in /usr/src/emacs/lisp/bookmark.el.gz
(defun bookmark-handle-bookmark (bookmark-name-or-record)
"Call BOOKMARK-NAME-OR-RECORD's handler or `bookmark-default-handler'
if it has none. This changes current buffer and point and returns nil,
or signals a `file-error'.
If BOOKMARK-NAME-OR-RECORD has no file, this is a no-op. If
BOOKMARK-NAME-OR-RECORD has a file, but that file no longer exists,
then offer interactively to relocate BOOKMARK-NAME-OR-RECORD."
(condition-case err
(funcall (or (bookmark-get-handler bookmark-name-or-record)
'bookmark-default-handler)
(bookmark-get-bookmark bookmark-name-or-record))
(bookmark-error-no-filename ;file-error
;; We were unable to find the marked file, so ask if user wants to
;; relocate the bookmark, else remind them to consider deletion.
(when (stringp bookmark-name-or-record)
;; `bookmark-name-or-record' can be either a bookmark name
;; (from `bookmark-alist') or a bookmark object. If it's an
;; object, we assume it's a bookmark used internally by some
;; other package.
(let ((file (bookmark-get-filename bookmark-name-or-record)))
(when file ;Don't know how to relocate if there's no `file'.
;; If file is not a dir, directory-file-name just returns file.
(let ((display-name (directory-file-name file)))
(ding)
;; Dialog boxes can accept a file target, but usually don't
;; know how to accept a directory target (at least, this
;; is true in Gnome on GNU/Linux, and Bug#4230 says it's
;; true on Windows as well). So we suppress file dialogs
;; when relocating.
(let ((use-dialog-box nil)
(use-file-dialog nil))
(if (y-or-n-p (concat display-name " nonexistent. Relocate \""
bookmark-name-or-record "\"? "))
(progn
(bookmark-relocate bookmark-name-or-record)
;; Try again.
(funcall (or (bookmark-get-handler bookmark-name-or-record)
'bookmark-default-handler)
(bookmark-get-bookmark bookmark-name-or-record)))
(message
"Bookmark not relocated; consider removing it (%s)."
bookmark-name-or-record)
(signal (car err) (cdr err))))))))))
;; Added by db.
(when (stringp bookmark-name-or-record)
(setq bookmark-current-bookmark bookmark-name-or-record))
nil)