changeset 99774:b53beb0ef91c

(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'.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Fri, 21 Nov 2008 19:29:16 +0000
parents 0bb446839781
children 042c1d530bbd
files lisp/ChangeLog lisp/bookmark.el
diffstat 2 files changed, 14 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Fri Nov 21 19:07:21 2008 +0000
+++ b/lisp/ChangeLog	Fri Nov 21 19:29:16 2008 +0000
@@ -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.
 
--- a/lisp/bookmark.el	Fri Nov 21 19:07:21 2008 +0000
+++ b/lisp/bookmark.el	Fri Nov 21 19:29:16 2008 +0000
@@ -79,6 +79,7 @@
 ;;; Code:
 
 (require 'pp)
+(eval-when-compile (require 'cl))
 
 ;;; Misc comments:
 ;;
@@ -317,21 +318,21 @@
   (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 @@
         ;; 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 @@
 				   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