From: Stefan Monnier Date: Fri, 21 Nov 2008 19:29:16 +0000 (+0000) Subject: (bookmark-get-bookmark): Add `noerror' arg. X-Git-Tag: emacs-pretest-23.0.90~1656 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=2ef435bf709fd60e1091e0dacdf7ea20a38b49b3;p=emacs.git (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'. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 46716b2e4c1..2ac896efc8d 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,10 @@ 2008-11-21 Stefan Monnier + * 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. diff --git a/lisp/bookmark.el b/lisp/bookmark.el index 1ae32d1fb0e..1dfb3feca44 100644 --- a/lisp/bookmark.el +++ b/lisp/bookmark.el @@ -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