From 28726bcc7b7c440d70e2d95ea5a61d0cd5f084ea Mon Sep 17 00:00:00 2001 From: Michael Brand Date: Sun, 5 May 2013 17:02:18 +0200 Subject: [PATCH] Escape double quotes in URL passed to browse-url * lisp/org.el (org-link-escape-chars-browser): Add char double quote. * lisp/org.el (org-open-at-point): Make use of the constant `org-link-escape-chars-browser'. * testing/lisp/test-org.el (test-org/org-link-unescape-ascii-extended-char): Fill paragraph. (test-org/org-link-escape-url-with-escaped-char): Fill paragraph and typo. (test-org/org-link-escape-chars-browser): New test. This is to make work to open the Org link [[http://some.host.com/search?q="Org mode"]] in a browser. --- lisp/org.el | 26 +++++++++++++++++--------- testing/lisp/test-org.el | 16 +++++++++++++--- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/lisp/org.el b/lisp/org.el index ae0110f..b839a8f 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -9693,7 +9693,7 @@ according to FMT (default from `org-email-link-description-format')." This is the list that is used for internal purposes.") (defconst org-link-escape-chars-browser - '(?\ ) + '(?\ ?\") "List of escapes for characters that are problematic in links. This is the list that is used before handing over to the browser.") @@ -10423,16 +10423,24 @@ application the system uses for this file type." (apply cmd (nreverse args1)))) ((member type '("http" "https" "ftp" "news")) - (browse-url (concat type ":" (if (org-string-match-p "[[:nonascii:] ]" path) - (org-link-escape - path org-link-escape-chars-browser) - path)))) + (browse-url + (concat type ":" + (if (org-string-match-p + (concat "[[:nonascii:]" + org-link-escape-chars-browser "]") + path) + (org-link-escape path org-link-escape-chars-browser) + path)))) ((string= type "doi") - (browse-url (concat org-doi-server-url (if (org-string-match-p "[[:nonascii:] ]" path) - (org-link-escape - path org-link-escape-chars-browser) - path)))) + (browse-url + (concat org-doi-server-url + (if (org-string-match-p + (concat "[[:nonascii:]" + org-link-escape-chars-browser "]") + path) + (org-link-escape path org-link-escape-chars-browser) + path)))) ((member type '("message")) (browse-url (concat type ":" path))) diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el index 259dc04..6aa0de7 100644 --- a/testing/lisp/test-org.el +++ b/testing/lisp/test-org.el @@ -395,15 +395,25 @@ (should (string= "àâçèéêîôùû" - (decode-coding-string (org-link-unescape "%E0%E2%E7%E8%E9%EA%EE%F4%F9%FB") 'latin-1)))) + (decode-coding-string + (org-link-unescape "%E0%E2%E7%E8%E9%EA%EE%F4%F9%FB") 'latin-1)))) (ert-deftest test-org/org-link-escape-url-with-escaped-char () - "Escape and unscape a URL that includes an escaped char. + "Escape and unescape a URL that includes an escaped char. http://article.gmane.org/gmane.emacs.orgmode/21459/" (should (string= "http://some.host.com/form?&id=blah%2Bblah25" - (org-link-unescape (org-link-escape "http://some.host.com/form?&id=blah%2Bblah25"))))) + (org-link-unescape + (org-link-escape "http://some.host.com/form?&id=blah%2Bblah25"))))) + +(ert-deftest test-org/org-link-escape-chars-browser () + "Escape a URL to pass to `browse-url'." + (should + (string= + "http://some.host.com/search?q=%22Org%20mode%22" + (org-link-escape "http://some.host.com/search?q=\"Org mode\"" + org-link-escape-chars-browser)))) -- 1.7.4.2