branch: elpa/helm commit 6e218b610027552f836968be497df360d278b544 Author: Thierry Volpiatto <thie...@posteo.net> Commit: Thierry Volpiatto <thie...@posteo.net>
Remove support for drag and drop for emacs<29.1 HFF use now dnd for its drag-and-drop fn (helm-ff-mouse-drag). The variables helm-ff-drag-and-drop-default-directory and helm-ff-drag-and-drop-default-directories have been removed. --- helm-core.el | 2 +- helm-files.el | 113 ++++++++++++---------------------------------------------- helm-help.el | 14 ++------ 3 files changed, 26 insertions(+), 103 deletions(-) diff --git a/helm-core.el b/helm-core.el index 4c143fd263..da63503ae1 100644 --- a/helm-core.el +++ b/helm-core.el @@ -5427,7 +5427,7 @@ specified as respectively `helm-cand-num' and `helm-cur-source'." (let ((inhibit-read-only t) (map (get-text-property pos 'keymap))) (when map - (define-key map [drag-mouse-1] helm-drag-mouse-1-fn) + (define-key map [down-mouse-1] helm-drag-mouse-1-fn) (define-key map [mouse-2] 'helm-maybe-exit-minibuffer) (put-text-property helm-selection-point diff --git a/helm-files.el b/helm-files.el index fdc11b258b..15f20e6b48 100644 --- a/helm-files.el +++ b/helm-files.el @@ -97,6 +97,7 @@ (declare-function helm-epa-collect-keys-from-candidates "helm-epa") (declare-function async-byte-compile-file "async-bytecomp.el") (declare-function async-byte-recompile-directory "async-bytecomp.el") +(declare-function dnd-begin-drag-files "dnd.el") (defvar term-char-mode-point-at-process-mark) (defvar term-char-mode-buffer-read-only) @@ -949,34 +950,13 @@ present in this list." "When non nil dim prompt while updating." :type 'boolean) -(defvaralias 'helm-ff-drag-and-drop-default-directory 'helm-ff-drag-and-drop-default-directories - "Default directory where to drop files on a drag-and-drop action. -It is used when no suitable directory is found at drop place, -generally when dropping outside of an emacs frame. -You want generally to set this to your home desktop directory.") -(make-obsolete-variable 'helm-ff-drag-and-drop-default-directory - 'helm-ff-drag-and-drop-default-directories - "4.0.3") - -(defcustom helm-ff-drag-and-drop-default-directories '(history . 10) - "Directories where to drop files on a drag-and-drop action. -Can be a list of directories, or a cons cell (history . <n>) where <n> is the -first <n> directories of `helm-ff-history'. -It is used when no suitable directory is found at drop place, -generally when dropping outside of an emacs frame." - :type '(choice - (cons - (const :tag "History" history) - integer) - (repeat string))) - (defcustom helm-ff-drag-mouse-1-default-action 'copy "Default action when dragging files. -Possible values are `copy', `rsync' or `rename'." +Possible values are `copy', `move' or `link'." :type '(choice (const :tag "Copy" copy) - (const :tag "Rsync" rsync) - (const :tag "Move" rename))) + (const :tag "Move" move) + (const :tag "Link" link))) ;;; Faces ;; @@ -5610,73 +5590,23 @@ Show the first `helm-ff-history-max-length' elements of helm-ff-history)))) (put 'helm-find-files-history 'helm-only t) -(defun helm-ff-drag-mouse-1-fn (event) - "Drag-and-drop function for `helm-find-files'. -Allows dropping marked files to another frame or window. -When dropping to another frame (i.e. not the selected one where helm -is running), you are asked for which directory you want to drop to when frame -displays more than one window. -When no suitable place to drop is found ask to drop to -`helm-ff-drag-and-drop-default-directories' if set." +;; The `helm-drag-mouse-1-fn' for helm-find-files, see +;; `helm--bind-mouse-for-selection'. It react when dropping, not dragging so +;; `helm-drag-mouse-1-fn' is bound to <down-mouse-1> and not <drag-mouse-1>. +(defun helm-ff-mouse-drag (_event) + "The drag-an-drop function for helm-find-files. + +Drag-and-drop marked files." (interactive "e") - (cl-assert (memq helm-ff-drag-mouse-1-default-action - '(copy rsync rename))) - ;; Prevent marking when moving mouse. + (require 'dnd) (when mark-active (deactivate-mark)) - (let* ((win-or-frame (posn-window (event-end event))) - (target-frame (when (framep win-or-frame) - (car (mouse-pixel-position)))) - (target (with-selected-window - (if target-frame - (frame-selected-window target-frame) - win-or-frame) - default-directory)) - (windows (and target-frame - (remove (helm-window) - (window-list target-frame 1))))) - (when windows - (setq target - (helm-acond ((cdr windows) - (x-popup-menu - t (list "Choose target" - (cons "" - (cl-loop for win in windows - for dir = (with-selected-window - win default-directory) - collect (cons dir dir)))))) - ((and (eql (window-buffer (car windows)) - helm-current-buffer) - (or helm-ff-drag-and-drop-default-directories - helm-ff-drag-and-drop-default-directory)) - (when (and (eq (car it) 'history) - (numberp (cdr it))) - (setq it (helm-take - (remove helm-ff-default-directory - (helm-fast-remove-dups - helm-ff-history :test 'equal)) - (cdr it)))) - (x-popup-menu - t (list "Choose target" - (cons "" - (if (listp it) - (cl-loop for fname in it - collect (cons fname fname)) - ;; Handle obsolete - ;; helm-ff-drag-and-drop-default-directory. - (list (cons it it))))))) - ((car windows) - (with-selected-window it default-directory))))) - (if (memq helm-ff-drag-mouse-1-default-action '(copy rsync)) - (unwind-protect - (helm-find-files-do-action - helm-ff-drag-mouse-1-default-action target) - ;; Retrieve focus after dropping - (with-selected-frame helm-initial-frame - (select-window (minibuffer-window)) - (force-mode-line-update t))) - (helm-run-after-exit - #'helm-find-files-do-action - helm-ff-drag-mouse-1-default-action target)))) + (let ((action helm-ff-drag-mouse-1-default-action)) + (with-helm-window + (condition-case err + (let ((files (helm-marked-candidates))) + (dnd-begin-drag-files files nil action t)) + (error (user-error (cadr err))))))) +(put 'helm-ff-mouse-drag 'helm-only t) (defun helm-find-files-1 (fname &optional preselect) "Find FNAME filename with PRESELECT filename preselected. @@ -5704,8 +5634,9 @@ Use it for non-interactive calls of `helm-find-files'." ;; Ensure not being prompted for password each time we ;; navigate to a directory. (password-cache t)) - (helm-set-local-variable 'helm-follow-mode-persistent nil - 'helm-drag-mouse-1-fn 'helm-ff-drag-mouse-1-fn) + (helm-set-local-variable 'helm-follow-mode-persistent nil) + (when (fboundp 'dnd-begin-drag-files) + (helm-set-local-variable 'helm-drag-mouse-1-fn 'helm-ff-mouse-drag)) (unless helm-source-find-files (setq helm-source-find-files (helm-make-source "Find Files" 'helm-source-ffiles))) diff --git a/helm-help.el b/helm-help.el index 294c58ca84..2a20eb3c14 100644 --- a/helm-help.el +++ b/helm-help.el @@ -885,21 +885,13 @@ rsync command line with a prefix arg (see above). When mouse support is enabled in Helm (which is the default, see `helm-allow-mouse') you can drag and drop files to `default-directory' -of the buffer you drag-and-drop in. When you drag and drop outside of -an emacs frame, the target directory is defined by the variable -`helm-ff-drag-and-drop-default-directories' which is a list of -directories you can choose from or the first <n> elements of -`helm-ff-history' you specify with a cons cell where the first element -is the symbol =history= and the second an integer, it is '(history . 10) -by default, customize it to your needs. Tip: To trigger this from an -Emacs full frame, drag to the border of the Emacs frame. +of the buffer you drag-and-drop in or in an external application. By default Helm copy files when using drag-and-drop, you can customize `helm-ff-drag-mouse-1-default-action' to modify this. -Drag-and-drop to external applications is not supported in Helm, to -achieve this you will have to install external application [[https://github.com/mwh/dragon][Dragon]] -and use it as follow: +To drag-and-drop to external applications you can also use the +external application [[https://github.com/mwh/dragon][Dragon]] and use it as follow: #+begin_src elisp (defun helm-ff-dragon (files)