From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sacha Chua Subject: [PATCH] org-protocol: Allow optional port specification Date: Wed, 02 Dec 2015 11:02:49 -0500 Message-ID: <87wpswrg7q.fsf@sachachua.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:33786) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a49s0-0003k6-W3 for emacs-orgmode@gnu.org; Wed, 02 Dec 2015 11:03:08 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a49rx-0007uh-8b for emacs-orgmode@gnu.org; Wed, 02 Dec 2015 11:03:04 -0500 Received: from plane.gmane.org ([80.91.229.3]:39259) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a49rx-0007uK-1I for emacs-orgmode@gnu.org; Wed, 02 Dec 2015 11:03:01 -0500 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1a49rt-0004TV-UQ for emacs-orgmode@gnu.org; Wed, 02 Dec 2015 17:02:58 +0100 Received: from 69-196-132-55.dsl.teksavvy.com ([69.196.132.55]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Wed, 02 Dec 2015 17:02:57 +0100 Received: from sacha by 69-196-132-55.dsl.teksavvy.com with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Wed, 02 Dec 2015 17:02:57 +0100 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain 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? --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0001-org-protocol-Allow-optional-port-specification.patch >From 0533b2e76a9cb965ea8f4ea5b3804d17c2bd3b5d Mon Sep 17 00:00:00 2001 From: Sacha Chua 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 . + +;;; 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 --=-=-= Content-Type: text/plain (Copyright papers are on file.) Sacha --=-=-=--