emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* org-remember support in xournal
@ 2010-01-31  8:39 D M German
  2010-01-31  8:45 ` dmg
  2010-02-03  9:19 ` Jan Böcker
  0 siblings, 2 replies; 11+ messages in thread
From: D M German @ 2010-01-31  8:39 UTC (permalink / raw)
  To: emacs-orgmode


Hi everybody,

I am sorry I have been a bit slow to finish the integration of xournal
with remember mode. I think I got it working. 

My branch of xournal is available at github:

http://github.com/jboecker/xournal

If the loaded file in xournal is a PDF, the remember link is created to
the .pdf file. Otherwise it is created to the .xoj file.

In both cases the protocol is docview:

emacsclient 'org-protocol://remember://docview:filename::pagenumber

Evince has become a bit trickier because it does not support jumping to
a specific page number (it uses labels instead). So I need to do a bit 
more hacking within it.

Remember, this is an unofficial branch of xournal. It actually supports
more features than xournal (such as jumping to previous, next
annotation, very, very rough search features, and ability to attach
images to the xoj file. 

--dmg



-- 
--
Daniel M. German                  
http://turingmachine.org/
http://silvernegative.com/
dmg (at) uvic (dot) ca
replace (at) with @ and (dot) with .

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: org-remember support in xournal
  2010-01-31  8:39 org-remember support in xournal D M German
@ 2010-01-31  8:45 ` dmg
  2010-02-03  9:19 ` Jan Böcker
  1 sibling, 0 replies; 11+ messages in thread
From: dmg @ 2010-01-31  8:45 UTC (permalink / raw)
  To: emacs-orgmode

>
> My branch of xournal is available at github:
>
> http://github.com/jboecker/xournal

My apologies. I pointed to the wrong branch of xournal, mine is:

http://github.com/dmgerman/xournal

--dmg

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: org-remember support in xournal
  2010-01-31  8:39 org-remember support in xournal D M German
  2010-01-31  8:45 ` dmg
@ 2010-02-03  9:19 ` Jan Böcker
  2010-02-03  9:22   ` dmg
  2010-02-04 18:43   ` org-protocol: non-ASCII characters D M German
  1 sibling, 2 replies; 11+ messages in thread
From: Jan Böcker @ 2010-02-03  9:19 UTC (permalink / raw)
  To: dmg; +Cc: emacs-orgmode

> Hi everybody,
> 
> I am sorry I have been a bit slow to finish the integration of xournal
> with remember mode. I think I got it working. 

Hi Daniel,

that is great!

After learning about org-protocol on worg, I got it working.
There seems to be a problem with non-ASCII characters in the file names,
though: an "ü" in the file path arrived in emacs as "%0 %))".


> If the loaded file in xournal is a PDF, the remember link is created to
> the .pdf file. Otherwise it is created to the .xoj file.
> 
> In both cases the protocol is docview:
> 
> emacsclient 'org-protocol://remember://docview:filename::pagenumber

Can you add a second menu item ("Store Link"), which uses
'org-protocol://store-link://docview:filename::pagenumber'?

- Jan

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: org-remember support in xournal
  2010-02-03  9:19 ` Jan Böcker
@ 2010-02-03  9:22   ` dmg
  2010-02-04 18:43   ` org-protocol: non-ASCII characters D M German
  1 sibling, 0 replies; 11+ messages in thread
From: dmg @ 2010-02-03  9:22 UTC (permalink / raw)
  To: Jan Böcker; +Cc: emacs-orgmode

On Wed, Feb 3, 2010 at 1:19 AM, Jan Böcker <jan.boecker@jboecker.de> wrote:
>> Hi everybody,
>>
>> I am sorry I have been a bit slow to finish the integration of xournal
>> with remember mode. I think I got it working.
>
> Hi Daniel,
>
> that is great!
>
> After learning about org-protocol on worg, I got it working.

good. first person who uses it beside me!

> There seems to be a problem with non-ASCII characters in the file names,
> though: an "ü" in the file path arrived in emacs as "%0 %))".

I wonder if that would have been a problem. I had to write my own
functions to encode the
non alphanumeric characters. I'll look into it, but will have to wait
until next week.


>
>> If the loaded file in xournal is a PDF, the remember link is created to
>> the .pdf file. Otherwise it is created to the .xoj file.
>>
>> In both cases the protocol is docview:
>>
>> emacsclient 'org-protocol://remember://docview:filename::pagenumber
>
> Can you add a second menu item ("Store Link"), which uses
> 'org-protocol://store-link://docview:filename::pagenumber'?
>

I will. Next week though.


> - Jan
>
>



-- 
--dmg

---
Daniel M. German
http://turingmachine.org

^ permalink raw reply	[flat|nested] 11+ messages in thread

* org-protocol: non-ASCII characters
  2010-02-03  9:19 ` Jan Böcker
  2010-02-03  9:22   ` dmg
@ 2010-02-04 18:43   ` D M German
  2010-02-06 13:50     ` Jan Böcker
  1 sibling, 1 reply; 11+ messages in thread
From: D M German @ 2010-02-04 18:43 UTC (permalink / raw)
  To: Jan Böcker; +Cc: emacs-orgmode



 Jan> After learning about org-protocol on worg, I got it working.
 Jan> There seems to be a problem with non-ASCII characters in the file names,
 Jan> though: an "ü" in the file path arrived in emacs as "%0 %))".


I have been looking around and I am not sure how to solve this
problem. Withing Evince and Xournal I am encoding any non alphanum (as
defined by the C macro) each byte that is contained in the filename
individually.

Does anybody know which are the characters above 0 (zero) that need to
be encoded for a safe org link? 

--dmg


--
Daniel M. German                  
http://turingmachine.org/
http://silvernegative.com/
dmg (at) uvic (dot) ca
replace (at) with @ and (dot) with .

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: org-protocol: non-ASCII characters
  2010-02-04 18:43   ` org-protocol: non-ASCII characters D M German
@ 2010-02-06 13:50     ` Jan Böcker
  2010-02-06 14:35       ` Jan Böcker
  0 siblings, 1 reply; 11+ messages in thread
From: Jan Böcker @ 2010-02-06 13:50 UTC (permalink / raw)
  To: dmg; +Cc: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 803 bytes --]

