From: Ihor Radchenko <yantar92@posteo.net>
To: Max Nikulin <manikulin@gmail.com>
Cc: emacs-orgmode@gnu.org
Subject: Re: [BUG] URI handling is overly complicated and nonstandard [9.6.7 (N/A @ /gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/)]
Date: Mon, 05 Feb 2024 15:41:10 +0000 [thread overview]
Message-ID: <8734u6apgp.fsf@localhost> (raw)
In-Reply-To: <udjhb3$142g$1@ciao.gmane.io>
[-- Attachment #1: Type: text/plain, Size: 1113 bytes --]
Max Nikulin <manikulin@gmail.com> writes:
> On 05/09/2023 16:42, Ihor Radchenko wrote:
>> Max Nikulin writes:
>>>
>>> From my point of view it will be more sane behavior. However it may
>>> require update of 3rd party ox backends.
>>
>> Yes. The main problem is that I fail to understand the motivation behind
>> the current behaviour. git logs reveal that the code is there from the
>> initial version of the library.
>
> Just a guess, likely unrelated to actual decision. For links like
> "lisp:" or "shell:" keeping link type does not have much sense (however
> stripping it is questionable as well).
>
> From my point of view, e.g. <elisp:(identity "a")> should be exported
> as plain text <code>(identity "a")</code> rather than an (invalid due to
> not escaped quotes inside href) link <a href="(identity "a")">(identity
> "a")</a>.
>
> I still believe that fallback export should preserve link type. Code
> links should define their export functions.
Let's get started on tackling this problem from not stripping the link
type.
I am attaching tentative patch to that effect, as a first step.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-org-export-Do-not-strip-link-type-by-default-during-.patch --]
[-- Type: text/x-patch, Size: 6588 bytes --]
From d0b6d3ff62749aaee40ca37964095bbaa3120128 Mon Sep 17 00:00:00 2001
Message-ID: <d0b6d3ff62749aaee40ca37964095bbaa3120128.1707147647.git.yantar92@posteo.net>
From: Ihor Radchenko <yantar92@posteo.net>
Date: Mon, 5 Feb 2024 16:39:05 +0100
Subject: [PATCH] org-export: Do not strip link type by default during export
* lisp/ox-html.el (org-html-link):
* lisp/ox-latex.el (org-latex-link):
* lisp/ox-man.el (org-man-link):
* lisp/ox-md.el (org-md-link):
* lisp/ox-odt.el (org-odt-link--inline-image):
* lisp/ox-texinfo.el (org-texinfo-link): Preserve link type during
export for all the links, not just for a hard-coded subset.
* etc/ORG-NEWS (Built-in HTML, LaTeX, Man, Markdown, ODT, and Texinfo
exporters preserve the link protocol during export): Document the
breaking change.
Link: https://list.orgmode.org/orgmode/878r9nofpw.fsf@localhost/
---
etc/ORG-NEWS | 18 ++++++++++++++++++
lisp/ox-html.el | 4 +---
lisp/ox-latex.el | 4 +---
lisp/ox-man.el | 4 +---
lisp/ox-md.el | 4 +---
lisp/ox-odt.el | 6 ++----
lisp/ox-texinfo.el | 4 +---
7 files changed, 25 insertions(+), 19 deletions(-)
diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS
index 965872d23..c5e84b7c7 100644
--- a/etc/ORG-NEWS
+++ b/etc/ORG-NEWS
@@ -13,6 +13,24 @@ Please send Org bug reports to mailto:emacs-orgmode@gnu.org.
* Version 9.7 (not released yet)
** Important announcements and breaking changes
+*** Built-in HTML, LaTeX, Man, Markdown, ODT, and Texinfo exporters preserve the link protocol during export
+
+Previously, some link types where not exported as =protocol:uri= but
+as bare =uri=. This is now changed.
+
+When a link is known by Org mode and does not have a custom ~:export~
+parameter (see A.3 Adding Hyperlink Types section of the manual), the
+link protocol is now not stripped.
+
+For example, if one adds a link type =tel=, but does not define
+~:export~ parameter
+: (org-link-set-parameters "tel")
+=[[tel:12345][John Doe]]= link will be correctly exported to LaTeX as
+=\href{tel:12345}{John Doe}=, not =\href{12345}{John Doe}=.
+
+However, links like =[[elisp:(+ 1 2)]]= will be exported as
+=\url{elisp:(+ 1 2)}=, which may be somewhat unexpected.
+
*** Org mode now fontifies whole table lines (including newline) according to ~org-table~ face
Previously, leading indentation and trailing newline in table rows
diff --git a/lisp/ox-html.el b/lisp/ox-html.el
index 976c24584..9812ac2b7 100644
--- a/lisp/ox-html.el
+++ b/lisp/ox-html.el
@@ -3231,8 +3231,6 @@ (defun org-html-link (link desc info)
(desc (org-string-nw-p desc))
(path
(cond
- ((member type '("http" "https" "ftp" "mailto" "news"))
- (url-encode-url (concat type ":" raw-path)))
((string= "file" type)
;; During publishing, turn absolute file names belonging
;; to base directory into relative file names. Otherwise,
@@ -3259,7 +3257,7 @@ (defun org-html-link (link desc info)
(concat raw-path
"#"
(org-publish-resolve-external-link option path t))))))
- (t raw-path)))
+ (t (url-encode-url (concat type ":" raw-path)))))
(attributes-plist
(org-combine-plists
;; Extract attributes from parent's paragraph. HACK: Only
diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el
index e3edef3bd..060a01b0e 100644
--- a/lisp/ox-latex.el
+++ b/lisp/ox-latex.el
@@ -2925,12 +2925,10 @@ (defun org-latex-link (link desc info)
link (plist-get info :latex-inline-image-rules)))
(path (org-latex--protect-text
(pcase type
- ((or "http" "https" "ftp" "mailto" "doi")
- (concat type ":" raw-path))
("file"
(org-export-file-uri raw-path))
(_
- raw-path)))))
+ (concat type ":" raw-path))))))
(cond
;; Link type is handled by a special function.
((org-export-custom-protocol-maybe link desc 'latex info))
diff --git a/lisp/ox-man.el b/lisp/ox-man.el
index 1f296baeb..16058fb9a 100644
--- a/lisp/ox-man.el
+++ b/lisp/ox-man.el
@@ -614,10 +614,8 @@ (defun org-man-link (link desc info)
;; Ensure DESC really exists, or set it to nil.
(desc (and (not (string= desc "")) desc))
(path (pcase type
- ((or "http" "https" "ftp" "mailto")
- (concat type ":" raw-path))
("file" (org-export-file-uri raw-path))
- (_ raw-path))))
+ (_ (concat type ":" raw-path)))))
(cond
;; Link type is handled by a special function.
((org-export-custom-protocol-maybe link desc 'man info))
diff --git a/lisp/ox-md.el b/lisp/ox-md.el
index b40d75031..5233ec3eb 100644
--- a/lisp/ox-md.el
+++ b/lisp/ox-md.el
@@ -541,11 +541,9 @@ (defun org-md-link (link desc info)
(type (org-element-property :type link))
(raw-path (org-element-property :path link))
(path (cond
- ((member type '("http" "https" "ftp" "mailto"))
- (concat type ":" raw-path))
((string-equal type "file")
(org-export-file-uri (funcall link-org-files-as-md raw-path)))
- (t raw-path))))
+ (t (concat type ":" raw-path)))))
(cond
;; Link type is handled by a special function.
((org-export-custom-protocol-maybe link desc 'md info))
diff --git a/lisp/ox-odt.el b/lisp/ox-odt.el
index f46b25a9a..778cc62cf 100644
--- a/lisp/ox-odt.el
+++ b/lisp/ox-odt.el
@@ -2246,11 +2246,9 @@ (defun org-odt-link--inline-image (element info)
(cl-assert (org-element-type-p element 'link))
(let* ((src (let* ((type (org-element-property :type element))
(raw-path (org-element-property :path element)))
- (cond ((member type '("http" "https"))
- (concat type ":" raw-path))
- ((file-name-absolute-p raw-path)
+ (cond ((file-name-absolute-p raw-path)
(expand-file-name raw-path))
- (t raw-path))))
+ (t (concat type ":" raw-path)))))
(src-expanded (if (file-name-absolute-p src) src
(expand-file-name src (file-name-directory
(plist-get info :input-file)))))
diff --git a/lisp/ox-texinfo.el b/lisp/ox-texinfo.el
index cfbef0c09..f9b73ac6f 100644
--- a/lisp/ox-texinfo.el
+++ b/lisp/ox-texinfo.el
@@ -1321,11 +1321,9 @@ (defun org-texinfo-link (link desc info)
(desc (and (not (string= desc "")) desc))
(path (org-texinfo--sanitize-content
(cond
- ((member type '("http" "https" "ftp"))
- (concat type ":" raw-path))
((string-equal type "file")
(org-export-file-uri raw-path))
- (t raw-path)))))
+ (t (concat type ":" raw-path))))))
(cond
((org-export-custom-protocol-maybe link desc 'texinfo info))
((org-export-inline-image-p link org-texinfo-inline-image-rules)
--
2.43.0
[-- Attachment #3: Type: text/plain, Size: 224 bytes --]
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
next prev parent reply other threads:[~2024-02-05 15:38 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-31 15:25 [BUG] URI handling is overly complicated and nonstandard [9.6.7 (N/A @ /gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/)] Csepp
2023-09-01 2:44 ` Max Nikulin
2023-09-01 9:04 ` [DISCUSSION] May we recognize everything like [[protocol:uri]] as a non-fuzzy link? (was: [BUG] URI handling is overly complicated and nonstandard [9.6.7 (N/A @ /gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/)]) Ihor Radchenko
2023-09-01 10:49 ` Dr. Arne Babenhauserheide
2023-09-01 11:01 ` Ihor Radchenko
2023-09-01 12:25 ` Dr. Arne Babenhauserheide
2023-09-02 7:26 ` Ihor Radchenko
2023-09-02 7:54 ` Dr. Arne Babenhauserheide
2023-09-04 14:58 ` Max Nikulin
2023-09-05 11:02 ` Ihor Radchenko
2023-09-06 14:27 ` Max Nikulin
2023-09-07 10:42 ` Ihor Radchenko
2023-09-07 11:07 ` Max Nikulin
2023-09-07 11:22 ` Ihor Radchenko
2023-09-01 12:15 ` [DISCUSSION] May we recognize everything like [[protocol:uri]] as a non-fuzzy link? Jens Lechtenboerger
2023-09-02 7:29 ` Ihor Radchenko
2023-09-01 18:53 ` [DISCUSSION] May we recognize everything like [[protocol:uri]] as a non-fuzzy link? (was: [BUG] URI handling is overly complicated and nonstandard [9.6.7 (N/A @ /gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/)]) Tom Gillespie
2023-09-02 7:45 ` Ihor Radchenko
2023-09-02 12:00 ` [BUG] URI handling is overly complicated and nonstandard [9.6.7 (N/A @ /gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/)] Max Nikulin
2023-09-03 7:53 ` Ihor Radchenko
2023-09-04 10:51 ` Max Nikulin
2023-09-05 9:42 ` Ihor Radchenko
2023-09-10 4:40 ` Max Nikulin
2023-09-17 22:08 ` Rudolf Adamkovič
2023-09-18 15:20 ` Exporting elisp: and shell: links Max Nikulin
2023-09-19 0:10 ` Rudolf Adamkovič
2023-09-19 15:19 ` Max Nikulin
2023-09-21 9:49 ` Ihor Radchenko
2023-09-22 23:43 ` Rudolf Adamkovič
2023-09-25 14:38 ` Max Nikulin
2023-09-26 10:42 ` Ihor Radchenko
2023-09-28 15:31 ` Rudolf Adamkovič
2023-10-08 9:48 ` Ihor Radchenko
2023-10-09 12:04 ` Max Nikulin
2023-10-09 12:12 ` Ihor Radchenko
2023-10-10 10:35 ` Max Nikulin
2023-10-12 11:35 ` Ihor Radchenko
2023-10-13 10:20 ` Max Nikulin
2023-10-14 8:13 ` Ihor Radchenko
2023-10-11 19:34 ` Rudolf Adamkovič
2024-02-05 15:41 ` Ihor Radchenko [this message]
2024-03-12 11:00 ` [BUG] URI handling is overly complicated and nonstandard [9.6.7 (N/A @ /gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/)] Ihor Radchenko
2023-09-04 15:08 ` [DISCUSSION] May we recognize everything like [[protocol:uri]] as a non-fuzzy link? (was: [BUG] URI handling is overly complicated and nonstandard [9.6.7 (N/A @ /gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/)]) Max Nikulin
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
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8734u6apgp.fsf@localhost \
--to=yantar92@posteo.net \
--cc=emacs-orgmode@gnu.org \
--cc=manikulin@gmail.com \
/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 public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).