diff options
author | Michael Olson <mwolson@gnu.org> | 2008-02-15 02:58:00 +0000 |
---|---|---|
committer | Michael Olson <mwolson@gnu.org> | 2008-02-15 02:58:00 +0000 |
commit | 6f8dc64b8d9b65887a29a0f94705cbf9ac2bf631 (patch) | |
tree | 612c6ee6daf65c634c512872b7566e7d1125d498 | |
parent | 535f7f7bf8ca34162b3ad854576d78ebf3ffb480 (diff) |
emms-url: Improve emms-url-quote.
- Don't clobber the match data.
- Don't escape the colon in "http://".
darcs-hash:20080215025800-1bfb2-ad6899b9c1134c782a1fab2ca206e158d62042e3.gz
-rw-r--r-- | emms-url.el | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/emms-url.el b/emms-url.el index 9fca29d..59c09f5 100644 --- a/emms-url.el +++ b/emms-url.el @@ -35,19 +35,25 @@ quoted. e.g., (url-quote \"abc def\") => \"abc%20def\"." (or safe (setq safe "")) - (mapconcat (lambda (c) - (if (if (string-match "]" safe) - ;; ] should be place at the beginning inside [] - (string-match - (format "[]a-zA-Z_.-/%s]" - (emms-replace-regexp-in-string "]" "" safe)) - (char-to-string c)) - (string-match (format "[a-zA-Z_.-/%s]" safe) - (char-to-string c))) - (char-to-string c) - (format "%%%02x" c))) - (string-to-list (encode-coding-string s 'utf-8)) - "")) + (save-match-data + (string-match "\\`\\([^:]+:\\)\\(.+\\)\\'" s) + (let ((handler (match-string 1 s)) + (loc (or (match-string 2 s) s))) + (concat handler + (mapconcat + (lambda (c) + (if (if (string-match "]" safe) + ;; ] should be place at the beginning inside [] + (string-match + (format "[]a-zA-Z_.-/%s]" + (emms-replace-regexp-in-string "]" "" safe)) + (char-to-string c)) + (string-match (format "[a-zA-Z_.-/%s]" safe) + (char-to-string c))) + (char-to-string c) + (format "%%%02x" c))) + (string-to-list (encode-coding-string loc 'utf-8)) + ""))))) (defun emms-url-quote-plus (s &optional safe) "Run (emms-url-quote s \" \"), then replace ` ' with `+'." |