diff options
| author | Tino Calancha | 2017-02-27 16:26:06 +0900 |
|---|---|---|
| committer | Tino Calancha | 2017-02-27 16:26:06 +0900 |
| commit | 841e3e377c97142cfe76b9d91467f439198f5e39 (patch) | |
| tree | bedab4128a289d0499420c8cdd0943966d24b490 | |
| parent | fd8f724147b0a64c15f42dd09d21d8b2f81f6cbc (diff) | |
| download | emacs-841e3e377c97142cfe76b9d91467f439198f5e39.tar.gz emacs-841e3e377c97142cfe76b9d91467f439198f5e39.zip | |
Choose the right target dir on dired operations
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.
| -rw-r--r-- | lisp/dired-aux.el | 1 | ||||
| -rw-r--r-- | test/lisp/dired-tests.el | 32 |
2 files changed, 33 insertions, 0 deletions
diff --git a/lisp/dired-aux.el b/lisp/dired-aux.el index caa3b45705b..d7ca0527879 100644 --- a/lisp/dired-aux.el +++ b/lisp/dired-aux.el | |||
| @@ -1791,6 +1791,7 @@ Optional arg HOW-TO determines how to treat the target. | |||
| 1791 | (and (consp fn-list) (null (cdr fn-list)) (car fn-list))) | 1791 | (and (consp fn-list) (null (cdr fn-list)) (car fn-list))) |
| 1792 | (target-dir (dired-dwim-target-directory)) | 1792 | (target-dir (dired-dwim-target-directory)) |
| 1793 | (default (and dired-one-file | 1793 | (default (and dired-one-file |
| 1794 | (not dired-dwim-target) ; Bug#25609 | ||
| 1794 | (expand-file-name (file-name-nondirectory (car fn-list)) | 1795 | (expand-file-name (file-name-nondirectory (car fn-list)) |
| 1795 | target-dir))) | 1796 | target-dir))) |
| 1796 | (defaults (dired-dwim-target-defaults fn-list target-dir)) | 1797 | (defaults (dired-dwim-target-defaults fn-list target-dir)) |
diff --git a/test/lisp/dired-tests.el b/test/lisp/dired-tests.el index 489f8fdfea3..1863864abdf 100644 --- a/test/lisp/dired-tests.el +++ b/test/lisp/dired-tests.el | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | ;;; Code: | 20 | ;;; Code: |
| 21 | (require 'ert) | 21 | (require 'ert) |
| 22 | (require 'dired) | 22 | (require 'dired) |
| 23 | (require 'nadvice) | ||
| 23 | 24 | ||
| 24 | 25 | ||
| 25 | (ert-deftest dired-autoload () | 26 | (ert-deftest dired-autoload () |
| @@ -52,5 +53,36 @@ | |||
| 52 | ;; Clean up | 53 | ;; Clean up |
| 53 | (delete-directory dir 'recursive)))) | 54 | (delete-directory dir 'recursive)))) |
| 54 | 55 | ||
| 56 | (ert-deftest dired-test-bug25609 () | ||
| 57 | "Test for http://debbugs.gnu.org/25609 ." | ||
| 58 | (let* ((from (make-temp-file "foo" 'dir)) | ||
| 59 | (to (make-temp-file "bar" 'dir)) | ||
| 60 | (target (expand-file-name (file-name-nondirectory from) to)) | ||
| 61 | (nested (expand-file-name (file-name-nondirectory from) target)) | ||
| 62 | (dired-dwim-target t) | ||
| 63 | (dired-recursive-copies 'always)) ; Don't prompt me. | ||
| 64 | (advice-add 'dired-query ; Don't ask confirmation to overwrite a file. | ||
| 65 | :override | ||
| 66 | (lambda (sym prompt &rest args) (setq dired-query t)) | ||
| 67 | '((name . "advice-dired-query"))) | ||
| 68 | (advice-add 'completing-read ; Just return init. | ||
| 69 | :override | ||
| 70 | (lambda (prompt coll &optional pred match init hist def inherit keymap) | ||
| 71 | init) | ||
| 72 | '((name . "advice-completing-read"))) | ||
| 73 | (dired to) | ||
| 74 | (dired-other-window temporary-file-directory) | ||
| 75 | (dired-goto-file from) | ||
| 76 | (dired-do-copy) | ||
| 77 | (dired-do-copy); Again. | ||
| 78 | (unwind-protect | ||
| 79 | (progn | ||
| 80 | (should (file-exists-p target)) | ||
| 81 | (should-not (file-exists-p nested))) | ||
| 82 | (delete-directory from 'recursive) | ||
| 83 | (delete-directory to 'recursive) | ||
| 84 | (advice-remove 'dired-query "advice-dired-query") | ||
| 85 | (advice-remove 'completing-read "advice-completing-read")))) | ||
| 86 | |||
| 55 | (provide 'dired-tests) | 87 | (provide 'dired-tests) |
| 56 | ;; dired-tests.el ends here | 88 | ;; dired-tests.el ends here |