* Re: patch for org-capture.el to allow for no file extension on open-source, protocol
2020-05-10 12:57 ` Nicolas Goaziou
@ 2020-05-11 0:05 ` Stacey Marshall
2020-05-12 14:46 ` Nicolas Goaziou
0 siblings, 1 reply; 8+ messages in thread
From: Stacey Marshall @ 2020-05-11 0:05 UTC (permalink / raw)
To: Nicolas Goaziou; +Cc: emacs-orgmode
[-- Attachment #1.1: Type: text/plain, Size: 5120 bytes --]
On 10 May 2020, at 13:57, Nicolas Goaziou wrote:
> Hello,
>
> "Stacey Marshall" <stacey.marshall@gmail.com> writes:
>
>> The issue was that the URL I was opening had the full filename as-is.
>> No extension needed to be added or removed. If no suffix is provided
>> in the alist then the function failed. The patch allows both
>> online-suffix and working-suffix to not be required.
>
> Thank you. Could you add a test in "test-org-protocol.el" ?
>
> Regards,
>
> --
> Nicolas Goaziou
Hi Nicolas,
Test patch below. I've attached both patch files too.
```
From 9263002dc97753e297f8571511839eea0b39252e Mon Sep 17 00:00:00 2001
From: Stacey Marshall <stacey.marshall@gmail.com>
Date: Mon, 11 May 2020 00:58:40 +0100
Subject: [PATCH 2/2] test-org-protocol.el: Fix tests and add new test
for
as-is filename.
* testing/lisp/test-org-protocol.el
(test-org-protocol/org-protocol-parse-parameters):
Fix issue of missing flag to indicate new paramenter testing.
* testing/lisp/test-org-protocol.el
(test-org-protocol/org-protocol-open-source):
Fix test3 which was not working. Add test4, for opening file name
as-is without suffix modification.
Tested using ert.
TINYCHANGE
---
testing/lisp/test-org-protocol.el | 37 ++++++++++++++++++++++++++-----
1 file changed, 32 insertions(+), 5 deletions(-)
diff --git a/testing/lisp/test-org-protocol.el
b/testing/lisp/test-org-protocol.el
index 6ee368dcf..42ad5e1a3 100644
--- a/testing/lisp/test-org-protocol.el
+++ b/testing/lisp/test-org-protocol.el
@@ -40,7 +40,7 @@
"url=https%3A%2F%2Forgmode.org%2Forg.html%23capture-protocol&"
"title=The%20Org%20Manual&"
"body=9.4.2%20capture%20protocol"))
- (data (org-protocol-parse-parameters url)))
+ (data (org-protocol-parse-parameters url t)))
(should (string= (plist-get data :template) "p"))
(should (string= (plist-get data :url)
"https://orgmode.org/org.html#capture-protocol"))
(should (string= (plist-get data :title) "The Org Manual"))
@@ -138,6 +138,8 @@
"Test org-protocol://open-source links."
(let* ((temp-file-name1 (make-temp-file "org-protocol-test1"))
(temp-file-name2 (make-temp-file "org-protocol-test2"))
+ (temp-file-name3 (make-temp-file "org-protocol-test3" nil ".md"))
+ (temp-file-name4 (make-temp-file "org-protocol-test4" nil ".c"))
(org-protocol-project-alist
`((test1
:base-url "http://example.com/"
@@ -149,10 +151,13 @@
:working-directory ,(file-name-directory temp-file-name2))
(test3
:base-url "https://blog-example.com/"
- :working-directory ,(file-name-directory temp-file-name2)
+ :working-directory ,(file-name-directory temp-file-name3)
:online-suffix ".html"
:working-suffix ".md"
- :rewrites
(("\\(https://blog-example.com/[0-9]+/[0-9]+/[0-9]+/\\)" . ".md")))))
+ :rewrites
(("\\(https://blog-example.com/[0-9]+/[0-9]+/[0-9]+/\\)" . ".md")))
+ (test4
+ :base-url "http://as-is.example.com/"
+ :working-directory ,(file-name-directory temp-file-name4))))
(test-cases
(list
;; Old-style URLs
@@ -166,6 +171,16 @@
(url-hexify-string
(concat "http://another.example.com/" (file-name-nondirectory
temp-file-name2) ".js")))
temp-file-name2)
+ (cons
+ (concat "/some/directory/org-protocol:/open-source:/"
+ (url-hexify-string
+ (concat "https://blog-example.com/" (file-name-nondirectory
(file-name-sans-extension temp-file-name3)) ".html")))
+ temp-file-name3)
+ (cons
+ (concat "/some/directory/org-protocol:/open-source:/"
+ (url-hexify-string
+ (concat "http://as-is.example.com/" (file-name-nondirectory
temp-file-name4))))
+ temp-file-name4)
;; New-style URLs
(cons
(concat "/some/directory/org-protocol:/open-source?url="
@@ -176,7 +191,17 @@
(concat "/some/directory/org-protocol:/open-source?url="
(url-hexify-string
(concat "http://another.example.com/" (file-name-nondirectory
temp-file-name2) ".js")))
- temp-file-name2))))
+ temp-file-name2)
+ (cons
+ (concat "/some/directory/org-protocol:/open-source?url="
+ (url-hexify-string
+ (concat "https://blog-example.com/" (file-name-nondirectory
(file-name-sans-extension temp-file-name3)) ".html")))
+ temp-file-name3)
+ (cons
+ (concat "/some/directory/org-protocol:/open-source?url="
+ (url-hexify-string
+ (concat "http://as-is.example.com/" (file-name-nondirectory
temp-file-name4))))
+ temp-file-name4))))
(mapc (lambda (test-case)
(should (string=
(org-protocol-check-filename-for-protocol
@@ -185,7 +210,9 @@
(cdr test-case))))
test-cases)
(delete-file temp-file-name1)
- (delete-file temp-file-name2)))
+ (delete-file temp-file-name2)
+ (delete-file temp-file-name3)
+ (delete-file temp-file-name4)))
(defun test-org-protocol/org-protocol-greedy-handler (fname)
;; fname should be a list of parsed items
--
2.21.1 (Apple Git-122.3)
```
--
[Stacey](https://staceymarshall.wordpress.com/)
[-- Attachment #1.2: Type: text/html, Size: 5931 bytes --]
[-- Attachment #2: 0001-org-capture.el-Allow-for-no-file-extension-on-open-s.patch --]
[-- Type: text/plain, Size: 3458 bytes --]
From 213b7968199bebcf11d0bcf0bbc44d0843f19ecc Mon Sep 17 00:00:00 2001
From: Stacey Marshall <stacey.marshall@gmail.com>
Date: Sat, 9 May 2020 21:31:04 +0100
Subject: [PATCH 1/2] org-capture.el: Allow for no file extension on
open-source protocol
* lisp/org-capture.el (org-protocol-open-source): Remove requirement
to have :online-suffix and :working-suffix.
The problem here was that two assignments expected suffix's to be
provided in org-protocol-project-alist. When they were missing an
error occurred. With the changes source URLs that include the file
name as-is, such as those presented by openGrok, may be opened.
TINYCHANGE
---
lisp/org-protocol.el | 26 ++++++++++++++++----------
1 file changed, 16 insertions(+), 10 deletions(-)
diff --git a/lisp/org-protocol.el b/lisp/org-protocol.el
index 55a534d0d..35f58f490 100644
--- a/lisp/org-protocol.el
+++ b/lisp/org-protocol.el
@@ -191,7 +191,7 @@ Example:
:working-suffix \".org\"
:base-url \"https://orgmode.org/worg/\"
:working-directory \"/home/user/org/Worg/\")
- (\"http://localhost/org-notes/\"
+ (\"localhost org-notes/\"
:online-suffix \".html\"
:working-suffix \".org\"
:base-url \"http://localhost/org/\"
@@ -202,12 +202,17 @@ Example:
:working-directory \"~/site/content/post/\"
:online-suffix \".html\"
:working-suffix \".md\"
- :rewrites ((\"\\(https://site.com/[0-9]+/[0-9]+/[0-9]+/\\)\" . \".md\")))))
-
-
- The last line tells `org-protocol-open-source' to open
- /home/user/org/index.php, if the URL cannot be mapped to an existing
- file, and ends with either \"org\" or \"org/\".
+ :rewrites ((\"\\(https://site.com/[0-9]+/[0-9]+/[0-9]+/\\)\" . \".md\")))
+ (\"GNU emacs OpenGrok\"
+ :base-url \"https://opengrok.housegordon.com/source/xref/emacs/\"
+ :working-directory \"~/dev/gnu-emacs/\")))
+
+ The :rewrites line of \"localhost org-notes\" entry tells
+ `org-protocol-open-source' to open /home/user/org/index.php,
+ if the URL cannot be mapped to an existing file, and ends with
+ either \"org\" or \"org/\". The \"GNU emacs OpenGrok\" entry
+ does not include any suffix properties, allowing local source
+ file to be opened as found by OpenGrok.
Consider using the interactive functions `org-protocol-create' and
`org-protocol-create-for-org' to help you filling this variable with valid contents."
@@ -545,11 +550,12 @@ The location for a browser's bookmark should look like this:
;; ending than strip-suffix here:
(f1 (substring f 0 (string-match "\\([\\?#].*\\)?$" f)))
(start-pos (+ (string-match wsearch f1) (length base-url)))
- (end-pos (string-match
- (regexp-quote strip-suffix) f1))
+ (end-pos (if strip-suffix
+ (string-match (regexp-quote strip-suffix) f1)
+ (length f1)))
;; We have to compare redirects without suffix below:
(f2 (concat wdir (substring f1 start-pos end-pos)))
- (the-file (concat f2 add-suffix)))
+ (the-file (if add-suffix (concat f2 add-suffix) f2)))
;; Note: the-file may still contain `%C3' et al here because browsers
;; tend to encode `ä' in URLs to `%25C3' - `%25' being `%'.
--
2.21.1 (Apple Git-122.3)
[-- Attachment #3: 0002-test-org-protocol.el-Fix-tests-and-add-new-test-for-.patch --]
[-- Type: text/plain, Size: 4552 bytes --]
From 9263002dc97753e297f8571511839eea0b39252e Mon Sep 17 00:00:00 2001
From: Stacey Marshall <stacey.marshall@gmail.com>
Date: Mon, 11 May 2020 00:58:40 +0100
Subject: [PATCH 2/2] test-org-protocol.el: Fix tests and add new test for
as-is filename.
* testing/lisp/test-org-protocol.el (test-org-protocol/org-protocol-parse-parameters):
Fix issue of missing flag to indicate new paramenter testing.
* testing/lisp/test-org-protocol.el (test-org-protocol/org-protocol-open-source):
Fix test3 which was not working. Add test4, for opening file name
as-is without suffix modification.
Tested using ert.
TINYCHANGE
---
testing/lisp/test-org-protocol.el | 37 ++++++++++++++++++++++++++-----
1 file changed, 32 insertions(+), 5 deletions(-)
diff --git a/testing/lisp/test-org-protocol.el b/testing/lisp/test-org-protocol.el
index 6ee368dcf..42ad5e1a3 100644
--- a/testing/lisp/test-org-protocol.el
+++ b/testing/lisp/test-org-protocol.el
@@ -40,7 +40,7 @@
"url=https%3A%2F%2Forgmode.org%2Forg.html%23capture-protocol&"
"title=The%20Org%20Manual&"
"body=9.4.2%20capture%20protocol"))
- (data (org-protocol-parse-parameters url)))
+ (data (org-protocol-parse-parameters url t)))
(should (string= (plist-get data :template) "p"))
(should (string= (plist-get data :url) "https://orgmode.org/org.html#capture-protocol"))
(should (string= (plist-get data :title) "The Org Manual"))
@@ -138,6 +138,8 @@
"Test org-protocol://open-source links."
(let* ((temp-file-name1 (make-temp-file "org-protocol-test1"))
(temp-file-name2 (make-temp-file "org-protocol-test2"))
+ (temp-file-name3 (make-temp-file "org-protocol-test3" nil ".md"))
+ (temp-file-name4 (make-temp-file "org-protocol-test4" nil ".c"))
(org-protocol-project-alist
`((test1
:base-url "http://example.com/"
@@ -149,10 +151,13 @@
:working-directory ,(file-name-directory temp-file-name2))
(test3
:base-url "https://blog-example.com/"
- :working-directory ,(file-name-directory temp-file-name2)
+ :working-directory ,(file-name-directory temp-file-name3)
:online-suffix ".html"
:working-suffix ".md"
- :rewrites (("\\(https://blog-example.com/[0-9]+/[0-9]+/[0-9]+/\\)" . ".md")))))
+ :rewrites (("\\(https://blog-example.com/[0-9]+/[0-9]+/[0-9]+/\\)" . ".md")))
+ (test4
+ :base-url "http://as-is.example.com/"
+ :working-directory ,(file-name-directory temp-file-name4))))
(test-cases
(list
;; Old-style URLs
@@ -166,6 +171,16 @@
(url-hexify-string
(concat "http://another.example.com/" (file-name-nondirectory temp-file-name2) ".js")))
temp-file-name2)
+ (cons
+ (concat "/some/directory/org-protocol:/open-source:/"
+ (url-hexify-string
+ (concat "https://blog-example.com/" (file-name-nondirectory (file-name-sans-extension temp-file-name3)) ".html")))
+ temp-file-name3)
+ (cons
+ (concat "/some/directory/org-protocol:/open-source:/"
+ (url-hexify-string
+ (concat "http://as-is.example.com/" (file-name-nondirectory temp-file-name4))))
+ temp-file-name4)
;; New-style URLs
(cons
(concat "/some/directory/org-protocol:/open-source?url="
@@ -176,7 +191,17 @@
(concat "/some/directory/org-protocol:/open-source?url="
(url-hexify-string
(concat "http://another.example.com/" (file-name-nondirectory temp-file-name2) ".js")))
- temp-file-name2))))
+ temp-file-name2)
+ (cons
+ (concat "/some/directory/org-protocol:/open-source?url="
+ (url-hexify-string
+ (concat "https://blog-example.com/" (file-name-nondirectory (file-name-sans-extension temp-file-name3)) ".html")))
+ temp-file-name3)
+ (cons
+ (concat "/some/directory/org-protocol:/open-source?url="
+ (url-hexify-string
+ (concat "http://as-is.example.com/" (file-name-nondirectory temp-file-name4))))
+ temp-file-name4))))
(mapc (lambda (test-case)
(should (string=
(org-protocol-check-filename-for-protocol
@@ -185,7 +210,9 @@
(cdr test-case))))
test-cases)
(delete-file temp-file-name1)
- (delete-file temp-file-name2)))
+ (delete-file temp-file-name2)
+ (delete-file temp-file-name3)
+ (delete-file temp-file-name4)))
(defun test-org-protocol/org-protocol-greedy-handler (fname)
;; fname should be a list of parsed items
--
2.21.1 (Apple Git-122.3)
^ permalink raw reply related [flat|nested] 8+ messages in thread