From: Tassilo Horn Date: Wed, 6 May 2020 14:48:57 +0000 (+0200) Subject: Consult browse-url-{default-,}handlers in drag&drop. X-Git-Tag: emacs-28.0.90~7432 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=4b8e6939bf7664fda33a7aaa03d2d8069358ff7b;p=emacs.git Consult browse-url-{default-,}handlers in drag&drop. * lisp/dnd.el (dnd-handle-one-url): Consult `browse-url-handlers' and `browse-url-default-handlers' for a matching handler. Adapt docstring. * doc/lispref/frames.texi (Drag and Drop): Remove the docs for the deprecated alist choice of `browse-url-browser-function' and mention `browse-url-handlers' and `browse-url-default-handlers'. --- diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi index 905e5c2e6ce..6bf5db2aa1d 100644 --- a/doc/lispref/frames.texi +++ b/doc/lispref/frames.texi @@ -3875,13 +3875,15 @@ detailed knowledge of what types other applications use for drag and drop. @vindex dnd-protocol-alist +@vindex browse-url-handlers +@vindex browse-url-default-handlers When an URL is dropped on Emacs it may be a file, but it may also be another URL type (https, etc.). Emacs first checks @code{dnd-protocol-alist} to determine what to do with the URL@. If -there is no match there and if @code{browse-url-browser-function} is -an alist, Emacs looks for a match there. If no match is found the -text for the URL is inserted. If you want to alter Emacs behavior, -you can customize these variables. +there is no match there, Emacs looks for a match in +@code{browse-url-handlers} and @code{browse-url-default-handlers}. If +still no match has been found, the text for the URL is inserted. If +you want to alter Emacs behavior, you can customize these variables. @node Color Names @section Color Names diff --git a/lisp/dnd.el b/lisp/dnd.el index 905659e817b..2f7b16c56ed 100644 --- a/lisp/dnd.el +++ b/lisp/dnd.el @@ -87,12 +87,11 @@ and is the default except for MS-Windows." (defun dnd-handle-one-url (window action url) "Handle one dropped url by calling the appropriate handler. The handler is first located by looking at `dnd-protocol-alist'. -If no match is found here, and the value of `browse-url-browser-function' -is a pair of (REGEXP . FUNCTION), those regexps are tried for a match. -If no match is found, just call `dnd-insert-text'. -WINDOW is where the drop happened, ACTION is the action for the drop, -URL is what has been dropped. -Returns ACTION." +If no match is found here, `browse-url-handlers' and +`browse-url-default-handlers' are searched for a match. +If no match is found, just call `dnd-insert-text'. WINDOW is +where the drop happened, ACTION is the action for the drop, URL +is what has been dropped. Returns ACTION." (require 'browse-url) (let (ret) (or @@ -102,14 +101,21 @@ Returns ACTION." (setq ret (funcall (cdr bf) url action)) (throw 'done t))) nil) - (when (not (functionp browse-url-browser-function)) - (catch 'done - (dolist (bf browse-url-browser-function) - (when (string-match (car bf) url) - (setq ret 'private) - (funcall (cdr bf) url action) - (throw 'done t))) - nil)) + (catch 'done + (require 'browse-url) ;; browse-url-handlers is not autoloaded. + (dolist (bf (append + ;; The alist choice of browse-url-browser-function + ;; is deprecated since 28.1, so the (unless ...) + ;; can be removed at some point in time. + (unless (functionp browse-url-browser-function) + browse-url-browser-function) + browse-url-handlers + browse-url-default-handlers)) + (when (string-match (car bf) url) + (setq ret 'private) + (funcall (cdr bf) url action) + (throw 'done t))) + nil) (progn (dnd-insert-text window action url) (setq ret 'private)))