* [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/)] @ 2023-08-31 15:25 Csepp 2023-09-01 2:44 ` Max Nikulin 0 siblings, 1 reply; 43+ messages in thread From: Csepp @ 2023-08-31 15:25 UTC (permalink / raw) To: emacs-orgmode I'm trying to include a tel: link in a curriculum vitae page that I want to export to HTML. Org-Mode fails during export because it thinks that tel:+1234 is an internal link. There seems to be no easy way to tell it to just treat it the same way it would treat an HTTP link and include it verbatim. There does seem to be a way to do some Elisp scripting, but it's honestly really annoying to do this for every protocol type. Please, just let users include URLs in their docs. Emacs : GNU Emacs 28.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.37, cairo version 1.16.0) Package: Org mode version 9.6.7 (N/A @ /gnu/store/mg7223g8mw90lccp6mm5g6f3mpjk70si-emacs-org-9.6.7/share/emacs/site-lisp/org-9.6.7/) ^ permalink raw reply [flat|nested] 43+ messages in thread
* 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/)] 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 0 siblings, 1 reply; 43+ messages in thread From: Max Nikulin @ 2023-09-01 2:44 UTC (permalink / raw) To: Csepp, emacs-orgmode On 31/08/2023 22:25, Csepp wrote: > There seems to be no easy way to tell it > to just treat it the same way it would treat an HTTP link and include it > verbatim. There does seem to be a way to do some Elisp scripting, but > it's honestly really annoying to do this for every protocol type. > > Please, just let users include URLs in their docs. (info "(org) Adding Hyperlink Types") https://orgmode.org/manual/Adding-Hyperlink-Types.html (Side note: I would consider `org-export-derived-backend-p' instead of `pcase' with fixed symbols.) So it is possible to have custom link types. However I do not mind to have an easy way to delegate URI from :export function to the link transcoder of active export backend. Current behavior with with treating link paths as fuzzy search targets is a kind of compromise. It allows internal search links to be shorter. One may have e.g. #+name: fig:something code blocks, so not every link looking as having some "scheme:" prefix should be treated as an external URI. As a result link types must be enabled explicitly. ^ permalink raw reply [flat|nested] 43+ messages in thread
* [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/)]) 2023-09-01 2:44 ` Max Nikulin @ 2023-09-01 9:04 ` Ihor Radchenko 2023-09-01 10:49 ` Dr. Arne Babenhauserheide ` (4 more replies) 0 siblings, 5 replies; 43+ messages in thread From: Ihor Radchenko @ 2023-09-01 9:04 UTC (permalink / raw) To: Max Nikulin, Bastien, Timothy, Tom Gillespie; +Cc: Csepp, emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: > However I do not mind to have an easy way to delegate URI from :export > function to the link transcoder of active export backend. Just make the :export function return nil. > Current behavior with with treating link paths as fuzzy search targets > is a kind of compromise. It allows internal search links to be shorter. > One may have e.g. #+name: fig:something code blocks, so not every link > looking as having some "scheme:" prefix should be treated as an external > URI. As a result link types must be enabled explicitly. This is exactly the reason why Org recognizes a closed list of link types and not just "anything looking like protocol:uri". And I am honestly not a big fan - because of the limitations of Elisp regexps, there is actually a hard limit on the number of link types we can support - no more than few hundreds, AFAIR. This is because Elisp regexps cannot be larger than certain length. On the other hand, Org also supports "plain" links without brackets and for such links it does make sense to avoid parsing something like A:B as a link. In theory, we might change the parser to treat anything like foo:bar or <foo:bar> or [[foo:bar]] as a link with "foo" protocol and "bar" URI. And introduce [[::fig:something]] to allow explicit internal links. But, despite simplifying the parser, it will certainly be a breaking change. Any thoughts? -- 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> ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [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/)]) 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:15 ` [DISCUSSION] May we recognize everything like [[protocol:uri]] as a non-fuzzy link? Jens Lechtenboerger ` (3 subsequent siblings) 4 siblings, 1 reply; 43+ messages in thread From: Dr. Arne Babenhauserheide @ 2023-09-01 10:49 UTC (permalink / raw) To: Ihor Radchenko Cc: Max Nikulin, Bastien, Timothy, Tom Gillespie, Csepp, emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 677 bytes --] Ihor Radchenko <yantar92@posteo.net> writes: > In theory, we might change the parser to treat anything like foo:bar or > <foo:bar> or [[foo:bar]] as a link with "foo" protocol and "bar" URI. > And introduce [[::fig:something]] to allow explicit internal links. > But, despite simplifying the parser, it will certainly be a breaking > change. > > Any thoughts? Thinking about the effort I’d have to fix all internal links in all org-documents I have (dozens of large ones and hundreds of small ones) I don’t like the idea of breaking internal link syntax. Best wishes, Arne -- Unpolitisch sein heißt politisch sein, ohne es zu merken. draketo.de [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 1125 bytes --] ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [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/)]) 2023-09-01 10:49 ` Dr. Arne Babenhauserheide @ 2023-09-01 11:01 ` Ihor Radchenko 2023-09-01 12:25 ` Dr. Arne Babenhauserheide 0 siblings, 1 reply; 43+ messages in thread From: Ihor Radchenko @ 2023-09-01 11:01 UTC (permalink / raw) To: Dr. Arne Babenhauserheide Cc: Max Nikulin, Bastien, Timothy, Tom Gillespie, Csepp, emacs-orgmode "Dr. Arne Babenhauserheide" <arne_bab@web.de> writes: >> Any thoughts? > > Thinking about the effort I’d have to fix all internal links in all > org-documents I have (dozens of large ones and hundreds of small ones) I > don’t like the idea of breaking internal link syntax. May you elaborate about what is going to be broken? -- 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> ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [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/)]) 2023-09-01 11:01 ` Ihor Radchenko @ 2023-09-01 12:25 ` Dr. Arne Babenhauserheide 2023-09-02 7:26 ` Ihor Radchenko 0 siblings, 1 reply; 43+ messages in thread From: Dr. Arne Babenhauserheide @ 2023-09-01 12:25 UTC (permalink / raw) To: Ihor Radchenko Cc: Max Nikulin, Bastien, Timothy, Tom Gillespie, Csepp, emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 844 bytes --] Ihor Radchenko <yantar92@posteo.net> writes: > "Dr. Arne Babenhauserheide" <arne_bab@web.de> writes: > >>> Any thoughts? >> >> Thinking about the effort I’d have to fix all internal links in all >> org-documents I have (dozens of large ones and hundreds of small ones) I >> don’t like the idea of breaking internal link syntax. > > May you elaborate about what is going to be broken? I have many links where I use <<sec:spielbeispiel>> along with [[sec:spielbeispiel]], often along with @@latex:\phantomsection\label{sec:spielbeispiel}@@ to enable reliable inline linking inside org-mode and across different export formats. If I understood the proposal right, all of these would break. Or did I misundestand that? Best wishes, Arne -- Unpolitisch sein heißt politisch sein, ohne es zu merken. draketo.de [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 1125 bytes --] ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [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/)]) 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 0 siblings, 2 replies; 43+ messages in thread From: Ihor Radchenko @ 2023-09-02 7:26 UTC (permalink / raw) To: Dr. Arne Babenhauserheide Cc: Max Nikulin, Bastien, Timothy, Tom Gillespie, Csepp, emacs-orgmode "Dr. Arne Babenhauserheide" <arne_bab@web.de> writes: >> May you elaborate about what is going to be broken? > > I have many links where I use <<sec:spielbeispiel>> along with > [[sec:spielbeispiel]], often along with > @@latex:\phantomsection\label{sec:spielbeispiel}@@ to enable reliable > inline linking inside org-mode and across different export formats. > > If I understood the proposal right, all of these would break. Or did I > misundestand that? What I had in mind is that only parser will be changed. Now, [[sec:spielbeispiel]] is (link :type "fuzzy" :path "sec:spielbeispiel" ...) With my proposal, it would become (link :type "sec" :path "spielbeispiel" ...) However, "sec" link type will still not be listed in the output `org-link-types' (not registered). Then, ox.el and other link processing code, when encountering a link type that is not registered, will fall back to searching "fuzzy" link. So, export, and following the link should not be affected. There might be caveats related to parser though. -- 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> ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [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/)]) 2023-09-02 7:26 ` Ihor Radchenko @ 2023-09-02 7:54 ` Dr. Arne Babenhauserheide 2023-09-04 14:58 ` Max Nikulin 1 sibling, 0 replies; 43+ messages in thread From: Dr. Arne Babenhauserheide @ 2023-09-02 7:54 UTC (permalink / raw) To: Ihor Radchenko Cc: Max Nikulin, Bastien, Timothy, Tom Gillespie, Csepp, emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 457 bytes --] Ihor Radchenko <yantar92@posteo.net> writes: > Then, ox.el and other link processing code, when encountering a link > type that is not registered, will fall back to searching "fuzzy" link. > > So, export, and following the link should not be affected. This resolves my worry — thank you! > There might be caveats related to parser though. Best wishes, Arne -- Unpolitisch sein heißt politisch sein, ohne es zu merken. draketo.de [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 1125 bytes --] ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [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/)]) 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 1 sibling, 1 reply; 43+ messages in thread From: Max Nikulin @ 2023-09-04 14:58 UTC (permalink / raw) To: emacs-orgmode On 02/09/2023 14:26, Ihor Radchenko wrote: > With my proposal, it would become > > (link :type "sec" :path "spielbeispiel" ...) > > However, "sec" link type will still not be listed in the output > `org-link-types' (not registered). > > Then, ox.el and other link processing code, when encountering a link > type that is not registered, will fall back to searching "fuzzy" link. > > So, export, and following the link should not be affected. I do not see which way it may help in the reported case of complications with URI schemes not enabled by default. What is the purpose of parser changes if links can not be exported or opened? I am unsure if any "PREFIX:" should be recognized as a link type, but there is another possibility on this way: allow users to mark some prefixes as search links, not link types. Taking into account requests to enable more URI schemes by default, requiring to explicitly disable some prefixes may be acceptable compromise. It may be necessary even if fixed set of link types is allowed by default instead of arbitrary prefix. Changes of behavior disturbs a part of users, but strictly adhering backward compatibility means inconvenience for others. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [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/)]) 2023-09-04 14:58 ` Max Nikulin @ 2023-09-05 11:02 ` Ihor Radchenko 2023-09-06 14:27 ` Max Nikulin 0 siblings, 1 reply; 43+ messages in thread From: Ihor Radchenko @ 2023-09-05 11:02 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: > On 02/09/2023 14:26, Ihor Radchenko wrote: >> With my proposal, it would become >> >> (link :type "sec" :path "spielbeispiel" ...) >> >> However, "sec" link type will still not be listed in the output >> `org-link-types' (not registered). >> >> Then, ox.el and other link processing code, when encountering a link >> type that is not registered, will fall back to searching "fuzzy" link. >> >> So, export, and following the link should not be affected. > > I do not see which way it may help in the reported case of complications > with URI schemes not enabled by default. What is the purpose of parser > changes if links can not be exported or opened? What I had in mind is a bit elaborate: 1. We get actual link type 2. If link type is not registered, we try "fuzzy" 3. If "fuzzy" target is not found, instead of broken link, we export a link with unknown type. > I am unsure if any "PREFIX:" should be recognized as a link type, but > there is another possibility on this way: allow users to mark some > prefixes as search links, not link types. May you elaborate? -- 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> ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [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/)]) 2023-09-05 11:02 ` Ihor Radchenko @ 2023-09-06 14:27 ` Max Nikulin 2023-09-07 10:42 ` Ihor Radchenko 0 siblings, 1 reply; 43+ messages in thread From: Max Nikulin @ 2023-09-06 14:27 UTC (permalink / raw) To: emacs-orgmode On 05/09/2023 18:02, Ihor Radchenko wrote: > > What I had in mind is a bit elaborate: > 1. We get actual link type > 2. If link type is not registered, we try "fuzzy" > 3. If "fuzzy" target is not found, instead of broken link, we export a > link with unknown type. It makes sense as an additional variant for `org-export-with-broken-links'. Currently no option allows to export description of broken links and sometimes it is inconvenient. > Max Nikulin writes: >> I am unsure if any "PREFIX:" should be recognized as a link type, but >> there is another possibility on this way: allow users to mark some >> prefixes as search links, not link types. > > May you elaborate? I am considering another behavior. If any PREFIX: is recognized then the link exported literally as PREFIX:PATH unless the PREFIX is registered as (org-link-register-search-link-prefix "sec") So if the document does not contain PREFIX:NAME target then it is an export error (or another prescription controlled by `org-export-with-broken-links') and it may be reported so by `org-lint'. Different users expect different degree of strictness during link export. I am unsure which variant is better. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [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/)]) 2023-09-06 14:27 ` Max Nikulin @ 2023-09-07 10:42 ` Ihor Radchenko 2023-09-07 11:07 ` Max Nikulin 0 siblings, 1 reply; 43+ messages in thread From: Ihor Radchenko @ 2023-09-07 10:42 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: >> Max Nikulin writes: >>> I am unsure if any "PREFIX:" should be recognized as a link type, but >>> there is another possibility on this way: allow users to mark some >>> prefixes as search links, not link types. >> >> May you elaborate? > > I am considering another behavior. If any PREFIX: is recognized then the > link exported literally as PREFIX:PATH unless the PREFIX is registered as > > (org-link-register-search-link-prefix "sec") > > So if the document does not contain PREFIX:NAME target then it is an > export error (or another prescription controlled by > `org-export-with-broken-links') and it may be reported so by `org-lint'. > > Different users expect different degree of strictness during link > export. I am unsure which variant is better. I feel that it will be too complex. We might simply throw a warning when we get unregistered [[type:path]] link, so that the user can notice if there is any problem. -- 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> ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [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/)]) 2023-09-07 10:42 ` Ihor Radchenko @ 2023-09-07 11:07 ` Max Nikulin 2023-09-07 11:22 ` Ihor Radchenko 0 siblings, 1 reply; 43+ messages in thread From: Max Nikulin @ 2023-09-07 11:07 UTC (permalink / raw) To: emacs-orgmode On 07/09/2023 17:42, Ihor Radchenko wrote: > Max Nikulin writes: >> >> I am considering another behavior. If any PREFIX: is recognized then the >> link exported literally as PREFIX:PATH unless the PREFIX is registered as >> >> (org-link-register-search-link-prefix "sec") >> >> So if the document does not contain PREFIX:NAME target then it is an >> export error (or another prescription controlled by >> `org-export-with-broken-links') and it may be reported so by `org-lint'. >> >> Different users expect different degree of strictness during link >> export. I am unsure which variant is better. > > I feel that it will be too complex. > We might simply throw a warning when we get unregistered [[type:path]] > link, so that the user can notice if there is any problem. I do not think it noticeably increases complexity in comparison to the current state of affairs, but I agree concerning warnings. It would be great. It is my dream for a long time to get a buffer with export warnings in `compilation-mode' with file:lineno labels. I admit it may be a challenge taking into account include directives and various filters that changes content of export buffer. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [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/)]) 2023-09-07 11:07 ` Max Nikulin @ 2023-09-07 11:22 ` Ihor Radchenko 0 siblings, 0 replies; 43+ messages in thread From: Ihor Radchenko @ 2023-09-07 11:22 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: >> >> I feel that it will be too complex. >> We might simply throw a warning when we get unregistered [[type:path]] >> link, so that the user can notice if there is any problem. > > I do not think it noticeably increases complexity in comparison to the > current state of affairs, but I agree concerning warnings. It would be > great. Yeah. But, as usual, someone™ has to do it. Another common request is synctex support for Org source buffers. > It is my dream for a long time to get a buffer with export warnings in > `compilation-mode' with file:lineno labels. I admit it may be a > challenge taking into account include directives and various filters > that changes content of export buffer. Not necessarily. At least, includes are trivial - the buffer ox.el works on is not the original buffer, but a copy with all the includes expanded, everything that should be removed - removed, and everything that should be edited - edited. So, we may simply link to that buffer. -- 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> ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [DISCUSSION] May we recognize everything like [[protocol:uri]] as a non-fuzzy link? 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 12:15 ` 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 ` (2 subsequent siblings) 4 siblings, 1 reply; 43+ messages in thread From: Jens Lechtenboerger @ 2023-09-01 12:15 UTC (permalink / raw) To: Ihor Radchenko Cc: Max Nikulin, Bastien, Timothy, Tom Gillespie, Csepp, emacs-orgmode On 2023-09-01, Ihor Radchenko wrote: > In theory, we might change the parser to treat anything like foo:bar or > <foo:bar> or [[foo:bar]] as a link with "foo" protocol and "bar" URI. > And introduce [[::fig:something]] to allow explicit internal links. > But, despite simplifying the parser, it will certainly be a breaking > change. What would the implications be? FAQ 18.25 [1] contains a recipe to use colors on text like this: [[color:red][red]] Would that be a problem? Also, I use custom link types for additional markup like this: [[basic:https://en.wikipedia.org/wiki/Cache_(computing)][Caching]] In both cases, the part before the first colon is certainly no protocol. Besides, concerning wording in this discussion: A URIs may or may not embed a protocol. It contains a scheme, then a colon, then a scheme-specific part, see [2]. Best wishes Jens [1] https://orgmode.org/worg/org-faq.html [2] https://datatracker.ietf.org/doc/html/rfc3986 ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [DISCUSSION] May we recognize everything like [[protocol:uri]] as a non-fuzzy link? 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 0 siblings, 0 replies; 43+ messages in thread From: Ihor Radchenko @ 2023-09-02 7:29 UTC (permalink / raw) To: Jens Lechtenboerger Cc: Max Nikulin, Bastien, Timothy, Tom Gillespie, Csepp, emacs-orgmode Jens Lechtenboerger <lechten@wi.uni-muenster.de> writes: > On 2023-09-01, Ihor Radchenko wrote: > >> In theory, we might change the parser to treat anything like foo:bar or >> <foo:bar> or [[foo:bar]] as a link with "foo" protocol and "bar" URI. >> And introduce [[::fig:something]] to allow explicit internal links. >> But, despite simplifying the parser, it will certainly be a breaking >> change. > > What would the implications be? FAQ 18.25 [1] contains a recipe to > use colors on text like this: [[color:red][red]] > > Would that be a problem? > > Also, I use custom link types for additional markup like this: > > [[basic:https://en.wikipedia.org/wiki/Cache_(computing)][Caching]] > > In both cases, the part before the first colon is certainly no > protocol. Sorry for the confusion. I mean link type in Org parser terms, not protocol. Your examples will not be affected. What will be affected is fuzzy internal links. -- 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> ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [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/)]) 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 12:15 ` [DISCUSSION] May we recognize everything like [[protocol:uri]] as a non-fuzzy link? Jens Lechtenboerger @ 2023-09-01 18:53 ` 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-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 4 siblings, 1 reply; 43+ messages in thread From: Tom Gillespie @ 2023-09-01 18:53 UTC (permalink / raw) To: Ihor Radchenko, Dr. Arne Babenhauserheide Cc: Max Nikulin, Bastien, Timothy, Csepp, emacs-orgmode This is a timely discussion. I have been thinking about how to deal with prefixes defined by the #+link: keyword which is directly related to this question. I think the following might be a solution that also avoids the issue brought up by Arne. The original "bug" cannot be resolved because bare URIs have syntax that conflicts with Org syntax. However I think we can do better than directing users to org-link-set-parameters. My suggestion is as follows. Schemes/prefixes defined by the #+link: keyword can be used without surrounding syntax markers but may not contain spaces etc. To support this Org parsers should always parse prefix:suffix as a _putative_ link which must then be checked against a list of known schemes that are either built in or have been declared by the user to indeed be legitimate schemes. In the tel: case, the way to solve the original bug is simply to add the line #+link: tel tel: which would tell Org that e.g. tel:555-555-5555 is a real uri, and that it should expand to itself. At the same time this solution would avoid Arne's issue (which I also have in some of my documents where I have use fig: and tbl: as prefixes in names and reference them via [[fig:figure-name]]) because the parser would only treat prefix: in an internal link as a scheme if it is defined explicitly by the user in a #+link: keyword or in their init.el. Thoughts? Tom ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [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/)]) 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 0 siblings, 0 replies; 43+ messages in thread From: Ihor Radchenko @ 2023-09-02 7:45 UTC (permalink / raw) To: Tom Gillespie Cc: Dr. Arne Babenhauserheide, Max Nikulin, Bastien, Timothy, Csepp, emacs-orgmode Tom Gillespie <tgbugs@gmail.com> writes: > My suggestion is as follows. Schemes/prefixes defined by the > #+link: keyword can be used without surrounding syntax markers > but may not contain spaces etc. > ... To support this Org parsers > should always parse prefix:suffix as a _putative_ link which > must then be checked against a list of known schemes that > are either built in or have been declared by the user to indeed > be legitimate schemes. > > In the tel: case, the way to solve the original bug is simply > to add the line #+link: tel tel: which would tell Org that e.g. > tel:555-555-5555 is a real uri, and that it should expand to > itself. Currently, link abbreviations are explicitly allowed in bracket links and only bracket links. The currently available way to force tel: link type is using angle links: <tel:555-555-5555> No special #+link keyword is needed in the above example. > At the same time this solution would avoid Arne's issue > (which I also have in some of my documents where I have > use fig: and tbl: as prefixes in names and reference them > via [[fig:figure-name]]) because the parser would only treat > prefix: in an internal link as a scheme if it is defined explicitly > by the user in a #+link: keyword or in their init.el. The most annoying part is that we have three not fully consistent link markups: http://plain-link.com <http://angle-link.com> [[http://bracket-link.com]] The plain link only works for `org-link-types' - registered link types. The angle link works all the time, unconditionally parsing <foo:bar> with "foo" being link type and "bar" being link path. Abbreviations are ignored. The bracket link works only for `org-link-types' __and__ link abbreviations. If whatever inside brackets is not matching know link type or abbreviation, it is considered a fuzzy link. As you see, the situation might easily get confusing in corner cases. My proposal aims to extend the bracket link a bit - the most commonly used link type. However, it creates a problem with fuzzy links. Even more problematic is plain link type where any kind of open syntax will likely clash with normal text flow with innocent text like A:B being suddenly considered a link. -- 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> ^ permalink raw reply [flat|nested] 43+ messages in thread
* [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/)] 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 ` (2 preceding siblings ...) 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 12:00 ` Max Nikulin 2023-09-03 7:53 ` 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 4 siblings, 1 reply; 43+ messages in thread From: Max Nikulin @ 2023-09-02 12:00 UTC (permalink / raw) To: emacs-orgmode On 01/09/2023 16:04, Ihor Radchenko wrote: > Max Nikulin writes: > >> However I do not mind to have an easy way to delegate URI from :export >> function to the link transcoder of active export backend. > Just make the :export function return nil. I missed this feature, but anyway it does not work as expected. (org-link-set-parameters "tel") or (org-link-set-parameters "tel" :export (lambda (_path _descr _backend) nil)) strips link type and exports links as e.g. \href{321}{call} "tel:" is missed. Each backend has its own hardcoded list of blessed link types to preserve link type/protocol/scheme: - LaTeX: "http" "https" "ftp" "mailto" "doi" - HTML: "http" "https" "ftp" "mailto" "news" Actually I had in mind more flexible delegation. :export functions should be able to alter URI, attributes and to provide description if it is missed, but did not care if '<a href=""></a>' or '\href{}{}' should be used. Easy way to add protocol/scheme should include :follow with `browse-url' as well. ^ permalink raw reply [flat|nested] 43+ messages in thread
* 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/)] 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 0 siblings, 1 reply; 43+ messages in thread From: Ihor Radchenko @ 2023-09-03 7:53 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: > On 01/09/2023 16:04, Ihor Radchenko wrote: >> Max Nikulin writes: >> >>> However I do not mind to have an easy way to delegate URI from :export >>> function to the link transcoder of active export backend. > >> Just make the :export function return nil. > > I missed this feature, but anyway it does not work as expected. > > (org-link-set-parameters "tel") > > or > > (org-link-set-parameters > "tel" > :export (lambda (_path _descr _backend) nil)) > > strips link type and exports links as e.g. > > \href{321}{call} > > "tel:" is missed. Each backend has its own hardcoded list of blessed > link types to preserve link type/protocol/scheme: > - LaTeX: "http" "https" "ftp" "mailto" "doi" > - HTML: "http" "https" "ftp" "mailto" "news" In `org-latex-link', (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)))) is fishy. We may simply use (org-element-property :raw-link link) and leave special handling to "file" links only. Does it make sense? > Actually I had in mind more flexible delegation. :export functions > should be able to alter URI, attributes and to provide description if it > is missed, but did not care if '<a href=""></a>' or '\href{}{}' should > be used. I'd call that :filter rather than :export :) Have nothing against it, though it is not 100% relevant to this particular report. > Easy way to add protocol/scheme should include :follow with `browse-url' > as well. Sorry, but I do not understand what you are referring to. May you elaborate? -- 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> ^ permalink raw reply [flat|nested] 43+ messages in thread
* 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/)] 2023-09-03 7:53 ` Ihor Radchenko @ 2023-09-04 10:51 ` Max Nikulin 2023-09-05 9:42 ` Ihor Radchenko 0 siblings, 1 reply; 43+ messages in thread From: Max Nikulin @ 2023-09-04 10:51 UTC (permalink / raw) To: emacs-orgmode On 03/09/2023 14:53, Ihor Radchenko wrote: > Max Nikulin writes: >> I missed this feature, but anyway it does not work as expected. >> >> (org-link-set-parameters "tel") ... >> \href{321}{call} >> >> "tel:" is missed. I have realized that it is possible to take advantage of current behavior: (org-link-set-parameters "browse" :follow (lambda (url arg) (browse-url url arg))) so [[browse:tel:+321][call]] with *any* protocol is properly exported and opened. The only inconvenience is that the "browse:" type must be added when a link is inserted or stripped down to copy a URL. > (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)))) > > is fishy. I do not like that lists of types in ox backends are not the same as in ol.el: (dolist (scheme '("ftp" "http" "https" "mailto" "news")) (org-link-set-parameters scheme > We may simply use (org-element-property :raw-link link) and leave > special handling to "file" links only. > > Does it make sense? From my point of view it will be more sane behavior. However it may require update of 3rd party ox backends. >> Actually I had in mind more flexible delegation. :export functions >> should be able to alter URI, attributes and to provide description if it >> is missed, but did not care if '<a href=""></a>' or '\href{}{}' should >> be used. > > I'd call that :filter rather than :export :) It is an option, the only disadvantage is that `org-link-properties' can not set an export filter directly. > Have nothing against it, though it is not 100% relevant to this > particular report. If there were an `org-link-properties' field to export link as a parsed element, not just path and description then it would be easier to define backend agnostic export function for a non-standard link type. >> Easy way to add protocol/scheme should include :follow with `browse-url' >> as well. > > Sorry, but I do not understand what you are referring to. > May you elaborate? My reading of the bug report subject is that it should be easy to define a link type for a protocol not supported by Org mode out of the box. Minimal features are export and follow using a handler configured desktop-wide or Emacs-wide. ^ permalink raw reply [flat|nested] 43+ messages in thread
* 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/)] 2023-09-04 10:51 ` Max Nikulin @ 2023-09-05 9:42 ` Ihor Radchenko 2023-09-10 4:40 ` Max Nikulin 0 siblings, 1 reply; 43+ messages in thread From: Ihor Radchenko @ 2023-09-05 9:42 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: >>> (org-link-set-parameters "tel") > ... >>> \href{321}{call} >>> >>> "tel:" is missed. > > I have realized that it is possible to take advantage of current behavior: > > (org-link-set-parameters > "browse" > :follow > (lambda (url arg) (browse-url url arg))) > > so [[browse:tel:+321][call]] with *any* protocol is properly exported > and opened. The only inconvenience is that the "browse:" type must be > added when a link is inserted or stripped down to copy a URL. I strongly discourage abusing internal implementation details. This behaviour is not documented. Moreover, I just suggested changing it. >> (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)))) >> >> is fishy. > > I do not like that lists of types in ox backends are not the same as in > ol.el: > > (dolist (scheme '("ftp" "http" "https" "mailto" "news")) > (org-link-set-parameters scheme My suggestion will avoid the very need to have this list. >> We may simply use (org-element-property :raw-link link) and leave >> special handling to "file" links only. >> >> Does it make sense? > > 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. For now, the current behaviour looks like an oversight. Also, only ox-latex-derived backends that worked around the current undocumented behaviour might be affected. >>> Actually I had in mind more flexible delegation. :export functions >>> should be able to alter URI, attributes and to provide description if it >>> is missed, but did not care if '<a href=""></a>' or '\href{}{}' should >>> be used. >> >> I'd call that :filter rather than :export :) > > It is an option, the only disadvantage is that `org-link-properties' can > not set an export filter directly. What I meant is a new link property called :filter. >>> Easy way to add protocol/scheme should include :follow with `browse-url' >>> as well. >> >> Sorry, but I do not understand what you are referring to. >> May you elaborate? > > My reading of the bug report subject is that it should be easy to define > a link type for a protocol not supported by Org mode out of the box. > Minimal features are export and follow using a handler configured > desktop-wide or Emacs-wide. This is not what the bug report was about. I'd prefer to focus this particular discussion closer to the bug report reproducer. Feel free to branch off a new feature request about :follow with more details on what you have in mind. I'd prefer a more concrete proposal, because I have no good ideas how to make things easier. -- 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> ^ permalink raw reply [flat|nested] 43+ messages in thread
* 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/)] 2023-09-05 9:42 ` Ihor Radchenko @ 2023-09-10 4:40 ` Max Nikulin 2023-09-17 22:08 ` Rudolf Adamkovič 2024-02-05 15:41 ` [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 0 siblings, 2 replies; 43+ messages in thread From: Max Nikulin @ 2023-09-10 4:40 UTC (permalink / raw) To: emacs-orgmode 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. ^ permalink raw reply [flat|nested] 43+ messages in thread
* 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/)] 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 2024-02-05 15:41 ` [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 1 sibling, 1 reply; 43+ messages in thread From: Rudolf Adamkovič @ 2023-09-17 22:08 UTC (permalink / raw) To: Max Nikulin, emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: > 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>. This would be a very welcome fix! I avoid 'elisp' links, even in my Emacs notes, as they do not export correctly. Rudy -- "Chop your own wood and it will warm you twice." -- Henry Ford; Francis Kinloch, 1819; Henry David Thoreau, 1854 Rudolf Adamkovič <salutis@me.com> [he/him] Studenohorská 25 84103 Bratislava Slovakia ^ permalink raw reply [flat|nested] 43+ messages in thread
* Exporting elisp: and shell: links 2023-09-17 22:08 ` Rudolf Adamkovič @ 2023-09-18 15:20 ` Max Nikulin 2023-09-19 0:10 ` Rudolf Adamkovič 0 siblings, 1 reply; 43+ messages in thread From: Max Nikulin @ 2023-09-18 15:20 UTC (permalink / raw) To: emacs-orgmode On 18/09/2023 05:08, Rudolf Adamkovič wrote: > Max Nikulin writes: > >> 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>. > > This would be a very welcome fix! I avoid > 'elisp' links, even in my Emacs notes, as > they do not export correctly. Do you think a label specifying language should be added to code snippets, e.g. <code title="elisp">(identity "a")</code> or it is useless and may cause undesired noise for screen reader users? What about LaTeX? What is your expectation for links having description? [[elisp:(identity "a")][Run it]] Unsure if making plain text from description is the best solution. Some interactive element may be added to HTML to reveal the code or at least it may be put into tooltip <span class="code" title="elisp:(identity "a")">Run it</span>. The downside is that title attribute can not be easily copied (at least without a dedicated extension). ODT and LaTeX are more tricky again (a footnote?). ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: Exporting elisp: and shell: links 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 0 siblings, 1 reply; 43+ messages in thread From: Rudolf Adamkovič @ 2023-09-19 0:10 UTC (permalink / raw) To: Max Nikulin, emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: > Do you think a label specifying language should be added to code > snippets, e.g. <code title="elisp">(identity "a")</code> or it is > useless and may cause undesired noise for screen reader users? What > about LaTeX? As a user, I would expect [[elisp:(identity "a")]] to be export-equivalent to src_elisp[:exports code]{(identity "a")} across all backends. [If Org works as it should, then that solves screen readers, LaTeX, etc.] > What is your expectation for links having description? > > [[elisp:(identity "a")][Run it]] Good point! Perhaps we just need to find a good symbol that would work well between the Elisp code and the description? For example /Run it/ \to src_elisp[:exports code]{(identity "a")} exports to ASCII as /Run it/ -> `(identity "a")' Of course, \to could be something else... WDYT? Rudy -- "Thinking is a momentary dismissal of irrelevancies." -- Richard Buckminster Fuller, 1969 Rudolf Adamkovič <salutis@me.com> [he/him] Studenohorská 25 84103 Bratislava Slovakia ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: Exporting elisp: and shell: links 2023-09-19 0:10 ` Rudolf Adamkovič @ 2023-09-19 15:19 ` Max Nikulin 2023-09-21 9:49 ` Ihor Radchenko 0 siblings, 1 reply; 43+ messages in thread From: Max Nikulin @ 2023-09-19 15:19 UTC (permalink / raw) To: emacs-orgmode On 19/09/2023 07:10, Rudolf Adamkovič wrote: > Max Nikulin <manikulin@gmail.com> writes: > >> Do you think a label specifying language should be added to code >> snippets, e.g. <code title="elisp">(identity "a")</code> or it is >> useless and may cause undesired noise for screen reader users? What >> about LaTeX? > > As a user, I would expect > > [[elisp:(identity "a")]] > > to be export-equivalent to > > src_elisp[:exports code]{(identity "a")} > > across all backends. (defun org-link-export-eval-link-no-descr (type path descr backend info) (unless descr (let ((element (org-element-create 'inline-src-block (list :language type :value path :parameters ":exports code :noweb no :eval never")))) (org-export-data element info)))) (defun org-link-make-export-eval-link-no-descr (type) (lambda (path descr backend info) (org-link-export-eval-link-no-descr type path descr backend info))) (dolist (type '("elisp" "shell")) (org-link-set-parameters type :export (org-link-make-export-eval-link-no-descr type))) >> What is your expectation for links having description? >> >> [[elisp:(identity "a")][Run it]] > > Good point! Perhaps we just need to find a > good symbol that would work well between the > Elisp code and the description? > > For example > > /Run it/ \to src_elisp[:exports code]{(identity "a")} > > exports to ASCII as > > /Run it/ -> `(identity "a")' > > Of course, \to could be something else... I have another example: [[elisp:(server-start)][=M-x server-start RET=]] suitable for a printed document. From my point of view, it is better either to drop link path completely or to add a button to copy the code to clipboard. Repetition is undesired. So I am unsure if it is possible to choose unambiguous rules for export of elisp and shell links. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: Exporting elisp: and shell: links 2023-09-19 15:19 ` Max Nikulin @ 2023-09-21 9:49 ` Ihor Radchenko 2023-09-22 23:43 ` Rudolf Adamkovič 0 siblings, 1 reply; 43+ messages in thread From: Ihor Radchenko @ 2023-09-21 9:49 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: >> As a user, I would expect >> >> [[elisp:(identity "a")]] >> >> to be export-equivalent to >> >> src_elisp[:exports code]{(identity "a")} >> >> across all backends. Makes sense. >>> What is your expectation for links having description? >>> >>> [[elisp:(identity "a")][Run it]] >> >> Good point! Perhaps we just need to find a >> good symbol that would work well between the >> Elisp code and the description? >> >> For example >> >> /Run it/ \to src_elisp[:exports code]{(identity "a")} >> >> exports to ASCII as >> >> /Run it/ -> `(identity "a")' >> >> Of course, \to could be something else... Another idea: use code as description displayed in the tooltip (in html). Copy-on-clip also makes sense. Yet another idea: export code inside a footnote. This will work across all the backends. -- 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> ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: Exporting elisp: and shell: links 2023-09-21 9:49 ` Ihor Radchenko @ 2023-09-22 23:43 ` Rudolf Adamkovič 2023-09-25 14:38 ` Max Nikulin 0 siblings, 1 reply; 43+ messages in thread From: Rudolf Adamkovič @ 2023-09-22 23:43 UTC (permalink / raw) To: Ihor Radchenko, Max Nikulin; +Cc: emacs-orgmode Ihor Radchenko <yantar92@posteo.net> writes: > Another idea: use code as description displayed in the tooltip (in html). > Copy-on-clip also makes sense. > > Yet another idea: export code inside a footnote. This will work across > all the backends. Yet another, another idea: export the description as a Lisp comment, after converting it to plain text. To use Max's example: src_elisp[:exports code]{(server-start) ; Launch server} src_elisp[:exports code]{(server-start) ; `M-x server-start RET'} Rudy -- "Logic is a science of the necessary laws of thought, without which no employment of the understanding and the reason takes place." -- Immanuel Kant, 1785 Rudolf Adamkovič <salutis@me.com> [he/him] Studenohorská 25 84103 Bratislava Slovakia ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: Exporting elisp: and shell: links 2023-09-22 23:43 ` Rudolf Adamkovič @ 2023-09-25 14:38 ` Max Nikulin 2023-09-26 10:42 ` Ihor Radchenko 0 siblings, 1 reply; 43+ messages in thread From: Max Nikulin @ 2023-09-25 14:38 UTC (permalink / raw) To: emacs-orgmode On 23/09/2023 06:43, Rudolf Adamkovič wrote: > Ihor Radchenko writes: > >> Another idea: use code as description displayed in the tooltip (in html). >> Copy-on-clip also makes sense. >> >> Yet another idea: export code inside a footnote. This will work across >> all the backends. > > Yet another, another idea: export the description as a Lisp comment, > after converting it to plain text. To use Max's example: > > src_elisp[:exports code]{(server-start) ; Launch server} > src_elisp[:exports code]{(server-start) ; `M-x server-start RET'} I do not think, code with comments is suitable for inline source blocks, such code should occupy a dedicated line. I am afraid, there is no variant that fits for all cases even in a particular document. It would be great to mark specific links, which way each one should be exported: You should run <attr:(:omit-code t)>[[elisp:(server-start)][=M-x server-start=]]. Or you can [[elisp:(identity "a")][run it]]. <p>You should run <code data-org-link="(server-start)">M-x server-start</code>. Or you can <span class="eval-link">run it</span> -> <code>(identity "a")</code>. I know, Ihor do not like the idea of attributes for inline objects due to complexity of current implementation of parser for #+attr_html: Ihor Radchenko. Re: [HELP] Fwd: Org format as a new standard source format for GNU manuals. Mon, 03 Oct 2022 12:36:20 +0800. https://list.orgmode.org/87r0zpy14r.fsf@localhost ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: Exporting elisp: and shell: links 2023-09-25 14:38 ` Max Nikulin @ 2023-09-26 10:42 ` Ihor Radchenko 2023-09-28 15:31 ` Rudolf Adamkovič 0 siblings, 1 reply; 43+ messages in thread From: Ihor Radchenko @ 2023-09-26 10:42 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: > I am afraid, there is no variant that fits for all cases even in a > particular document. Still, it would be nice to have _a_ variant compared to the current state of affairs. As for extra customization, it totally depends on the interest in this functionality. If not many people are interested, I'd put one variant in Org and left non-standard export to the users to customize via :export link property. -- 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> ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: Exporting elisp: and shell: links 2023-09-26 10:42 ` Ihor Radchenko @ 2023-09-28 15:31 ` Rudolf Adamkovič 2023-10-08 9:48 ` Ihor Radchenko 0 siblings, 1 reply; 43+ messages in thread From: Rudolf Adamkovič @ 2023-09-28 15:31 UTC (permalink / raw) To: Ihor Radchenko, Max Nikulin; +Cc: emacs-orgmode Ihor Radchenko <yantar92@posteo.net> writes: > Still, it would be nice to have _a_ variant compared to the current > state of affairs. Agreed. If the link has no description, we can do a great job on exporting it. Half of the victory, right there! Also, how about the following /simple/ idea for the description: [[elisp:(server-start)][Launch Server]] [[elisp:(server-start)][=M-x server-start RET=]] src_elisp[:exports code]{(server-start)} (Launch Server) src_elisp[:exports code]{(server-start)} (=M-x server-start RET=) TL;DR We export the description, if any, in parentheses after the code. Rudy -- "One can begin to reason only when a clear picture has been formed in the imagination." -- Walter Warwick Sawyer, Mathematician's Delight, 1943 Rudolf Adamkovič <salutis@me.com> [he/him] Studenohorská 25 84103 Bratislava Slovakia ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: Exporting elisp: and shell: links 2023-09-28 15:31 ` Rudolf Adamkovič @ 2023-10-08 9:48 ` Ihor Radchenko 2023-10-09 12:04 ` Max Nikulin 2023-10-11 19:34 ` Rudolf Adamkovič 0 siblings, 2 replies; 43+ messages in thread From: Ihor Radchenko @ 2023-10-08 9:48 UTC (permalink / raw) To: Rudolf Adamkovič; +Cc: Max Nikulin, emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 1360 bytes --] Rudolf Adamkovič <salutis@me.com> writes: >> Still, it would be nice to have _a_ variant compared to the current >> state of affairs. > > Agreed. If the link has no description, we can do a great job on > exporting it. Half of the victory, right there! > > Also, how about the following /simple/ idea for the description: > > [[elisp:(server-start)][Launch Server]] > [[elisp:(server-start)][=M-x server-start RET=]] > > src_elisp[:exports code]{(server-start)} (Launch Server) > src_elisp[:exports code]{(server-start)} (=M-x server-start RET=) > > TL;DR We export the description, if any, in parentheses after the code. See the attached diff, implementing your suggestion. I am not sure if I like it. Consider the following example file: ---- #+options: toc:nil author:nil [[elisp:(message "Hello")]] [[elisp:(message "Hello")][Message Hello]] ---- Without the diff, exporting to ASCII yields ---- <elisp:(message "Hello")> [Message Hello] [Message Hello] <elisp:(message "Hello")> ---- with the diff: ---- `(message "Hello")' `(message "Hello")' (Message Hello) --- For markdown: without diff: --- <(message "Hello")> [Message Hello]((message "Hello")) --- with: --- `(message "Hello")` `(message "Hello")` (Message Hello) --- For html: without diff: [-- Attachment #2: html-without-diff.png --] [-- Type: image/png, Size: 10838 bytes --] [-- Attachment #3: Type: text/plain, Size: 7 bytes --] with: [-- Attachment #4: html-with-diff.png --] [-- Type: image/png, Size: 13552 bytes --] [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #5: code-link-export.diff --] [-- Type: text/x-patch, Size: 1755 bytes --] diff --git a/lisp/ol.el b/lisp/ol.el index 20aab6bb8..d537709ac 100644 --- a/lisp/ol.el +++ b/lisp/ol.el @@ -1377,7 +1377,29 @@ (defun org-link--open-elisp (path _) (call-interactively (read path)))) (user-error "Abort"))) -(org-link-set-parameters "elisp" :follow #'org-link--open-elisp) +(defun org-link--export-code (path description _ info &optional lang) + "Export executable link with PATH and DESCRIPTION. +INFO is the current export info plist. +LANG is the language name, as in #+begin_src lang. For example, \"elisp\" +or \"shell\"." + (concat + (org-export-data + (org-element-create + 'inline-src-block + `( :language ,lang + :value ,path + :parameters ":exports code :noweb no :eval never")) + info) + (when description (format " (%s)" description)))) + +(defun org-link--export-elisp (path description _ info) + "Export elisp: link with PATH and DESCRIPTION according to INFO channel." + (org-link--export-code path description nil info "emacs-lisp")) + +(org-link-set-parameters + "elisp" + :follow #'org-link--open-elisp + :export #'org-link--export-elisp) ;;;; "file" link type (org-link-set-parameters "file" :complete #'org-link-complete-file) @@ -1435,7 +1457,14 @@ (defun org-link--open-shell (path _) clean-buffer-list-kill-buffer-names)))) (user-error "Abort"))) -(org-link-set-parameters "shell" :follow #'org-link--open-shell) +(defun org-link--export-shell (path description _ info) + "Export shell: link with PATH and DESCRIPTION according to INFO channel." + (org-link--export-code path description nil info "shell")) + +(org-link-set-parameters + "shell" + :follow #'org-link--open-shell + :export #'org-link--export-shell) \f ;;; Interactive Functions [-- Attachment #6: Type: text/plain, Size: 225 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> ^ permalink raw reply related [flat|nested] 43+ messages in thread
* Re: Exporting elisp: and shell: links 2023-10-08 9:48 ` Ihor Radchenko @ 2023-10-09 12:04 ` Max Nikulin 2023-10-09 12:12 ` Ihor Radchenko 2023-10-11 19:34 ` Rudolf Adamkovič 1 sibling, 1 reply; 43+ messages in thread From: Max Nikulin @ 2023-10-09 12:04 UTC (permalink / raw) To: emacs-orgmode On 08/10/2023 16:48, Ihor Radchenko wrote: > +++ b/lisp/ol.el > @@ -1377,7 +1377,29 @@ (defun org-link--open-elisp (path _) > (call-interactively (read path)))) > (user-error "Abort"))) > > -(org-link-set-parameters "elisp" :follow #'org-link--open-elisp) > +(defun org-link--export-code (path description _ info &optional lang) > + "Export executable link with PATH and DESCRIPTION. > +INFO is the current export info plist. > +LANG is the language name, as in #+begin_src lang. For example, \"elisp\" > +or \"shell\"." > + (concat > + (org-export-data > + (org-element-create > + 'inline-src-block > + `( :language ,lang > + :value ,path > + :parameters ":exports code :noweb no :eval never")) > + info) I think, the fragment above should be a public function that is a building block for users who want to override export of links having descriptions. > + (when description (format " (%s)" description)))) I hope, path was never added as default description, so checks (or (string-equal path description) (string-equal (concat type ":" path) description))) are not necessary to avoid annoying repetitions. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: Exporting elisp: and shell: links 2023-10-09 12:04 ` Max Nikulin @ 2023-10-09 12:12 ` Ihor Radchenko 2023-10-10 10:35 ` Max Nikulin 0 siblings, 1 reply; 43+ messages in thread From: Ihor Radchenko @ 2023-10-09 12:12 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: >> +(defun org-link--export-code (path description _ info &optional lang) > > I think, the fragment above should be a public function that is a > building block for users who want to override export of links having > descriptions. Sure, but that's minor. >> + (when description (format " (%s)" description)))) > > I hope, path was never added as default description, so checks (or > (string-equal path description) (string-equal (concat type ":" path) > description))) are not necessary to avoid annoying repetitions. Valid, but I am more concerned about the whole idea. I _feel_ that code (description) does not look nice in html export. I like more how ox-ascii (without the proposed diff) handles the situation via footnote-like link. That's my personal preferences though. Which is why I want to hear more opinions. In particular, I encourage others to play around with various exported documents with and without the diff and comment on how they look. -- 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> ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: Exporting elisp: and shell: links 2023-10-09 12:12 ` Ihor Radchenko @ 2023-10-10 10:35 ` Max Nikulin 2023-10-12 11:35 ` Ihor Radchenko 0 siblings, 1 reply; 43+ messages in thread From: Max Nikulin @ 2023-10-10 10:35 UTC (permalink / raw) To: emacs-orgmode On 09/10/2023 19:12, Ihor Radchenko wrote: > Valid, but I am more concerned about the whole idea. I _feel_ that > > code (description) > > does not look nice in html export. It is minor in comparison with invalid HTML that may be generated by current code. I am unsure if a better variant exist, but to evaluate it several real life examples are required. > I like more how ox-ascii (without the > proposed diff) handles the situation via footnote-like link. That is why I believe that extracting fragments of code into helper functions is important. If ox-ascii.el had a function that adds an item to link list then ol.el would use it to add src_elisp elements to this list. ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: Exporting elisp: and shell: links 2023-10-10 10:35 ` Max Nikulin @ 2023-10-12 11:35 ` Ihor Radchenko 2023-10-13 10:20 ` Max Nikulin 0 siblings, 1 reply; 43+ messages in thread From: Ihor Radchenko @ 2023-10-12 11:35 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: >> I like more how ox-ascii (without the >> proposed diff) handles the situation via footnote-like link. > > That is why I believe that extracting fragments of code into helper > functions is important. If ox-ascii.el had a function that adds an item > to link list then ol.el would use it to add src_elisp elements to this list. May you elaborate? I am not talking about implementation details, but about the reasonable defaults for the export. Not necessary ASCII, but other backends as well. -- 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> ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: Exporting elisp: and shell: links 2023-10-12 11:35 ` Ihor Radchenko @ 2023-10-13 10:20 ` Max Nikulin 2023-10-14 8:13 ` Ihor Radchenko 0 siblings, 1 reply; 43+ messages in thread From: Max Nikulin @ 2023-10-13 10:20 UTC (permalink / raw) To: emacs-orgmode On 12/10/2023 18:35, Ihor Radchenko wrote: > Max Nikulin writes: > >>> I like more how ox-ascii (without the >>> proposed diff) handles the situation via footnote-like link. >> >> That is why I believe that extracting fragments of code into helper >> functions is important. If ox-ascii.el had a function that adds an item >> to link list then ol.el would use it to add src_elisp elements to this list. > > May you elaborate? I am not talking about implementation details, but > about the reasonable defaults for the export. Not necessary ASCII, but > other backends as well. I am rather skeptical concerning a variant that is pleasant to read in all cases. That is why I suggest to provide tools that allow to customize export accordingly their writing styles. ASCII is a special case since it uses end note style to present link targets. Whether code is added before link description or after it, either parenthesis are used or not, the following functions may be convenient for Org and for users: - export argument as inline source block - add an item to ASCII list of links ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: Exporting elisp: and shell: links 2023-10-13 10:20 ` Max Nikulin @ 2023-10-14 8:13 ` Ihor Radchenko 0 siblings, 0 replies; 43+ messages in thread From: Ihor Radchenko @ 2023-10-14 8:13 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode Max Nikulin <manikulin@gmail.com> writes: >> May you elaborate? I am not talking about implementation details, but >> about the reasonable defaults for the export. Not necessary ASCII, but >> other backends as well. > I am rather skeptical concerning a variant that is pleasant to read in > all cases. That is why I suggest to provide tools that allow to > customize export accordingly their writing styles. Maybe then we can simply provide default :export for html and latex, but nothing else? > ASCII is a special case since it uses end note style to present link > targets. > > Whether code is added before link description or after it, either > parenthesis are used or not, the following functions may be convenient > for Org and for users: > - export argument as inline source block > - add an item to ASCII list of links I wouldn't oppose improving ox-ascii API. Feel free to submit a patch. -- 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> ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: Exporting elisp: and shell: links 2023-10-08 9:48 ` Ihor Radchenko 2023-10-09 12:04 ` Max Nikulin @ 2023-10-11 19:34 ` Rudolf Adamkovič 1 sibling, 0 replies; 43+ messages in thread From: Rudolf Adamkovič @ 2023-10-11 19:34 UTC (permalink / raw) To: Ihor Radchenko; +Cc: Max Nikulin, emacs-orgmode Ihor Radchenko <yantar92@posteo.net> writes: > I am not sure if I like it. Me neither. The problem is in the parentheses, IMHO. The Lisp expression is enclosed in parentheses and so is the description: (message "Hello") (Message Hello) That indeed looks confusing! How about we swap the sides and remove one pair of parentheses? That would give: Message Hello (message "Hello") Rudy -- "Genius is 1% inspiration and 99% perspiration." -- Thomas Alva Edison, 1932 Rudolf Adamkovič <salutis@me.com> [he/him] Studenohorská 25 84103 Bratislava Slovakia ^ permalink raw reply [flat|nested] 43+ messages in thread
* 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/)] 2023-09-10 4:40 ` Max Nikulin 2023-09-17 22:08 ` Rudolf Adamkovič @ 2024-02-05 15:41 ` Ihor Radchenko 2024-03-12 11:00 ` Ihor Radchenko 1 sibling, 1 reply; 43+ messages in thread From: Ihor Radchenko @ 2024-02-05 15:41 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode [-- 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> ^ permalink raw reply related [flat|nested] 43+ messages in thread
* 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/)] 2024-02-05 15:41 ` [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 @ 2024-03-12 11:00 ` Ihor Radchenko 0 siblings, 0 replies; 43+ messages in thread From: Ihor Radchenko @ 2024-03-12 11:00 UTC (permalink / raw) To: Max Nikulin; +Cc: emacs-orgmode Ihor Radchenko <yantar92@posteo.net> writes: >> 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. Applied, onto main. -- 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> ^ permalink raw reply [flat|nested] 43+ messages in thread
* Re: [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/)]) 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 ` (3 preceding siblings ...) 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-04 15:08 ` Max Nikulin 4 siblings, 0 replies; 43+ messages in thread From: Max Nikulin @ 2023-09-04 15:08 UTC (permalink / raw) To: emacs-orgmode On 01/09/2023 16:04, Ihor Radchenko wrote: > And introduce [[::fig:something]] to allow explicit internal links. I would consider an explicit link type for internal links, e.g. org: or o: to allow search links in angle brackets <o:src-block-name> or <org:#custom-id>. ^ permalink raw reply [flat|nested] 43+ messages in thread
end of thread, other threads:[~2024-03-12 10:57 UTC | newest] Thread overview: 43+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 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 ` [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 2024-03-12 11:00 ` 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
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).