Mercurial > emacs
changeset 93776:7b39fa7db791
(dired-dnd-handle-local-file): Obey dired-backup-overwrite.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Sun, 06 Apr 2008 20:11:47 +0000 |
parents | 2172dd8304ae |
children | 093881510254 |
files | lisp/dired.el |
diffstat | 1 files changed, 39 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/dired.el Sun Apr 06 20:11:37 2008 +0000 +++ b/lisp/dired.el Sun Apr 06 20:11:47 2008 +0000 @@ -3284,34 +3284,48 @@ (to (if from (concat (dired-current-directory) (file-name-nondirectory from)) nil))) - (if from - (cond ((or (eq action 'copy) - (eq action 'private)) ; Treat private as copy. - - ;; If copying a directory and dired-recursive-copies is nil, - ;; dired-copy-file silently fails. Pop up a notice. - (if (and (file-directory-p from) - (not dired-recursive-copies)) - (dired-dnd-popup-notice) - (progn - (dired-copy-file from to 1) - (dired-relist-entry to) - action))) + (when from + (cond ((or (eq action 'copy) + (eq action 'private)) ; Treat private as copy. + ;; If copying a directory and dired-recursive-copies is nil, + ;; dired-copy-file silently fails. Pop up a notice. + (cond ((and (file-directory-p from) + (not dired-recursive-copies)) + (dired-dnd-popup-notice)) + ((file-exists-p to) + (let ((overwrite + (y-or-n-p (format "Overwrite existing file `%s'? " to))) + ;; We avoid dired-handle-overwrite and use + ;; y-or-n-p, which pops a graphical menu. + dired-overwrite-confirmed backup-file) + (when (and overwrite + dired-backup-overwrite + (setq backup-file + (car (find-backup-file-name to))) + (or (eq dired-backup-overwrite 'always) + (y-or-n-p + (format + "Make backup for existing file `%s'? " to)))) + (rename-file to backup-file 0) + (dired-relist-entry backup-file)) + (dired-copy-file from to overwrite))) + (t (dired-copy-file from to nil))) + (dired-relist-entry to) + action) + ((eq action 'move) + (dired-rename-file from to 1) + (dired-relist-entry to) + action) - ((eq action 'move) - (dired-rename-file from to 1) - (dired-relist-entry to) - action) + ((eq action 'link) + (make-symbolic-link from to 1) + (dired-relist-entry to) + action) - ((eq action 'link) - (make-symbolic-link from to 1) - (dired-relist-entry to) - action) + ((eq action 'ask) + (dired-dnd-do-ask-action uri)) - ((eq action 'ask) - (dired-dnd-do-ask-action uri)) - - (t nil))))) + (t nil))))) (defun dired-dnd-handle-file (uri action) "Copy, move or link a file to the dired directory if it is a local file.