diff options
author | Chong Yidong <cyd@gnu.org> | 2012-05-10 14:27:12 +0800 |
---|---|---|
committer | Chong Yidong <cyd@gnu.org> | 2012-05-10 14:27:12 +0800 |
commit | 9f9aa0448aa1b5317d8903e33db1e3bb27e98ece (patch) | |
tree | 326360d5b258a5c269c20f12a19a9cead3fbf0f7 /lisp/url/url-util.el | |
parent | 97107e2e531ee355f517990eed735fa657b7105b (diff) | |
download | emacs-9f9aa0448aa1b5317d8903e33db1e3bb27e98ece.tar.gz emacs-9f9aa0448aa1b5317d8903e33db1e3bb27e98ece.tar.bz2 emacs-9f9aa0448aa1b5317d8903e33db1e3bb27e98ece.zip |
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.el | 37 |
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))) |