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