[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 34ff19a882: Remove local copies of remote files created for drag-
From: |
Po Lu |
Subject: |
master 34ff19a882: Remove local copies of remote files created for drag-and-drop |
Date: |
Wed, 30 Mar 2022 04:37:40 -0400 (EDT) |
branch: master
commit 34ff19a8820334f92802be13e9d88f1264e493ab
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>
Remove local copies of remote files created for drag-and-drop
* lisp/dired.el (dired-mouse-drag): Remove last dragged remote
file and save a record of any local copy created.
(dired-remove-last-dragged-local-file): New function.
---
lisp/dired.el | 23 +++++++++++++++++++++--
1 file changed, 21 insertions(+), 2 deletions(-)
diff --git a/lisp/dired.el b/lisp/dired.el
index 41313f5eb9..0b5f2cab41 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -1699,13 +1699,29 @@ see `dired-use-ls-dired' for more details.")
beg))
beg))))
-(declare-function x-begin-drag "xfns.cx")
+(defvar dired-last-dragged-remote-file nil
+ "If non-nil, the name of a local copy of the last remote file that was
dragged.
+It can't be removed immediately after the drag-and-drop operation
+completes, since there is no way to determine when the drop
+target has finished opening it. So instead, this file is removed
+when Emacs exits or the user drags another file.")
+
+(declare-function x-begin-drag "xfns.c")
+
+(defun dired-remove-last-dragged-local-file ()
+ "Remove the local copy of the last remote file to be dragged."
+ (when dired-last-dragged-remote-file
+ (unwind-protect
+ (delete-file dired-last-dragged-remote-file)
+ (setq dired-last-dragged-remote-file nil)))
+ (remove-hook 'kill-emacs-hook #'dired-remove-last-dragged-local-file))
(defun dired-mouse-drag (event)
"Begin a drag-and-drop operation for the file at EVENT."
(interactive "e")
(when mark-active
(deactivate-mark))
+ (dired-remove-last-dragged-local-file)
(save-excursion
(with-selected-window (posn-window (event-end event))
(goto-char (posn-point (event-end event))))
@@ -1728,7 +1744,10 @@ see `dired-use-ls-dired' for more details.")
;; actually implements file DND according to the
;; spec.
(when (file-remote-p filename)
- (setq filename (file-local-copy filename)))
+ (setq filename (file-local-copy filename))
+ (setq dired-last-dragged-remote-file filename)
+ (add-hook 'kill-emacs-hook
+ #'dired-remove-last-dragged-local-file))
(gui-backend-set-selection 'XdndSelection filename)
(x-begin-drag '("text/uri-list"
"text/x-dnd-username")
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 34ff19a882: Remove local copies of remote files created for drag-and-drop,
Po Lu <=