Re: [PATCH] org-export: Make results of named code blocks a valid link

2022-08-22 Thread Ihor Radchenko
Ihor Radchenko  writes:

>> Or just carry it over for :exports results only?
>
> I like this idea better. See the attached patch.
> After the patch, links to :exports both blocks will be ambiguous, unless
> the results are explicitly named. So, I documented this detail in the
> manual.

Applied onto main via 5184c4382.
https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=5184c4382da171fe5f451694251a0e28c24f4d98

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



Re: [PATCH] org-export: Make results of named code blocks a valid link

2022-08-08 Thread Ihor Radchenko
reza  writes:

> Sorry for my ignorance, I thought org-mode is part of Emacs but it seems 
> development happens in a separate repo. How is org-mode "added" to Emacs 
> because I was a little bit stuck in applying the patch?

Org mode is distributed with Emacs. However, we only put the latest
stable Org version when Emacs releases.

Because Emacs development is quite slow, Org chose to do the main
development in a separate repo and release on ELPA between Emacs major
releases. See more details in https://orgmode.org/,
https://orgmode.org/worg/org-contribute.html, and
https://orgmode.org/worg/org-maintenance.html

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



Re: [PATCH] org-export: Make results of named code blocks a valid link

2022-08-08 Thread reza
On 8/5/22 12:15, Ihor Radchenko wrote:
> I like this idea better. See the attached patch.
> After the patch, links to :exports both blocks will be ambiguous, unless
> the results are explicitly named. So, I documented this detail in the
> manual.

Looks good for me!

Sorry for my ignorance, I thought org-mode is part of Emacs but it seems 
development happens in a separate repo. How is org-mode "added" to Emacs 
because I was a little bit stuck in applying the patch?

Cheers Reza



OpenPGP_0xC375C6AF05125C52.asc
Description: application/pgp-keys


OpenPGP_signature
Description: PGP signature


[PATCH] org-export: Make results of named code blocks a valid link

2022-08-05 Thread Ihor Radchenko
reza  writes:

> On 8/5/22 03:48, Ihor Radchenko wrote:
>> 
>> This email is already a bug report :)
> Haha nice :)
>> 
>> However, we cannot just blindly carry over the name tag to the result.
>> 
>> Consider a case when you have ":results both" in your src block. Where
>> should the [[html transformation]] link refer to? The src block? The
>> resulting image?
>> 
> Perhaps it is sufficient to add a hint to the error message:
>
> unable to resolve link, name tag is on source but you specified :exports 
> results

This would be tricky. The export code is only presented with buffer
version to be exported. All the :exports none/:exports results code
blocks are removed when we resolve links.

> Or just carry it over for :exports results only?

I like this idea better. See the attached patch.
After the patch, links to :exports both blocks will be ambiguous, unless
the results are explicitly named. So, I documented this detail in the
manual.

Let me know if there are any objections.

Best,
Ihor

>From 0a0dda33cee7355602feb954e0645ed8652e0983 Mon Sep 17 00:00:00 2001
Message-Id: <0a0dda33cee7355602feb954e0645ed8652e0983.1659694297.git.yanta...@gmail.com>
From: Ihor Radchenko 
Date: Fri, 5 Aug 2022 18:09:02 +0800
Subject: [PATCH] org-export: Make results of named code blocks a valid link
 target

* lisp/ox.el (org-export-search-cells): Use #+RESULTS keyword as
search cell when #+NAME is not provided.  Update the docstring
accordingly.
(org-export-resolve-fuzzy-link): Update the docstring.

* doc/org-manual.org (Exporting Code Blocks): Document the new
behavior and explain the details of exporting links to named code
blocks/results.

Fixes https://orgmode.org/list/010201826cb68597-bf75d596-7890-4dd0-b9ff-0c7b617b4dd4-000...@eu-west-1.amazonses.com
---
 doc/org-manual.org | 30 ++
 lisp/ox.el | 10 ++
 2 files changed, 36 insertions(+), 4 deletions(-)

diff --git a/doc/org-manual.org b/doc/org-manual.org
index 466718e6e..e03fd059a 100644
--- a/doc/org-manual.org
+++ b/doc/org-manual.org
@@ -18283,6 +18283,36 @@ ** Exporting Code Blocks
   exported file.  Whether the code is evaluated at all depends on
   other options.  Example: =:exports none=.
 
+If a source block is named using =NAME= keyword, the same name will be
+assigned to the results of evaluation.  This way, fuzzy links pointing
+to the named source blocks exported using =:exports results= will
+remain valid and point to the results of evaluation.
+
+Results of evaluation of a named block can also be explicitly named
+using a separate =NAME= keyword.  The name value set via =NAME=
+keyword will be preferred over the parent source block.
+
+: #+NAME: code name
+: #+BEGIN_SRC emacs-lisp :exports both value
+: (+ 1 2)
+: #+END_SRC
+:
+: #+NAME: results name
+: #+RESULTS: code name
+: 3
+:
+: This [[code name][link]] will point to the code block.
+: Another [[results name][link]] will point to the results.
+
+Explicit setting of the result name may be necessary when a named code
+block is exported using =:exports both=.  Links to such block may
+arbitrarily point either to the code block or to its results when
+results do not have a distinct name.
+
+Note that all the links pointing to a source block exported using
+=:exports none= will be broken.  This will make export process fail,
+unless broken links are allowed during export (see [[*Export Settings]]). 
+
 #+vindex: org-export-use-babel
 To stop Org from evaluating code blocks to speed exports, use the
 header argument =:eval never-export= (see [[*Evaluating Code Blocks]]).
diff --git a/lisp/ox.el b/lisp/ox.el
index 57d375b35..433272915 100644
--- a/lisp/ox.el
+++ b/lisp/ox.el
@@ -4312,7 +4312,7 @@ (defun org-export-search-cells (datum)
 - target's or radio-target's name as a list of strings if
   TYPE is `target'.
 
-- NAME affiliated keyword if TYPE is `other'.
+- NAME or RESULTS affiliated keyword if TYPE is `other'.
 
 A search cell is the internal representation of a fuzzy link.  It
 ignores white spaces and statistics cookies, if applicable."
@@ -4330,7 +4330,8 @@ (defun org-export-search-cells (datum)
 		(and custom-id (cons 'custom-id custom-id)))
 (`target
  (list (cons 'target (split-string (org-element-property :value datum)
-((and (let name (org-element-property :name datum))
+((and (let name (or (org-element-property :name datum)
+(car (org-element-property :results datum
 	  (guard name))
  (list (cons 'other (split-string name
 (_ nil)))
@@ -4362,8 +4363,9 @@ (defun org-export-resolve-fuzzy-link (link info  pseudo-types)
 
 - If LINK path matches a target object (i.e. <>) return it.
 
-- If LINK path exactly matches the name affiliated keyword
-  (i.e. #+NAME: path) of an element, return that element.
+- If LINK path exactly matches the name or results affiliated k