emacs-orgmode
[Top][All Lists]
Advanced

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

Additonal slashes in URI sent to org-protocol


From: Ferdinand Pieper
Subject: Additonal slashes in URI sent to org-protocol
Date: Sun, 05 Apr 2020 16:55:44 +0200

Hi everyone,

I was trying to set up org-protocol with Firefox (version 74.0) running under 
Windows 10. Unfortunately there seems to be an issue with additional slashes 
added to the URI so org-protocol can not parse it.

I setup a bookmark as mentioned in [1]. I changed the bookmark content to the 
new style of org-protocol links as described in [2], resulting in:

--8<---------------cut here---------------start------------->8---
javascript:location.href='org-protocol://capture?template=L&url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title)+'&body='+encodeURIComponent(window.getSelection())
--8<---------------cut here---------------end--------------->8---

To setup the forwarding to Emacs running inside WSL I used a registry entry as 
described on the same page:

--8<---------------cut here---------------start------------->8---
REGEDIT4

[HKEY_CLASSES_ROOT\org-protocol]
@="URL:Org Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\org-protocol\shell]
[HKEY_CLASSES_ROOT\org-protocol\shell\open]
[HKEY_CLASSES_ROOT\org-protocol\shell\open\command]
@="\"C:\\Windows\\System32\\wsl.exe\" emacsclient \"%1\""
--8<---------------cut here---------------end--------------->8---

Somehow Firefox adds another slash inbetween ~capture~ and the questionmark, so 
that Emacs receives this call, which I extracted from a Backtrace:

--8<---------------cut here---------------start------------->8---
* org-protocol-check-filename-for-protocol("/mnt/c/Windows/system32/org-protocol:/capture/?template=L&url=https%3A%2F%2Forgmode.org%2F&title=Org%20mode%20for%20Emacs%20–%20Your%20Life%20in%20Plain%20Text&body=" (("/mnt/c/Windows/system32/org-protocol:/capture/?template=L&url=https%3A%2F%2Forgmode.org%2F&title=Org%20mode%20for%20Emacs%20–%20Your%20Life%20in%20Plain%20Text&body=")) #<process server <68>>)
--8<---------------cut here---------------end--------------->8---

The format ~org-protocol:/capture/?template=L...~ still seems to be within the 
HTML spec. But the additional slash makes the function 
~org-protocol-check-filename-for-protocol~ fail to recognize the URI as a 
capture call. See also the discussion in [3].
I also tried the same bookmark in Chromium (version 83.0) but it also adds the 
additional slash.
I attached a proposed patch to allow URIs with and without the slash.

I'd be happy to know if anybody has a working setup using the bookmark above or 
similar or if there are other solutions which do not require this patch. 
Otherwise please let me know what is left to do to get this patch applied.

Thanks!


Footnotes:
[1]  https://orgmode.org/worg/org-contrib/org-protocol.html#org120a44e

[2]  https://orgmode.org/Changes_old.html#org18864d9

[3] 
https://github.com/sprig/org-capture-extension/issues/41#issuecomment-578499266

>From a476821ebecd9649b2c88a86a0562c757bb2c3a0 Mon Sep 17 00:00:00 2001
From: fpi <address@hidden>
Date: Fri, 3 Apr 2020 19:12:01 +0200
Subject: [PATCH] org-protocol: Allow slashes after sub-protocol

This change lets org-protocol handle URIs with additional slashes
before the start of the query string, e.g.

org-protocol:/capture/?template=...

instead of

org-protocol:/capture?template=...
---
 lisp/org-protocol.el | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lisp/org-protocol.el b/lisp/org-protocol.el
index 55a534d0d..8fbff9611 100644
--- a/lisp/org-protocol.el
+++ b/lisp/org-protocol.el
@@ -617,13 +617,13 @@ CLIENT is ignored."
             (let ((proto
                   (concat the-protocol
                           (regexp-quote (plist-get (cdr prolist) :protocol))
-                          "\\(:/+\\|\\?\\)")))
+                          "\\(:/+\\|/*\\?\\)")))
               (when (string-match proto fname)
                 (let* ((func (plist-get (cdr prolist) :function))
                        (greedy (plist-get (cdr prolist) :greedy))
                        (split (split-string fname proto))
                        (result (if greedy restoffiles (cadr split)))
-                      (new-style (string= (match-string 1 fname) "?")))
+                      (new-style (string-match (match-string 1 fname) "/*?")))
                   (when (plist-get (cdr prolist) :kill-client)
                    (message "Greedy org-protocol handler.  Killing client.")
                    (server-edit))
-- 
2.25.0


reply via email to

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