emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 4b8e693: Consult browse-url-{default-, }handlers in drag&drop.


From: Tassilo Horn
Subject: master 4b8e693: Consult browse-url-{default-, }handlers in drag&drop.
Date: Wed, 6 May 2020 10:54:18 -0400 (EDT)

branch: master
commit 4b8e6939bf7664fda33a7aaa03d2d8069358ff7b
Author: Tassilo Horn <address@hidden>
Commit: Tassilo Horn <address@hidden>

    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'.
---
 doc/lispref/frames.texi | 10 ++++++----
 lisp/dnd.el             | 34 ++++++++++++++++++++--------------
 2 files changed, 26 insertions(+), 18 deletions(-)

diff --git a/doc/lispref/frames.texi b/doc/lispref/frames.texi
index 905e5c2..6bf5db2 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 905659e..2f7b16c 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)))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]