Emacs : GNU Emacs 23.1.1 (i386-redhat-linux-gnu, GTK+ Version 2.18.3) of 2009-12-02 on x86-7.fedora.phx.redhat.com Package: Org-mode version 6.34a
Hi all, When an org link is created from an URL containing a hex escape `org-make-link-string' creates a link that ends up corrupted the moment it is followed (e.g. using `org-open-at-point'). I've traced this back to `org-link-escape' and `org-link-unescape'. The following shows how the hex code "%2B" is converted to a "+" after an escaping round trip: (org-link-unescape (org-link-escape "http://some.host.com/form?&id=blah%2Bblah")) ==> "http://some.host.com/form?&id=blah+blah" In my case this small change ended up in a broken URL. Additionally, when the URL-escape happens to be in lower case (or otherwise not present in `org-link-escape-chars') we end up with an error: (org-link-unescape (org-link-escape "http://some.host.com/form?&id=blah%2bblah")) ==> Debugger entered--Lisp error: (wrong-type-argument characterp nil) char-to-string(nil) ... When `org-url-encoding-use-url-hexify' is set to `t' we do get a proper round trip of the URL containing hex-escapes: (setq org-url-encoding-use-url-hexify t) (org-link-unescape (org-link-escape "http://some.host.com/form?&id=blah%2bblah")) ==> "http://some.host.com/form?&id=blah%2bblah" Setting `org-url-encoding-use-url-hexify' does not fix the complete problem however: `org-open-at-point' still did not end up with the proper URL. Within `org-open-at-point' there is another call to `org-link-escape': (org-link-escape path org-link-escape-chars-browser) This time a mapping table is passed in explicitly (the second argument). However, when `org-url-encoding-use-url-hexify' is set,a this mapping table isn't used, resulting (again) in a broken URL. I have attached a patch that fixes the problem: do not use url-hexify in `org-link-escape' and `org-link-unescape' when an explicit mapping table has been specified. In summary: - the default behaviour of `org-link-escape', with `org-url-encoding-use-url-hexify' set to nil, has some issues with handling URLS which contain url-encoded hex escapes - when a mapping table is passed to `org-link-escape' and `org-link-unescape', they should probably not use url-hexify. Patch attached. Best regards, Geert Kloosterman
--- org.el.orig 2010-01-12 08:54:31.000000000 +0100 +++ org.el 2010-01-15 14:14:38.000000000 +0100 @@ -7893,7 +7893,7 @@ (defun org-link-escape (text &optional table) "Escape characters in TEXT that are problematic for links." - (if org-url-encoding-use-url-hexify + (if (and org-url-encoding-use-url-hexify (not table)) (url-hexify-string text) (setq table (or table org-link-escape-chars)) (when text @@ -7910,7 +7910,7 @@ (defun org-link-unescape (text &optional table) "Reverse the action of `org-link-escape'." - (if org-url-encoding-use-url-hexify + (if (and org-url-encoding-use-url-hexify (not table)) (url-unhex-string text) (setq table (or table org-link-escape-chars)) (when text
_______________________________________________ Emacs-orgmode mailing list Please use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode