From: Sacha Chua <sacha@sachachua.com>
To: emacs-orgmode@gnu.org
Subject: [PATCH] org-protocol: Allow optional port specification
Date: Wed, 02 Dec 2015 11:02:49 -0500 [thread overview]
Message-ID: <87wpswrg7q.fsf@sachachua.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 605 bytes --]
I was trying to get org-protocol to work on KDE Plasma 5.4.2. I set up
my ~/.kde/share/kde4/services/org.protocol, but the standard
org-protocol sample syntax:
org-protocol://store-link://URL/TITLE
resulted in the error:
Malformed URL
Port field was empty; source was "..."; scheme = "org-protocol",
host = "store-link", path = "// ..."
Modifying my Javascript to create links of the form:
org-protocol://store-link:0//URL/TITLE
made org-protocol correctly pass the link to emacsclient KDE 5.4.2. This
patch allows the optional specification of a port in the URI. What do
you think?
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-org-protocol-Allow-optional-port-specification.patch --]
[-- Type: text/x-diff, Size: 3387 bytes --]
From 0533b2e76a9cb965ea8f4ea5b3804d17c2bd3b5d Mon Sep 17 00:00:00 2001
From: Sacha Chua <sacha@sachachua.com>
Date: Wed, 2 Dec 2015 10:53:07 -0500
Subject: [PATCH] org-protocol: Allow optional port specification
* lisp/org-protocol.el (org-protocol-check-filename-for-protocol):
Recognize and ignore ports specified as part of the protocol or
sub-protocol. This seems to be necessary to avoid "Port field was
empty" errors in newer versions of KDE.
* testing/lisp/test-org-protocol.el: New file with a test for
`org-protocol-check-filename-for-protocol'.
---
lisp/org-protocol.el | 2 +-
testing/lisp/test-org-protocol.el | 39 +++++++++++++++++++++++++++++++++++++++
2 files changed, 40 insertions(+), 1 deletion(-)
create mode 100644 testing/lisp/test-org-protocol.el
diff --git a/lisp/org-protocol.el b/lisp/org-protocol.el
index 339f2b7..150f458 100644
--- a/lisp/org-protocol.el
+++ b/lisp/org-protocol.el
@@ -532,7 +532,7 @@ as filename."
(when (string-match the-protocol fname)
(dolist (prolist sub-protocols)
(let ((proto (concat the-protocol
- (regexp-quote (plist-get (cdr prolist) :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))
diff --git a/testing/lisp/test-org-protocol.el b/testing/lisp/test-org-protocol.el
new file mode 100644
index 0000000..94be520
--- /dev/null
+++ b/testing/lisp/test-org-protocol.el
@@ -0,0 +1,39 @@
+;;; test-org-protocol.el --- tests for org-protocol.el
+
+;; Copyright (c) Sacha Chua
+;; Authors: Sacha Chua
+
+;; This file is not part of GNU Emacs.
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(ert-deftest test-org-protocol/org-protocol-check-filename-for-protocol ()
+ "Test `org-protocol-check-filename-for-protocol' specifications."
+ ;; Store link
+ (let ((uri "/some/directory/org-protocol:/store-link:/URL/TITLE"))
+ (should (null (org-protocol-check-filename-for-protocol uri (list uri) nil))))
+ (should (equal (car org-stored-links) '("URL" "TITLE")))
+ ;; Handle multiple slashes
+ (let ((uri "/some/directory/org-protocol://store-link://URL2//TITLE2"))
+ (should (null (org-protocol-check-filename-for-protocol uri (list uri) nil))))
+ (should (equal (car org-stored-links) '("URL2" "TITLE2")))
+ ;; Ignore port - useful for KDE
+ (let ((uri "/some/directory/org-protocol:/store-link:0//URL3//TITLE3"))
+ (should (null (org-protocol-check-filename-for-protocol uri (list uri) nil))))
+ (should (equal (car org-stored-links) '("URL3" "TITLE3"))))
+
+
+;;; test-org-protocol.el ends here
--
2.6.3
[-- Attachment #3: Type: text/plain, Size: 40 bytes --]
(Copyright papers are on file.)
Sacha
next reply other threads:[~2015-12-02 16:03 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-02 16:02 Sacha Chua [this message]
2015-12-02 19:32 ` [PATCH] org-protocol: Allow optional port specification Rasmus
2015-12-03 19:01 ` Aaron Ecay
2015-12-04 22:55 ` [PATCH] org-protocol: Allow key=val&key2=value2-style URLs Sacha Chua
2015-12-05 13:35 ` Aaron Ecay
2015-12-07 17:52 ` Sacha Chua
2015-12-07 23:07 ` Sacha Chua
2015-12-18 21:49 ` Sacha Chua
2015-12-20 15:48 ` Nicolas Goaziou
2015-12-21 21:12 ` Sacha Chua
2015-12-22 12:45 ` Nicolas Goaziou
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87wpswrg7q.fsf@sachachua.com \
--to=sacha@sachachua.com \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.