# HG changeset patch # User Karl Fogel # Date 1254710315 0 # Node ID b0226862b32ca89f7953fd9faa6af0c474cf0d93 # Parent 257c9f6d8be87f629d732df4d504110849e5e848 * bookmark.el (bookmark-handle-bookmark): When relocating a bookmark, don't use a file dialog, because they usually don't know how to read a directory target from the user. (Bug#4230) Also, make sure the prompt can display directories as well as files. diff -r 257c9f6d8be8 -r b0226862b32c lisp/ChangeLog --- a/lisp/ChangeLog Mon Oct 05 02:17:57 2009 +0000 +++ b/lisp/ChangeLog Mon Oct 05 02:38:35 2009 +0000 @@ -1,3 +1,10 @@ +2009-10-04 Karl Fogel + + * bookmark.el (bookmark-handle-bookmark): When relocating a bookmark, + don't use a file dialog, because they usually don't know how to read + a directory target from the user. (Bug#4230) + Also, make sure the prompt can display directories as well as files. + 2009-10-04 Karl Fogel * bookmark.el (bookmark-set, bookmark-buffer-name): diff -r 257c9f6d8be8 -r b0226862b32c lisp/bookmark.el --- a/lisp/bookmark.el Mon Oct 05 02:17:57 2009 +0000 +++ b/lisp/bookmark.el Mon Oct 05 02:38:35 2009 +0000 @@ -1075,23 +1075,29 @@ ;; `bookmark' can either be a bookmark name (found in ;; `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))) + (let* ((file (bookmark-get-filename bookmark)) + ;; If file is not a directory, this should be a no-op. + (display-name (directory-file-name file))) (when file ;Don't know how to relocate if there's no `file'. - (setq file (expand-file-name file)) (ding) - (if (y-or-n-p (concat (file-name-nondirectory file) - " nonexistent. Relocate \"" - bookmark - "\"? ")) - (progn - (bookmark-relocate bookmark) - ;; Try again. - (funcall (or (bookmark-get-handler bookmark) - 'bookmark-default-handler) - (bookmark-get-bookmark bookmark))) - (message - "Bookmark not relocated; consider removing it \(%s\)." bookmark) - (signal (car err) (cdr err)))))))) + ;; Dialog boxes can accept a file target, but usually don't + ;; know how to accept a directory target (at least, this + ;; was true in Gnome on GNU/Linux, and Bug#4230 says it's + ;; true on Windows as well). Thus, 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 "\"? ")) + (progn + (bookmark-relocate bookmark) + ;; Try again. + (funcall (or (bookmark-get-handler bookmark) + 'bookmark-default-handler) + (bookmark-get-bookmark bookmark))) + (message + "Bookmark not relocated; consider removing it \(%s\)." bookmark) + (signal (car err) (cdr err))))))))) ;; Added by db. (when (stringp bookmark) (setq bookmark-current-bookmark bookmark))