]> git.eshelyaron.com Git - emacs.git/commitdiff
Choose the right target dir on dired operations
authorTino Calancha <tino.calancha@gmail.com>
Mon, 27 Feb 2017 07:26:06 +0000 (16:26 +0900)
committerTino Calancha <tino.calancha@gmail.com>
Mon, 27 Feb 2017 07:26:06 +0000 (16:26 +0900)
Prevent from changing the input target dir
when dired-dwim-target is non-nil (Bug#25609).
* lisp/dired-aux.el (dired-do-create-files):
If dired-dwim-target is non-nil, then bind 'default' to nil.
* test/lisp/dired-tests.el (dired-test-bug25609): Add test.

lisp/dired-aux.el
test/lisp/dired-tests.el

index caa3b45705b513450be1d25c41a2a26ee3b6f6c8..d7ca052787927e27dfb0aa32ea1f65af8c13f5cc 100644 (file)
@@ -1791,6 +1791,7 @@ Optional arg HOW-TO determines how to treat the target.
          (and (consp fn-list) (null (cdr fn-list)) (car fn-list)))
         (target-dir (dired-dwim-target-directory))
         (default (and dired-one-file
+                      (not dired-dwim-target) ; Bug#25609
                       (expand-file-name (file-name-nondirectory (car fn-list))
                                         target-dir)))
         (defaults (dired-dwim-target-defaults fn-list target-dir))
index 489f8fdfea3a1dcc5d8fcad4cbb36318fcb409ea..1863864abdf9735a58eaec87454c9c1175490082 100644 (file)
@@ -20,6 +20,7 @@
 ;;; Code:
 (require 'ert)
 (require 'dired)
+(require 'nadvice)
 
 
 (ert-deftest dired-autoload ()
       ;; Clean up
       (delete-directory dir 'recursive))))
 
+(ert-deftest dired-test-bug25609 ()
+  "Test for http://debbugs.gnu.org/25609 ."
+  (let* ((from (make-temp-file "foo" 'dir))
+         (to (make-temp-file "bar" 'dir))
+         (target (expand-file-name (file-name-nondirectory from) to))
+         (nested (expand-file-name (file-name-nondirectory from) target))
+         (dired-dwim-target t)
+         (dired-recursive-copies 'always)) ; Don't prompt me.
+    (advice-add 'dired-query ; Don't ask confirmation to overwrite a file.
+                :override
+                (lambda (sym prompt &rest args) (setq dired-query t))
+                '((name . "advice-dired-query")))
+    (advice-add 'completing-read ; Just return init.
+                :override
+                (lambda (prompt coll &optional pred match init hist def inherit keymap)
+                  init)
+                '((name . "advice-completing-read")))
+    (dired to)
+    (dired-other-window temporary-file-directory)
+    (dired-goto-file from)
+    (dired-do-copy)
+    (dired-do-copy); Again.
+    (unwind-protect
+        (progn
+          (should (file-exists-p target))
+          (should-not (file-exists-p nested)))
+      (delete-directory from 'recursive)
+      (delete-directory to 'recursive)
+      (advice-remove 'dired-query "advice-dired-query")
+      (advice-remove 'completing-read "advice-completing-read"))))
+
 (provide 'dired-tests)
 ;; dired-tests.el ends here