(bookmark-get-bookmark): Add `noerror' arg.

Signal error for invalid bookmark.
(bookmark-get-bookmark-record): Undo last change.
(bookmark-store, bookmark-delete): Use new arg `noerror'.
This commit is contained in:
Stefan Monnier 2008-11-21 19:29:16 +00:00
parent 3889f0fa5f
commit 2ef435bf70
2 changed files with 14 additions and 7 deletions

View file

@ -1,5 +1,10 @@
2008-11-21 Stefan Monnier <monnier@iro.umontreal.ca>
* bookmark.el (bookmark-get-bookmark): Add `noerror' arg.
Signal error for invalid bookmark.
(bookmark-get-bookmark-record): Undo last change.
(bookmark-store, bookmark-delete): Use new arg `noerror'.
* bookmark.el (bookmark-buffer-file-name): Also abbreviate dired-dir.
Suggested by Toru TSUNEYOSHI.

View file

@ -79,6 +79,7 @@
;;; Code:
(require 'pp)
(eval-when-compile (require 'cl))
;;; Misc comments:
;;
@ -317,21 +318,21 @@ through a file easier.")
(mapcar 'bookmark-name-from-full-record bookmark-alist))
(defun bookmark-get-bookmark (bookmark)
(defun bookmark-get-bookmark (bookmark &optional noerror)
"Return the bookmark record corresponding to BOOKMARK.
If BOOKMARK is already a bookmark record, just return it,
Otherwise look for the corresponding bookmark in `bookmark-alist'."
(cond
((consp bookmark) bookmark)
((stringp bookmark)
(assoc-string bookmark bookmark-alist bookmark-completion-ignore-case))))
(or (assoc-string bookmark bookmark-alist bookmark-completion-ignore-case)
(unless noerror (error "Invalid bookmark %s" bookmark))))))
(defun bookmark-get-bookmark-record (bookmark)
"Return the guts of the entry for BOOKMARK in `bookmark-alist'.
That is, all information but the name."
(let ((alist (cdr (or (bookmark-get-bookmark bookmark)
(error "Invalid bookmark %s" bookmark)))))
(let ((alist (cdr (bookmark-get-bookmark bookmark))))
;; The bookmark objects can either look like (NAME ALIST) or
;; (NAME . ALIST), so we have to distinguish the two here.
(if (and (null (cdr alist)) (consp (caar alist)))
@ -487,7 +488,8 @@ old one."
;; XEmacs's `set-text-properties' doesn't work on
;; free-standing strings, apparently.
(set-text-properties 0 (length stripped-name) nil stripped-name))
(if (and (bookmark-get-bookmark stripped-name) (not no-overwrite))
(if (and (not no-overwrite)
(bookmark-get-bookmark stripped-name 'noerror))
;; already existing bookmark under that name and
;; no prefix arg means just overwrite old bookmark
;; Use the new (NAME . ALIST) format.
@ -1211,11 +1213,11 @@ probably because we were called from there."
bookmark-current-bookmark)))
(bookmark-maybe-historicize-string bookmark)
(bookmark-maybe-load-default-file)
(let ((will-go (bookmark-get-bookmark bookmark)))
(let ((will-go (bookmark-get-bookmark bookmark 'noerror)))
(setq bookmark-alist (delq will-go bookmark-alist))
;; Added by db, nil bookmark-current-bookmark if the last
;; occurrence has been deleted
(or (bookmark-get-bookmark bookmark-current-bookmark)
(or (bookmark-get-bookmark bookmark-current-bookmark 'noerror)
(setq bookmark-current-bookmark nil)))
;; Don't rebuild the list
(if batch