summaryrefslogtreecommitdiff
path: root/lisp/url/url-util.el
diff options
context:
space:
mode:
authorChong Yidong <cyd@gnu.org>2012-05-10 14:27:12 +0800
committerChong Yidong <cyd@gnu.org>2012-05-10 14:27:12 +0800
commit9f9aa0448aa1b5317d8903e33db1e3bb27e98ece (patch)
tree326360d5b258a5c269c20f12a19a9cead3fbf0f7 /lisp/url/url-util.el
parent97107e2e531ee355f517990eed735fa657b7105b (diff)
downloademacs-9f9aa0448aa1b5317d8903e33db1e3bb27e98ece.tar.gz
Cleanups and improvements for FFAP and URL.
* ffap.el (ffap-url-unwrap-local): Make it work right. Use url-generic-parse-url, and handle host names and Windows filenames properly. (ffap-url-unwrap-remote): Use url-generic-parse-url. (ffap-url-unwrap-remote): Accept list values, specifying a list of URL schemes to work on. (ffap--toggle-read-only): New function. (ffap-read-only, ffap-read-only-other-window) (ffap-read-only-other-frame): Use it. (ffap-fixup-url): Don't check ffap-ftp-regexp, since it is not necessary for ffap-url-unwrap-remote. * url-parse.el (url-path-and-query, url-port-if-non-default): New functions. (url-generic-parse-url): Don't set the portspec slot if it is not specified; that is what `url-port' is for. (url-port): Only require the scheme to be specified to call url-scheme-get-property. * url-util.el (url-encode-url): Use url-path-and-query. * url-vars.el (url-mime-charset-string): Load mm-util lazily. Fixes: debbugs:9131
Diffstat (limited to 'lisp/url/url-util.el')
-rw-r--r--lisp/url/url-util.el37
1 files changed, 16 insertions, 21 deletions
diff --git a/lisp/url/url-util.el b/lisp/url/url-util.el
index 4185c87918e..71bc84cab09 100644
--- a/lisp/url/url-util.el
+++ b/lisp/url/url-util.el
@@ -418,31 +418,26 @@ should return it unchanged."
(user (url-user obj))
(pass (url-password obj))
(host (url-host obj))
- (file (url-filename obj))
- (frag (url-target obj))
- path query)
+ (path-and-query (url-path-and-query obj))
+ (path (car path-and-query))
+ (query (cdr path-and-query))
+ (frag (url-target obj)))
(if user
(setf (url-user obj) (url-hexify-string user)))
(if pass
(setf (url-password obj) (url-hexify-string pass)))
- (when host
- ;; No special encoding for IPv6 literals.
- (unless (string-match "\\`\\[.*\\]\\'" host)
- (setf (url-host obj)
- (url-hexify-string host url-host-allowed-chars))))
- ;; Split FILENAME slot into its PATH and QUERY components, and
- ;; encode them separately. The PATH component can contain
- ;; unreserved characters, %-encodings, and /:@!$&'()*+,;=
- (when file
- (if (string-match "\\?" file)
- (setq path (substring file 0 (match-beginning 0))
- query (substring file (match-end 0)))
- (setq path file))
- (setq path (url-hexify-string path url-path-allowed-chars))
- (if query
- (setq query (url-hexify-string query url-query-allowed-chars)))
- (setf (url-filename obj)
- (if query (concat path "?" query) path)))
+ ;; No special encoding for IPv6 literals.
+ (and host
+ (not (string-match "\\`\\[.*\\]\\'" host))
+ (setf (url-host obj)
+ (url-hexify-string host url-host-allowed-chars)))
+
+ (if path
+ (setq path (url-hexify-string path url-path-allowed-chars)))
+ (if query
+ (setq query (url-hexify-string query url-query-allowed-chars)))
+ (setf (url-filename obj) (if query (concat path "?" query) path))
+
(if frag
(setf (url-target obj)
(url-hexify-string frag url-query-allowed-chars)))