> I have been looking around and I am not sure how to solve this
> problem. Withing Evince and Xournal I am encoding any non alphanum (as
> defined by the C macro) each byte that is contained in the filename
> individually.
> 
> Does anybody know which are the characters above 0 (zero) that need to
> be encoded for a safe org link? 

AFAIK, your current approach is correct.

I think I figured it out for evince: the file name you get from evince
is already URI-encoded.

The attached patch fixes the problem for me, but I do not know if it is
the right thing to do. I assume that the forward slashes in the file
name still have to be encoded so that org-protocol is not confused; the
patch disables URI-encoding for percent signs, so that already
URI-encoded characters pass through unharmed.

- Jan

[-- Attachment #2: qnd-fix.patch --]
[-- Type: text/plain, Size: 378 bytes --]

diff --git a/libview/ev-view.c b/libview/ev-view.c
index c8145ff..c575831 100644
--- a/libview/ev-view.c
+++ b/libview/ev-view.c
@@ -5752,7 +5752,7 @@ ev_view_previous_page (EvView *view)
 		
 static gint is_unchanged_uri_char(char c)
 {
-  return isalnum(c);
+	return ((c == '%') || isalnum(c));
 }
 
 static void encode_uri(gchar *encoded_uri, gint bufsize, const gchar *uri)

[-- Attachment #3: Type: text/plain, Size: 201 bytes --]

_______________________________________________
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

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: Re: org-protocol: non-ASCII characters
  2010-02-06 13:50     ` Jan Böcker
@ 2010-02-06 14:35       ` Jan Böcker
  2010-02-08 11:30         ` Sebastian Rose
  0 siblings, 1 reply; 11+ messages in thread
From: Jan Böcker @ 2010-02-06 14:35 UTC (permalink / raw)
  To: dmg; +Cc: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 357 bytes --]

On 06.02.2010 14:50, Jan Böcker wrote:
> AFAIK, your current approach is correct.

I was wrong. The attached patch fixes a bug in the encode_uri function.
That fixes the non-ASCII characters problem in xournal for me.

The gchar type is just typedef'd to char, which means it is signed. To
get the byte value, it must be cast to unsigned int first.

- Jan

[-- Attachment #2: encode_uri.patch --]
[-- Type: text/plain, Size: 524 bytes --]

diff --git a/src/xo-misc.c b/src/xo-misc.c
index 6f0528c..c2582c7 100644
--- a/src/xo-misc.c
+++ b/src/xo-misc.c
@@ -2441,8 +2441,8 @@ void encode_uri(gchar *encoded_uri, gint bufsize, const gchar *uri)
       if (k + 4 >= bufsize)
         break;
       encoded_uri[k++] = '%';
-      encoded_uri[k++] = hexa[uri[i] / 16];
-      encoded_uri[k++] = hexa[uri[i] % 16];
+      encoded_uri[k++] = hexa[(unsigned char)uri[i] / 16];
+      encoded_uri[k++] = hexa[(unsigned char)uri[i] % 16];
     }
   }
   encoded_uri[k] = 0;

[-- Attachment #3: Type: text/plain, Size: 201 bytes --]

_______________________________________________
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

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: Re: org-protocol: non-ASCII characters
  2010-02-06 14:35       ` Jan Böcker
@ 2010-02-08 11:30         ` Sebastian Rose
  2010-02-12 22:23           ` dmg
  0 siblings, 1 reply; 11+ messages in thread
From: Sebastian Rose @ 2010-02-08 11:30 UTC (permalink / raw)
  To: Jan Böcker; +Cc: emacs-orgmode, dmg

Jan Böcker <jan.boecker@jboecker.de> writes:
> On 06.02.2010 14:50, Jan Böcker wrote:
>> AFAIK, your current approach is correct.
>
> I was wrong. The attached patch fixes a bug in the encode_uri function.
> That fixes the non-ASCII characters problem in xournal for me.
>
> The gchar type is just typedef'd to char, which means it is signed. To
> get the byte value, it must be cast to unsigned int first.
>
> - Jan


Hi Jan and Daniel!



Sorry for answering with that long delay. I read Daniel's mail last
week, but I had to think about the answer.


I'll just describe, what the `org-protocol-unhex-string' functions do
here, and what they expect as arguments.




Basically, it is OK to url-encode each character who's binary
representation start with 1 (i.e., the value of the character is higher
than 127). The text to be url-encoded should be UTF-8 ideally.

If you use glib::ustring, it's easy to transform any iso-8859 string to
utf-8. Each character, whos binary representation start with a 1, has to
be url-encoded as well as the `%' character [1], but you could as
url-encode the entire utf-8 string.






The function that does the decoding is `org-protocol-unhex-string' which
in turn uses `org-protocol-unhex-compound'.


`man utf-8` shows, how org-protocol tries to decode characters.


The JavaScript-Funktion `encodeURIComponent()' returns exactly what we
need. It recodes a string to utf-8 and then encodes all characters,
except digits, ASCII letters and these punctuation characters: -_.!~*'()

See ECMA-262 Standard, Section 15.1.3
(http://bclary.com/2004/11/07/ecma-262.html#a-15.1.3 [2]):

   "The character is first transformed into a sequence of octets using
    the UTF-8 transformation..."


Again, note, that the decoding mechanism relies on the fact, that the
sequence to decode is url-encoded UTF-8.





Example:

  The url-encoded unicode representation of the German umlaut `ö' is
  `%C3%B6'. Thus

     (org-protocol-unhex-string "%C3%B6")

  gives you "ö".

  In iso-8859-1, the url-encoded representation of the same character `ö' was
  `%F6'. But

     (org-protocol-unhex-string "%F6")

  gives you "" - the empty string. There is no utf-8 character with this binary
  representation, since every byte starting with a 1 (i.e. is bigger than 127)
  starts a multibyte sequence (2 or more bytes).

  But:

     (org-protocol-unhex-string "%2F%3C")

  gives you, as expected,  "/<" which shows, that you could savely
  url-encode each and every character of a utf-8 encoded string.


==  Footnotes:

[1] The percent character `%' has to be encoded, if followed by
    [0-9A-Fa-f]{2}, because org-protocol will assume, that a sequence
    matching "\\(%[0-9a-f][0-9a-f]\\)+" is an encoded character. That
    said, a `%' has to be url-encoded, since one will hardly ever
    know for sure, that a `%' is never followed by "[0-9a-f][0-9a-f]".

[2] Get a PDF version of ECMA-262 third edition here:
    http://www.ecma-international.org/publications/standards/Ecma-262.htm

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Re: org-protocol: non-ASCII characters
  2010-02-08 11:30         ` Sebastian Rose
@ 2010-02-12 22:23           ` dmg
  2010-02-13 13:22             ` Jan Böcker
  0 siblings, 1 reply; 11+ messages in thread
From: dmg @ 2010-02-12 22:23 UTC (permalink / raw)
  To: Sebastian Rose; +Cc: emacs-orgmode

> Basically, it is OK to url-encode each character who's binary
> representation start with 1 (i.e., the value of the character is higher
> than 127). The text to be url-encoded should be UTF-8 ideally.
>
> If you use glib::ustring, it's easy to transform any iso-8859 string to
> utf-8. Each character, whos binary representation start with a 1, has to
> be url-encoded as well as the `%' character [1], but you could as
> url-encode the entire utf-8 string.
>
>

Ok, I think I understand the problem now. I have updated xournal to encode the
filename from its encoding to uft8. that seems to work. See

http://github.com/dmgerman/xournal

For evince, I think I have found a problem in the parsing of the link.
Evince already encodes
the URL, but it does not encode the '/', hence you will get a link like this:

emacsclient 'org-protocol://remember://docview/tmp/00%C3%A1%C3%A9%C3%AD%C3%B3%C3%BA.pdf::1'

the filename is  /tmp/00áéíóú.pdf

But emacs incorrectly stops parsing the link after tmp/

By the way, xournal now supports store-link


--dmg

>
>
>
>
> The function that does the decoding is `org-protocol-unhex-string' which
> in turn uses `org-protocol-unhex-compound'.
>
>
> `man utf-8` shows, how org-protocol tries to decode characters.
>
>
> The JavaScript-Funktion `encodeURIComponent()' returns exactly what we
> need. It recodes a string to utf-8 and then encodes all characters,
> except digits, ASCII letters and these punctuation characters: -_.!~*'()
>
> See ECMA-262 Standard, Section 15.1.3
> (http://bclary.com/2004/11/07/ecma-262.html#a-15.1.3 [2]):
>
>   "The character is first transformed into a sequence of octets using
>    the UTF-8 transformation..."
>
>
> Again, note, that the decoding mechanism relies on the fact, that the
> sequence to decode is url-encoded UTF-8.
>
>
>
>
>
> Example:
>
>  The url-encoded unicode representation of the German umlaut `ö' is
>  `%C3%B6'. Thus
>
>     (org-protocol-unhex-string "%C3%B6")
>
>  gives you "ö".
>
>  In iso-8859-1, the url-encoded representation of the same character `ö' was
>  `%F6'. But
>
>     (org-protocol-unhex-string "%F6")
>
>  gives you "" - the empty string. There is no utf-8 character with this binary
>  representation, since every byte starting with a 1 (i.e. is bigger than 127)
>  starts a multibyte sequence (2 or more bytes).
>
>  But:
>
>     (org-protocol-unhex-string "%2F%3C")
>
>  gives you, as expected,  "/<" which shows, that you could savely
>  url-encode each and every character of a utf-8 encoded string.
>
>
> ==  Footnotes:
>
> [1] The percent character `%' has to be encoded, if followed by
>    [0-9A-Fa-f]{2}, because org-protocol will assume, that a sequence
>    matching "\\(%[0-9a-f][0-9a-f]\\)+" is an encoded character. That
>    said, a `%' has to be url-encoded, since one will hardly ever
>    know for sure, that a `%' is never followed by "[0-9a-f][0-9a-f]".
>
> [2] Get a PDF version of ECMA-262 third edition here:
>    http://www.ecma-international.org/publications/standards/Ecma-262.htm
>
>



-- 
--dmg

---
Daniel M. German
http://turingmachine.org

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Re: org-protocol: non-ASCII characters
  2010-02-12 22:23           ` dmg
@ 2010-02-13 13:22             ` Jan Böcker
  2010-02-15  9:41               ` Sebastian Rose
  0 siblings, 1 reply; 11+ messages in thread
From: Jan Böcker @ 2010-02-13 13:22 UTC (permalink / raw)
  To: dmg; +Cc: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 1393 bytes --]

On 12.02.2010 23:23, dmg wrote:

> For evince, I think I have found a problem in the parsing of the link.
> Evince already encodes
> the URL, but it does not encode the '/', hence you will get a link like this:
> 
> emacsclient 'org-protocol://remember://docview/tmp/00%C3%A1%C3%A9%C3%AD%C3%B3%C3%BA.pdf::1'
> 
> the filename is  /tmp/00áéíóú.pdf
> 
> But emacs incorrectly stops parsing the link after tmp/

I think I have found the proper way to handle this in evince.
Check out the attached patch or pull from:

git://github.com/jboecker/evince.git

This code first retrieves the non-URI-encoded UTF-8 filename and passes
that to uri_encode. Should g_file_get_path return NULL, we abort,
because the URI specifies something in gnomes VFS layer that has no
local path, so the link would not work, anyway.

> By the way, xournal now supports store-link

Works as advertised, thanks!

The only problem I have left now is a cosmetic one: when I store a link
to, say, /tmp/test.xoj, in Org it becomes file://tmp/test.xoj instead of
file:/tmp/test.xoj. (I have patched xournal and evince to generate file:
instead of docview: links.)

This is because org-protocol-sanitize-uri is called after decoding the
string, allegedly because emacsclient compresses multiple slashes in a
row to one. However, it seems that this function should be applied
/before/ the string is URL-decoded. Is this a bug?


[-- Attachment #2: 0001-bugfix-in-encode_uri-cast-to-unsigned-char-to-get-th.patch --]
[-- Type: text/plain, Size: 913 bytes --]

From f777bca64fd23066f626bc55cee6a81d6e03dac5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20B=C3=B6cker?= <jan.boecker@jboecker.de>
Date: Sat, 13 Feb 2010 12:38:39 +0100
Subject: [PATCH 1/2] bugfix in encode_uri: cast to unsigned char to get the correct byte value

---
 libview/ev-view.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/libview/ev-view.c b/libview/ev-view.c
index c334fdc..1130d39 100644
--- a/libview/ev-view.c
+++ b/libview/ev-view.c
@@ -5775,8 +5775,8 @@ static void encode_uri(gchar *encoded_uri, gint bufsize, const gchar *uri)
       if (k + 4 >= bufsize)
         break;
       encoded_uri[k++] = '%';
-      encoded_uri[k++] = hexa[uri[i] / 16];
-      encoded_uri[k++] = hexa[uri[i] % 16];
+      encoded_uri[k++] = hexa[(unsigned char)uri[i] / 16];
+      encoded_uri[k++] = hexa[(unsigned char)uri[i] % 16];
     }
   }
   encoded_uri[k] = 0;
-- 
1.6.6.1


[-- Attachment #3: 0002-URI-encode-the-utf-8-filename-instead-of-a-partially.patch --]
[-- Type: text/plain, Size: 2258 bytes --]

From 1003e7809fbf2823e23b8dc8c7e3b46dfad0bcd5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20B=C3=B6cker?= <jan.boecker@jboecker.de>
Date: Sat, 13 Feb 2010 12:37:31 +0100
Subject: [PATCH 2/2] URI-encode the utf-8 filename instead of a partially URI-encoded gnome vfs uri

---
 libview/ev-view.c |   28 ++++++++++++++++------------
 1 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/libview/ev-view.c b/libview/ev-view.c
index 1130d39..4fda860 100644
--- a/libview/ev-view.c
+++ b/libview/ev-view.c
@@ -5800,9 +5800,18 @@ ev_view_annotate (EvView *ev_view, gchar *uri, int page)
 
 	EvDocumentInfo  *p = ev_document_get_info(ev_view->document);
 
+	// get the real file path from evince
+	GFile *gfile = g_file_new_for_uri(uri);
+	char *filePath = g_file_get_path(gfile);
+	g_object_unref (gfile);
+	if (!filePath) {
+		printf("invalid file path");
+		return;
+	}
+	
 	tempSel = g_malloc(ANN_MAX_BUFFER_LEN);
 	tempFileName = g_malloc(strlen(uri) * 4);
-
+	
 	if (!EV_IS_SELECTION (ev_view->document))  {
 		strcmp(tempSel,  ""); 
 		text = "";
@@ -5811,20 +5820,13 @@ ev_view_annotate (EvView *ev_view, gchar *uri, int page)
 		text = get_selected_text (ev_view);
 		encode_uri(tempSel, ANN_MAX_BUFFER_LEN, text);
 	}
-	/// encode filename
-#define ANN_FILE_PREFIX "file://"
-	if (strncmp(uri,ANN_FILE_PREFIX, strlen(ANN_FILE_PREFIX) ) == 0) {
-		// skip the prefix
-		encode_uri(tempFileName, 
-			   ANN_MAX_BUFFER_LEN, uri+strlen(ANN_FILE_PREFIX));
-	} else {
-		encode_uri(tempFileName, ANN_MAX_BUFFER_LEN, uri);
-	}
-
+		
+	encode_uri(tempFileName, ANN_MAX_BUFFER_LEN, filePath);
+	
 	tempCommandLine = g_malloc(strlen(tempSel) + strlen(tempFileName) + 200);
 
-	printf("remember::::%s::::%s::::%s::::%d\n", p->title, uri, text, page);
 	sprintf(tempCommandLine, "emacsclient 'org-protocol://remember://docview:%s::%d'", tempFileName, page+1);
+	printf("remember::::%s::::%s::::%s::::%d\n", p->title, filePath, text, page);
 	printf("temp: [%s]\n", tempCommandLine);
 
 	if (!g_spawn_command_line_async (tempCommandLine, &error)) {
@@ -5836,6 +5838,8 @@ ev_view_annotate (EvView *ev_view, gchar *uri, int page)
 	g_free (tempSel);
 	g_free (tempCommandLine);
 	g_free (tempFileName);
+	g_free (filePath);
+	
 
 
 #ifdef fork
-- 
1.6.6.1


[-- Attachment #4: Type: text/plain, Size: 201 bytes --]

_______________________________________________
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

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: Re: org-protocol: non-ASCII characters
  2010-02-13 13:22             ` Jan Böcker
@ 2010-02-15  9:41               ` Sebastian Rose
  0 siblings, 0 replies; 11+ messages in thread
From: Sebastian Rose @ 2010-02-15  9:41 UTC (permalink / raw)
  To: Jan Böcker; +Cc: emacs-orgmode, dmg

Jan Böcker <jan.boecker@jboecker.de> writes:

> On 12.02.2010 23:23, dmg wrote:
>
>> For evince, I think I have found a problem in the parsing of the link.
>> Evince already encodes
>> the URL, but it does not encode the '/', hence you will get a link like this:
>>
>> emacsclient 'org-protocol://remember://docview/tmp/00%C3%A1%C3%A9%C3%AD%C3%B3%C3%BA.pdf::1'
>>
>> the filename is  /tmp/00áéíóú.pdf
>>
>> But emacs incorrectly stops parsing the link after tmp/
>
> I think I have found the proper way to handle this in evince.
> Check out the attached patch or pull from:
>
> git://github.com/jboecker/evince.git
>
> This code first retrieves the non-URI-encoded UTF-8 filename and passes
> that to uri_encode. Should g_file_get_path return NULL, we abort,
> because the URI specifies something in gnomes VFS layer that has no
> local path, so the link would not work, anyway.
>
>> By the way, xournal now supports store-link
>
> Works as advertised, thanks!
>
> The only problem I have left now is a cosmetic one: when I store a link
> to, say, /tmp/test.xoj, in Org it becomes file://tmp/test.xoj instead of
> file:/tmp/test.xoj. (I have patched xournal and evince to generate file:
> instead of docview: links.)
>
> This is because org-protocol-sanitize-uri is called after decoding the
> string, allegedly because emacsclient compresses multiple slashes in a
> row to one. However, it seems that this function should be applied
> /before/ the string is URL-decoded. Is this a bug?


Hm - yes and no :)

I did not want to expose to much of the encoding and decoding problem to
the users. It's already complicated enough to add a bookmarklet.

`org-protocol-sanitize-uri' just works for the usual bookmarking and
remembering stuff we used it for - and everyone used it for `http:'
and similar protocols.



How about exending `org-protocol-sanitize-uri' to detect certain
protocols like `file:' and drop the extra slash for those? Or, better,
add an extra slash, which would be the correct way to express an
absolute path (though most apps on Linux these days take
`file:/one/slash/only').

org-protocol could be used for other purposes, too. Shouldn't Org-mode
follow links like [[file:///absolute/path]] and [[file://absolute/path]]
as we would expect? (OK, I know, emacsclient should be fixed...)





This is, what my browsers here do. They both do not care for the number
of slashes.

Opera 10 changes a correct URI to it's own special URI (note the
`localhost'):

     file://localhost/home


Firefox takes the `correct' URI:

      file:///home/sebastian



Here is a patch, that would fix it. We could add more exceptions to the
if-statement as needed.



diff --git a/lisp/org-protocol.el b/lisp/org-protocol.el
index 9881e9f..b80131c 100644
--- a/lisp/org-protocol.el
+++ b/lisp/org-protocol.el
@@ -267,8 +267,11 @@ Here is an example:
   "emacsclient compresses double and tripple slashes.
 Slashes are sanitized to double slashes here."
   (when (string-match "^\\([a-z]+\\):/" uri)
-    (let* ((splitparts (split-string uri "/+")))
-      (setq uri (concat (car splitparts) "//" (mapconcat 'identity (cdr splitparts) "/")))))
+    (let* ((splitparts (split-string uri "/+"))
+           (extraslash "//"))
+      (if (string= "file:" (car splitparts))
+          (setq extraslash "/"))
+      (setq uri (concat (car splitparts) extraslash (mapconcat 'identity (cdr splitparts) "/")))))
   uri)



Best wishes,


   Sebastian

^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2010-02-15  9:41 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-01-31  8:39 org-remember support in xournal D M German
2010-01-31  8:45 ` dmg
2010-02-03  9:19 ` Jan Böcker
2010-02-03  9:22   ` dmg
2010-02-04 18:43   ` org-protocol: non-ASCII characters D M German
2010-02-06 13:50     ` Jan Böcker
2010-02-06 14:35       ` Jan Böcker
2010-02-08 11:30         ` Sebastian Rose
2010-02-12 22:23           ` dmg
2010-02-13 13:22             ` Jan Böcker
2010-02-15  9:41               ` Sebastian Rose

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).