Function: dired-dnd-handle-local-file
dired-dnd-handle-local-file is a byte-compiled function defined in
dired.el.gz.
Signature
(dired-dnd-handle-local-file URI ACTION)
Documentation
Copy, move or link a file to the Dired directory.
URI is the file to handle, ACTION is one of copy, move, link or ask. Ask means pop up a menu for the user to select one of copy, move or link.
Source Code
;; Defined in /usr/src/emacs/lisp/dired.el.gz
(defvar dired-overwrite-confirmed) ;Defined in dired-aux.
(defun dired-dnd-handle-local-file (uri action)
"Copy, move or link a file to the Dired directory.
URI is the file to handle, ACTION is one of copy, move, link or ask.
Ask means pop up a menu for the user to select one of copy, move or link."
(require 'dired-aux)
(let* ((from (dnd-get-local-file-name uri t))
(to (when from
(concat (dired-current-directory)
(file-name-nondirectory from)))))
(when from
(cond ((eq action 'ask)
(dired-dnd-do-ask-action uri))
;; If copying a directory and dired-recursive-copies is
;; nil, dired-copy-file fails. Pop up a notice.
((and (memq action '(copy private))
(file-directory-p from)
(not dired-recursive-copies))
(dired-dnd-popup-notice))
((memq action '(copy private move link))
(let ((overwrite (and (file-exists-p to)
(y-or-n-p
(format-message
"Overwrite existing file `%s'? " to))))
;; Binding dired-overwrite-confirmed to nil makes
;; dired-handle-overwrite a no-op. We instead use
;; y-or-n-p, which pops a graphical menu.
dired-overwrite-confirmed backup-file)
(when (and overwrite
;; d-b-o is defined in dired-aux.
(boundp 'dired-backup-overwrite)
dired-backup-overwrite
(setq backup-file
(car (find-backup-file-name to)))
(or (eq dired-backup-overwrite 'always)
(y-or-n-p
(format-message
"Make backup for existing file `%s'? " to))))
(rename-file to backup-file 0)
(dired-relist-entry backup-file))
(cond ((memq action '(copy private))
(dired-copy-file from to overwrite))
((eq action 'move)
(dired-rename-file from to overwrite))
((eq action 'link)
(make-symbolic-link from to overwrite)))
(dired-relist-entry to)
action))))))