[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [Orgmode] %20 in file://... URL

From: Vincent Belaïche
Subject: RE: [Orgmode] %20 in file://... URL
Date: Mon, 22 Nov 2010 16:46:16 +0100

> Date: Wed, 17 Nov 2010 21:43:59 +0100
> From: address@hidden
> To: address@hidden
> Subject: Re: [Orgmode] %20 in file://... URL
> CC: address@hidden; address@hidden



Sorry for the delay, I was on business trip. 
> Thanks for sending the patch, but it won't provide a clean solution to
> the problem: The function modified by your patch works under the
> assumption, that for example the sequence %3A represents a percent
> escaped colon.  But the function that creates the link in the first
> place does not percent-escape chars 

Er, in my situation I create the link with another package, and I *did*
escaped the colon.

> -- If we use just this patch, opening a link to a file literarally
> called "%3A.org" will fail.
> So we need to modify all functions that create links to propertly
> percent-escape the part of a link that follows the link type in order
> to make all functions unescape the link.
> Good news: Reworking the percent-escaping is a work in progress on my
> list[1] and if it is finished and accepted, the problem should be
> solved.
> Best,
>   -- David

I see, so I understand that you will someday modify a function creating
links in order to implement character escaping. I can give a hand if
tell me the function name.

I also send you my patch with a git diff, just in case (with same
changelog attached again). Sorry for using `diff -c', I just followed
the info node `(emacs) Sending Patches'


diff --git a/lisp/org.el b/lisp/org.el
index 201dd87..4e2e2c4 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -9639,9 +9639,28 @@ to search for.  If LINE or SEARCH is given, the file 
will be
 opened in Emacs, unless an entry from org-file-apps that makes
 use of groups in a regexp matches.
 If the file does not exist, an error is thrown."
-  (let* ((file (if (equal path "")
+  (let* ((%xx-decoded-path 
+         (let ((pos 0) (%xx-decoded-path path))
+           (setq %xx-decoded-path path)
+           (while (setq pos (string-match "%\\([0-9A-F]\\)\\([0-9A-F]\\)" 
%xx-decoded-path pos))
+             (setq pos (1+ pos)
+                   %xx-decoded-path (replace-match 
+                                     (string (let ((code 0) digit)
+                                               (dotimes (i 2)
+                                                 (setq 
+                                                  digit (aref (match-string 
(1+ i) %xx-decoded-path) 0)
+                                                  code (+ (if (<= digit ?9)
+                                                              (- digit ?0)
+                                                            (- digit 55))
+                                                          (* 16 code)))) code))
+                                     t t %xx-decoded-path)))
+           ;; remove //localhost/ prefix if any
+           (and (string-match "\\`//localhost/" %xx-decoded-path)
+                (setq %xx-decoded-path (substring %xx-decoded-path 12)))
+           %xx-decoded-path))
+        (file (if (equal path "")
-                (substitute-in-file-name (expand-file-name path))))
+                (substitute-in-file-name (expand-file-name %xx-decoded-path))))
         (file-apps (append org-file-apps (org-default-apps)))
         (apps (org-remove-if
                'org-file-apps-entry-match-against-dlink-p file-apps))
2010-11-13  Vincent Belaïche  <address@hidden>

        * org.el (org-open-file): Decode %XX escapes in URL with file
        type, so that applications other than browsers are not confused with 
the filename.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]