emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* BUG?: Link to inline-task not working
@ 2021-12-03  8:30 Michael Dauer
  2021-12-03 10:51 ` Ihor Radchenko
  0 siblings, 1 reply; 7+ messages in thread
From: Michael Dauer @ 2021-12-03  8:30 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 636 bytes --]

Is there a setting that excludes inline-tasks from internal links?
I actually want to link to inline-tasks. BUT:
emacs -Q
>>>
* h1
  [[*t1][t1]]
* h2
*************** TODO t1
*************** END

(require 'org-inlinetask)
<<<
Before (require 'org-inlinetask) all is fine. But after executing (require
'org-inlinetask) the following happens:
1. With point on/in t1 (org-store-link) stores *h2.
2. The manually created link below h1 works in the buffer. But it is
exported as BROKEN LINK.

Org mode version 9.4.4 (release_9.4.4 @
c:/msys64/mingw64/share/emacs/27.2/lisp/org/)

Any ideas how to get fully working links to inline-tasks?
thx

[-- Attachment #2: Type: text/html, Size: 854 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: BUG?: Link to inline-task not working
  2021-12-03  8:30 BUG?: Link to inline-task not working Michael Dauer
@ 2021-12-03 10:51 ` Ihor Radchenko
  2021-12-03 14:20   ` Michael Dauer
  0 siblings, 1 reply; 7+ messages in thread
From: Ihor Radchenko @ 2021-12-03 10:51 UTC (permalink / raw)
  To: Michael Dauer; +Cc: emacs-orgmode

Michael Dauer <mick.dauer@gmail.com> writes:

> Before (require 'org-inlinetask) all is fine. But after executing (require
> 'org-inlinetask) the following happens:
> 1. With point on/in t1 (org-store-link) stores *h2.
> 2. The manually created link below h1 works in the buffer. But it is
> exported as BROKEN LINK.

Confirmed.

> Any ideas how to get fully working links to inline-tasks?

I have the following in my config to mitigate this problem:

(defun org-inlinetask-store-link (oldfun &rest args)
  "Store link to inlinetask at point."
  (if (and (derived-mode-p 'org-mode)
	   (org-inlinetask-in-task-p))
      (let ((org-inlinetask-min-level 1000))
	(apply oldfun args))
    (apply oldfun args)))

(advice-add 'org-store-link :around #'org-inlinetask-store-link)

Best,
Ihor


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: BUG?: Link to inline-task not working
  2021-12-03 10:51 ` Ihor Radchenko
@ 2021-12-03 14:20   ` Michael Dauer
  2021-12-04  3:19     ` Ihor Radchenko
  0 siblings, 1 reply; 7+ messages in thread
From: Michael Dauer @ 2021-12-03 14:20 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 1468 bytes --]

Ihor, thank you for the quick workaround.

Unfortunately storing links is not much of an issue for me. The real issue
is how I can get the internal links working in the exported html.

I could not find the right places to deactivate and
re-activate inline-tasks during export.

I have a custom org-html-format-inlinetask-function. If I
deactivate inline-tasks outside this formatter is never called, otherwise
the links are not generated.

Where are the links/href are built? There should be the error that excludes
inline-tasks.

thx,
m

Am Fr., 3. Dez. 2021 um 11:50 Uhr schrieb Ihor Radchenko <yantar92@gmail.com
>:

