diff options
author | Andrea Corallo <akrl@sdf.org> | 2020-05-07 10:24:30 +0100 |
---|---|---|
committer | Andrea Corallo <akrl@sdf.org> | 2020-05-07 10:24:30 +0100 |
commit | 92dc81f85e1b91db04487ccf1b52c0cd3328dfee (patch) | |
tree | bc3081252c6ee13007a02e52bf63c951e486b086 /lisp | |
parent | cf105f604413d270c956adf375217960e3945e2a (diff) | |
parent | de5f59219ac02c6502907f6a24538ddabf487839 (diff) | |
download | emacs-92dc81f85e1b91db04487ccf1b52c0cd3328dfee.tar.gz emacs-92dc81f85e1b91db04487ccf1b52c0cd3328dfee.tar.bz2 emacs-92dc81f85e1b91db04487ccf1b52c0cd3328dfee.zip |
Merge remote-tracking branch 'savannah/master' into HEAD
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/dnd.el | 19 | ||||
-rw-r--r-- | lisp/net/browse-url.el | 64 | ||||
-rw-r--r-- | lisp/net/tramp-adb.el | 4 | ||||
-rw-r--r-- | lisp/net/tramp-sh.el | 4 |
4 files changed, 51 insertions, 40 deletions
diff --git a/lisp/dnd.el b/lisp/dnd.el index 2f7b16c56ed..c185794d6ea 100644 --- a/lisp/dnd.el +++ b/lisp/dnd.el @@ -92,7 +92,6 @@ If no match is found here, `browse-url-handlers' and 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 (catch 'done @@ -102,19 +101,11 @@ is what has been dropped. Returns 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))) + (let ((browser (browse-url-select-handler url))) + (when browser + (setq ret 'private) + (funcall browser url action) + (throw 'done t))) nil) (progn (dnd-insert-text window action url) diff --git a/lisp/net/browse-url.el b/lisp/net/browse-url.el index 1275c15578f..b34665358ca 100644 --- a/lisp/net/browse-url.el +++ b/lisp/net/browse-url.el @@ -601,10 +601,17 @@ down (this *won't* always work)." "Calls `browse-url-man-function' with URL and ARGS." (funcall browse-url-man-function url args)) +(defun browse-url--browser (url &rest args) + "Calls `browse-url-browser-function' with URL and ARGS." + (funcall browse-url-browser-function url args)) + ;;;###autoload (defvar browse-url-default-handlers '(("\\`mailto:" . browse-url--mailto) ("\\`man:" . browse-url--man) + ;; Render file:// URLs if they are HTML pages, otherwise just find + ;; the file. + ("\\`file://.*\\.html?\\b" . browse-url--browser) ("\\`file://" . browse-url-emacs)) "Like `browse-url-handlers' but populated by Emacs and packages. @@ -628,6 +635,32 @@ match, the URL is opened using the value of :value-type (function :tag "Handler")) :version "28.1") +;;;###autoload +(defun browse-url-select-handler (url) + "Return a handler suitable for browsing URL. +This searches `browse-url-handlers', and +`browse-url-default-handlers' for a matching handler. Return nil +if no handler is found. + +Currently, it also consults `browse-url-browser-function' first +if it is set to an alist, although this usage is deprecated since +Emacs 28.1 and will be removed in a future release." + (catch 'custom-url-handler + (dolist (regex-handler + (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. + (when (and (consp browse-url-browser-function) + (not (functionp browse-url-browser-function))) + (warn "Having `browse-url-browser-function' set to an +alist is deprecated. Use `browse-url-handlers' instead.") + browse-url-browser-function) + browse-url-handlers + browse-url-default-handlers)) + (when (string-match-p (car regex-handler) url) + (throw 'custom-url-handler (cdr regex-handler)))))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; URL encoding @@ -821,14 +854,8 @@ If ARGS are omitted, the default is to pass (not (string-match "\\`[a-z]+:" url))) (setq url (expand-file-name url))) (let ((process-environment (copy-sequence process-environment)) - (function - (catch 'custom-url-handler - (dolist (regex-handler (append browse-url-handlers - browse-url-default-handlers)) - (when (string-match-p (car regex-handler) url) - (throw 'custom-url-handler (cdr regex-handler)))) - ;; No special handler found. - browse-url-browser-function)) + (function (or (browse-url-select-handler url) + browse-url-browser-function)) ;; Ensure that `default-directory' exists and is readable (bug#6077). (default-directory (or (unhandled-file-name-directory default-directory) (expand-file-name "~/")))) @@ -837,24 +864,9 @@ If ARGS are omitted, the default is to pass ;; which may not even exist any more. (if (stringp (frame-parameter nil 'display)) (setenv "DISPLAY" (frame-parameter nil 'display))) - (if (and (consp function) - (not (functionp function))) - ;; The `function' can be an alist; look down it for first - ;; match and apply the function (which might be a lambda). - ;; However, this usage is deprecated as of Emacs 28.1. - (progn - (warn "Having `browse-url-browser-function' set to an -alist is deprecated. Use `browse-url-handlers' instead.") - (catch 'done - (dolist (bf function) - (when (string-match (car bf) url) - (apply (cdr bf) url args) - (throw 'done t))) - (error "No browse-url-browser-function matching URL %s" - url))) - ;; Unbound symbols go down this leg, since void-function from - ;; apply is clearer than wrong-type-argument from dolist. - (apply function url args)))) + (if (functionp nil) + (apply function url args) + (error "No suitable browser for URL %s" url)))) ;;;###autoload (defun browse-url-at-point (&optional arg) diff --git a/lisp/net/tramp-adb.el b/lisp/net/tramp-adb.el index 7f829f15205..7ef07afb8ef 100644 --- a/lisp/net/tramp-adb.el +++ b/lisp/net/tramp-adb.el @@ -918,6 +918,10 @@ PRESERVE-UID-GID and PRESERVE-EXTENDED-ATTRIBUTES are completely ignored." (kill-buffer (tramp-get-connection-buffer v)) (setq ret 1))) + ;; Handle signals. + (when (and (natnump ret) (> ret 128)) + (setq ret (format "Signal %d" (- ret 128)))) + ;; Provide error file. (when tmpstderr (rename-file tmpstderr (cadr destination) t)) diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el index c6eb7a8ff49..c609f58cdd8 100644 --- a/lisp/net/tramp-sh.el +++ b/lisp/net/tramp-sh.el @@ -3159,6 +3159,10 @@ STDERR can also be a file name." (kill-buffer (tramp-get-connection-buffer v)) (setq ret 1))) + ;; Handle signals. + (when (and (natnump ret) (> ret 128)) + (setq ret (format "Signal %d" (- ret 128)))) + ;; Provide error file. (when tmpstderr (rename-file tmpstderr (cadr destination) t)) |