Function: url-scheme-register-proxy
url-scheme-register-proxy is a byte-compiled function defined in
url-methods.el.gz.
Signature
(url-scheme-register-proxy SCHEME)
Documentation
Automatically find a proxy for SCHEME and put it in url-proxy-services.
Source Code
;; Defined in /usr/src/emacs/lisp/url/url-methods.el.gz
(defun url-scheme-register-proxy (scheme)
"Automatically find a proxy for SCHEME and put it in `url-proxy-services'."
(let* ((env-var (concat scheme "_proxy"))
(env-proxy (or (getenv (upcase env-var))
(getenv (downcase env-var))))
(cur-proxy (assoc scheme url-proxy-services))
(urlobj nil)
(url-scheme--registering-proxy t))
;; If env-proxy is an empty string, treat it as if it were nil
(when (and (stringp env-proxy)
(string= env-proxy ""))
(setq env-proxy nil))
;; Store any proxying information - this will not overwrite an old
;; entry, so that people can still set this information in their
;; init file
(cond
(cur-proxy nil) ; Keep their old settings
((null env-proxy) nil) ; No proxy setup
;; First check if its something like hostname:port
((string-match "^\\([^:]+\\):\\([0-9]+\\)$" env-proxy)
(setq urlobj (url-generic-parse-url nil)) ; Get a blank object
(setf (url-type urlobj) "http")
(setf (url-host urlobj) (match-string 1 env-proxy))
(setf (url-port urlobj) (string-to-number (match-string 2 env-proxy))))
;; Then check if its a fully specified URL
((string-match url-nonrelative-link env-proxy)
(setq urlobj (url-generic-parse-url env-proxy))
(setf (url-type urlobj) "http")
(setf (url-target urlobj) nil))
;; Finally, fall back on the assumption that its just a hostname
(t
(setq urlobj (url-generic-parse-url nil)) ; Get a blank object
(setf (url-type urlobj) "http")
(setf (url-host urlobj) env-proxy)))
(if (and (not cur-proxy) urlobj)
(progn
(setq url-proxy-services
(cons (cons scheme (format "%s:%d" (url-host urlobj)
(url-port urlobj)))
url-proxy-services))
(message "Using a proxy for %s..." scheme)))))