> Michael Dauer <mick.dauer@gmail.com> writes:
>
> > Before (require 'org-inlinetask) all is fine. But after executing
> (require
> > 'org-inlinetask) the following happens:
> > 1. With point on/in t1 (org-store-link) stores *h2.
> > 2. The manually created link below h1 works in the buffer. But it is
> > exported as BROKEN LINK.
>
> Confirmed.
>
> > Any ideas how to get fully working links to inline-tasks?
>
> I have the following in my config to mitigate this problem:
>
> (defun org-inlinetask-store-link (oldfun &rest args)
>   "Store link to inlinetask at point."
>   (if (and (derived-mode-p 'org-mode)
>            (org-inlinetask-in-task-p))
>       (let ((org-inlinetask-min-level 1000))
>         (apply oldfun args))
>     (apply oldfun args)))
>
> (advice-add 'org-store-link :around #'org-inlinetask-store-link)
>
> Best,
> Ihor
>

[-- Attachment #2: Type: text/html, Size: 2094 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: BUG?: Link to inline-task not working
  2021-12-03 14:20   ` Michael Dauer
@ 2021-12-04  3:19     ` Ihor Radchenko
  2021-12-06 13:14       ` Michael Dauer
  0 siblings, 1 reply; 7+ messages in thread
From: Ihor Radchenko @ 2021-12-04  3:19 UTC (permalink / raw)
  To: Michael Dauer; +Cc: emacs-orgmode

Michael Dauer <mick.dauer@gmail.com> writes:

> Where are the links/href are built? There should be the error that excludes
> inline-tasks.

A quick search through the code yields: org-export-resolve-id-link
It explicitly check headlines, but not inlinetasks.
The fix should not be too hard. Feel free to send a patch ;)

Best,
Ihor


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: BUG?: Link to inline-task not working
  2021-12-04  3:19     ` Ihor Radchenko
@ 2021-12-06 13:14       ` Michael Dauer
  2021-12-06 13:47         ` Ihor Radchenko
  0 siblings, 1 reply; 7+ messages in thread
From: Michael Dauer @ 2021-12-06 13:14 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 940 bytes --]

>
> > Where are the links/href are built? There should be the error that
> excludes
> > inline-tasks.
>
> A quick search through the code yields: org-export-resolve-id-link
> It explicitly check headlines, but not inlinetasks.
>

Shouldn't be org-export-resolve-fuzzy-link the relevant function, at least
for my use case?

But there it looks like it is searching through all elements including
inlinetasks, which is in org-element-all-elements:
(append pseudo-types '(target) org-element-all-elements)

Am Sa., 4. Dez. 2021 um 04:18 Uhr schrieb Ihor Radchenko <yantar92@gmail.com
>:

> Michael Dauer <mick.dauer@gmail.com> writes:
>
> > Where are the links/href are built? There should be the error that
> excludes
> > inline-tasks.
>
> A quick search through the code yields: org-export-resolve-id-link
> It explicitly check headlines, but not inlinetasks.
> The fix should not be too hard. Feel free to send a patch ;)
>
> Best,
> Ihor
>

[-- Attachment #2: Type: text/html, Size: 1593 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: BUG?: Link to inline-task not working
  2021-12-06 13:14       ` Michael Dauer
@ 2021-12-06 13:47         ` Ihor Radchenko
  2022-10-05  3:23           ` [org-export] Linking inlinetasks (was: BUG?: Link to inline-task not working) Ihor Radchenko
  0 siblings, 1 reply; 7+ messages in thread
From: Ihor Radchenko @ 2021-12-06 13:47 UTC (permalink / raw)
  To: Michael Dauer; +Cc: emacs-orgmode

Michael Dauer <mick.dauer@gmail.com> writes:

> Shouldn't be org-export-resolve-fuzzy-link the relevant function, at least
> for my use case?
>
> But there it looks like it is searching through all elements including
> inlinetasks, which is in org-element-all-elements:
> (append pseudo-types '(target) org-element-all-elements)

Maybe. Further it also calls org-export-search-cells, which does not
consider inlinetasks even if they are matched.

Best,
Ihor


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [org-export] Linking inlinetasks (was: BUG?: Link to inline-task not working)
  2021-12-06 13:47         ` Ihor Radchenko
@ 2022-10-05  3:23           ` Ihor Radchenko
  0 siblings, 0 replies; 7+ messages in thread
From: Ihor Radchenko @ 2022-10-05  3:23 UTC (permalink / raw)
  To: Michael Dauer; +Cc: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 1815 bytes --]

Ihor Radchenko <yantar92@gmail.com> writes:

> Michael Dauer <mick.dauer@gmail.com> writes:
>
>> Shouldn't be org-export-resolve-fuzzy-link the relevant function, at least
>> for my use case?
>>
>> But there it looks like it is searching through all elements including
>> inlinetasks, which is in org-element-all-elements:
>> (append pseudo-types '(target) org-element-all-elements)
>
> Maybe. Further it also calls org-export-search-cells, which does not
> consider inlinetasks even if they are matched.

I have investigated further.
In addition to inlinetasks not being taken into account by
`org-export-search-cells', `org-export-resolve-fuzzy-link', and
`org-export-resolve-id-link', there is no export backend support for
linking inlinetasks.

In order to have full support for inlinetasks during export, we need to
modify export backends to be able to link to the inlinetasks.

For example,
- ox-html.el does not associate ID anchor in
  `org-html-format-inlinetask-default-function'
- ox-latex.el also does not provide any label in
  `org-latex-format-inlinetask-default-function'
- ox-ascii.el does not assign a number to be referred to in
  `org-ascii-format-inlinetask-default'

I did not check other backends.

Note that changing only ox.el without altering the individual backends
can break export in unexpected ways.

I am attaching a simple patch changing the generic link resolution
machinery. If one applies the patch, **export will be broken**.
In particular, exporting to ASCII (C-c C-e t U) will straight throw
an error.

The same may happen in third-party export backends even if we alter the
all built-in export backends appropriately.

Thus, supporting links to inlinetasks will be a breaking change and such
support should be shielded behind a user customization, not be enabled
by default.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-lisp-ox.el-Allow-links-to-inlinetasks.patch --]
[-- Type: text/x-patch, Size: 2173 bytes --]

From c6737633b12b8f9de1a240b2f32f52d54e1c14a1 Mon Sep 17 00:00:00 2001
Message-Id: <c6737633b12b8f9de1a240b2f32f52d54e1c14a1.1664939959.git.yantar92@gmail.com>
From: Ihor Radchenko <yantar92@gmail.com>
Date: Wed, 5 Oct 2022 11:17:55 +0800
Subject: [PATCH] lisp/ox.el: Allow links to inlinetasks

* lisp/ox.el (org-export-search-cells):
(org-export-resolve-fuzzy-link):
(org-export-resolve-id-link): Resolve links to inlinetasks.

**This is not a proper commit**
Applying it will not make inlinetask links work during export.
Backend-specific support will be required.
---
 lisp/ox.el | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/lisp/ox.el b/lisp/ox.el
index 51145acaa..6090d1ecd 100644
--- a/lisp/ox.el
+++ b/lisp/ox.el
@@ -4313,7 +4313,7 @@ (defun org-export-search-cells (datum)
 A search cell is the internal representation of a fuzzy link.  It
 ignores white spaces and statistics cookies, if applicable."
   (pcase (org-element-type datum)
-    (`headline
+    ((or `headline `inlinetask)
      (let ((title (split-string
 		   (replace-regexp-in-string
 		    "\\[[0-9]*\\(?:%\\|/[0-9]*\\)\\]" " "
@@ -4408,7 +4408,8 @@ (defun org-export-resolve-fuzzy-link (link info &rest pseudo-types)
 	 ;; Matching both a name and a target is not valid, and
 	 ;; therefore undefined.
 	 (or (cl-some (lambda (datum)
-			(and (not (eq (org-element-type datum) 'headline))
+			(and (not (memq (org-element-type datum)
+                                      '(headline inlinetask)))
 			     datum))
 		      matches)
 	     (car matches))
@@ -4428,7 +4429,7 @@ (defun org-export-resolve-id-link (link info)
                              (let ((table (make-hash-table :test #'equal)))
                                (org-element-map
                                    (plist-get info :parse-tree)
-                                   'headline
+                                   '(headline inlinetask)
                                  (lambda (headline)
                                    (let ((id (org-element-property :ID headline))
                                          (custom-id (org-element-property :CUSTOM_ID headline)))
-- 
2.35.1


[-- Attachment #3: Type: text/plain, Size: 207 bytes --]



-- 
Ihor Radchenko,
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] 7+ messages in thread

end of thread, other threads:[~2022-10-05  3:23 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-03  8:30 BUG?: Link to inline-task not working Michael Dauer
2021-12-03 10:51 ` Ihor Radchenko
2021-12-03 14:20   ` Michael Dauer
2021-12-04  3:19     ` Ihor Radchenko
2021-12-06 13:14       ` Michael Dauer
2021-12-06 13:47         ` Ihor Radchenko
2022-10-05  3:23           ` [org-export] Linking inlinetasks (was: BUG?: Link to inline-task not working) Ihor Radchenko

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).