changeset 105448:b0226862b32c

* 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.
author Karl Fogel <kfogel@red-bean.com>
date Mon, 05 Oct 2009 02:38:35 +0000
parents 257c9f6d8be8
children 4d75e3e0f1ea
files lisp/ChangeLog lisp/bookmark.el
diffstat 2 files changed, 28 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- 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  <kfogel@red-bean.com>
+
+	* 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  <kfogel@red-bean.com>
 
 	* bookmark.el (bookmark-set, bookmark-buffer-name):
--- 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))