emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Generating the filename from name and file-ext for blocks with side-effects
@ 2024-12-23 21:58 Aitenate
  2024-12-25 15:30 ` Ihor Radchenko
  0 siblings, 1 reply; 8+ messages in thread
From: Aitenate @ 2024-12-23 21:58 UTC (permalink / raw)
  To: emacs-orgmode

With ~:results file~, the absence of ~:file~ will cause the filename to
be constructed from the block name and ~:file-ext~, if they are both
present. To achieve that with ~:results file link~, I could only come up
with

~:var outFile=(alist-get :file (nth 2 (org-babel-get-src-block-info
't)))~

Have I missed something obvious? Is there a better way to do this?

If there isn't, would it be acceptable to add something like
`org-babel-get-src-block-param-value' or maybe more specific like
`org-babel-get-src-block-results-file-name'?

Regards,
Aitenate


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

* Re: Generating the filename from name and file-ext for blocks with side-effects
  2024-12-23 21:58 Generating the filename from name and file-ext for blocks with side-effects Aitenate
@ 2024-12-25 15:30 ` Ihor Radchenko
  2024-12-25 19:03   ` Aitenate
  0 siblings, 1 reply; 8+ messages in thread
From: Ihor Radchenko @ 2024-12-25 15:30 UTC (permalink / raw)
  To: Aitenate; +Cc: emacs-orgmode

Aitenate <aitenate@outlook.com> writes:

> With ~:results file~, the absence of ~:file~ will cause the filename to
> be constructed from the block name and ~:file-ext~, if they are both
> present. To achieve that with ~:results file link~, I could only come up
> with
>
> ~:var outFile=(alist-get :file (nth 2 (org-babel-get-src-block-info
> 't)))~

Seems right, but I do not understand why you would need such thing.

-- 
Ihor Radchenko // yantar92,
Org mode maintainer,
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] 8+ messages in thread

* Re: Generating the filename from name and file-ext for blocks with side-effects
  2024-12-25 15:30 ` Ihor Radchenko
@ 2024-12-25 19:03   ` Aitenate
  2024-12-26  8:26     ` Rudolf Adamkovič
  2024-12-26  9:08     ` Ihor Radchenko
  0 siblings, 2 replies; 8+ messages in thread
From: Aitenate @ 2024-12-25 19:03 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: emacs-orgmode

On 25/12/2024 15:30, Ihor Radchenko wrote:
> Aitenate <aitenate@outlook.com> writes:
> 
>> With ~:results file~, the absence of ~:file~ will cause the filename to
>> be constructed from the block name and ~:file-ext~, if they are both
>> present. To achieve that with ~:results file link~, I could only come up
>> with
>>
>> ~:var outFile=(alist-get :file (nth 2 (org-babel-get-src-block-info
>> 't)))~
> 
> Seems right, but I do not understand why you would need such thing.
> 

The aim is to not need to define a filename for each image, to minimise 
the boilerplate. Org has a mechanism for this, but it only works when 
Org creates the file.

Using a combination of noweb and file header arguments, with a property 
drawer, I was able to have each code block only require a unique name 
and the image code. That is except, because the image library creates 
the file, I need to specify a var to give a filename. Hence, I poked 
around until I found a way to use the computed filename.

While I'm happy with the solution I found, as a novice Org user, it 
seemed like I needed to reach into undocumented internals to do this. So 
I queried this, partly to understand if there was a better way, and 
partly to see if it was worth providing a better way or at least 
documenting a method.

Based on your response, maybe I'm doing something unusual. In which 
case, it's not surprising I couldn't find a more obvious way.


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

* Re: Generating the filename from name and file-ext for blocks with side-effects
  2024-12-25 19:03   ` Aitenate
@ 2024-12-26  8:26     ` Rudolf Adamkovič
  2024-12-26  9:29       ` Ihor Radchenko
  2024-12-26  9:08     ` Ihor Radchenko
  1 sibling, 1 reply; 8+ messages in thread
From: Rudolf Adamkovič @ 2024-12-26  8:26 UTC (permalink / raw)
  To: Aitenate, Ihor Radchenko; +Cc: emacs-orgmode


Ihor Radchenko <yantar92@posteo.net> writes:

> Seems right, but I do not understand why you would need such thing.

Aitenate <aitenate@outlook.com> writes:

> The aim is to not need to define a filename for each image, to minimise 
> the boilerplate.

+1 This should be built into Org and enabled by default.

I currently generate image names with a custom snippet, but it gets
trying and should not be necessary in the first place.

Instead, Org should generate a unique file name automatically, similar
to how tangle ':comments' work, and use that as the default value for
the ':file` argument, getting rid of the dreaded error message

  org-babel-execute:LANG: You need to specify a :file parameter

Rudy
-- 
"I would prefer an intelligent hell to a stupid paradise."
--- Blaise Pascal

Rudolf Adamkovič <rudolf@adamkovic.org> [he/him]
http://adamkovic.org


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

* Re: Generating the filename from name and file-ext for blocks with side-effects
  2024-12-25 19:03   ` Aitenate
  2024-12-26  8:26     ` Rudolf Adamkovič
@ 2024-12-26  9:08     ` Ihor Radchenko
  1 sibling, 0 replies; 8+ messages in thread
From: Ihor Radchenko @ 2024-12-26  9:08 UTC (permalink / raw)
  To: Aitenate; +Cc: emacs-orgmode

Aitenate <aitenate@outlook.com> writes:

>>> ~:var outFile=(alist-get :file (nth 2 (org-babel-get-src-block-info
>>> 't)))~
>> 
>> Seems right, but I do not understand why you would need such thing.
>> 
> The aim is to not need to define a filename for each image, to minimise 
> the boilerplate. Org has a mechanism for this, but it only works when 
> Org creates the file.
>
> Using a combination of noweb and file header arguments, with a property 
> drawer, I was able to have each code block only require a unique name 
> and the image code. That is except, because the image library creates 
> the file, I need to specify a var to give a filename. Hence, I poked 
> around until I found a way to use the computed filename.

Thanks for the explanation!
I do see how this can be useful.

> Based on your response, maybe I'm doing something unusual. In which 
> case, it's not surprising I couldn't find a more obvious way.

AFAIK, most people just specify the file names manually.
I suspect that it is mostly because the part of Org manual explaining
this is not easy to understand.

-- 
Ihor Radchenko // yantar92,
Org mode maintainer,
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] 8+ messages in thread

* Re: Generating the filename from name and file-ext for blocks with side-effects
  2024-12-26  8:26     ` Rudolf Adamkovič
@ 2024-12-26  9:29       ` Ihor Radchenko
  2024-12-27 13:56         ` Rudolf Adamkovič
  0 siblings, 1 reply; 8+ messages in thread
From: Ihor Radchenko @ 2024-12-26  9:29 UTC (permalink / raw)
  To: Rudolf Adamkovič; +Cc: Aitenate, emacs-orgmode

Rudolf Adamkovič <rudolf@adamkovic.org> writes:

>> The aim is to not need to define a filename for each image, to minimise 
>> the boilerplate.
>
> +1 This should be built into Org and enabled by default.
>
> I currently generate image names with a custom snippet, but it gets
> trying and should not be necessary in the first place.

Do you want to create a patch providing this functionality?

> Instead, Org should generate a unique file name automatically, similar
> to how tangle ':comments' work, and use that as the default value for
> the ':file` argument, getting rid of the dreaded error message
>
>   org-babel-execute:LANG: You need to specify a :file parameter

Do you want to extend `org-babel-generate-file-param' to return
something even when src block is not named and :file-ext is not given?
But how will you know the desired extension?

-- 
Ihor Radchenko // yantar92,
Org mode maintainer,
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] 8+ messages in thread

* Re: Generating the filename from name and file-ext for blocks with side-effects
  2024-12-26  9:29       ` Ihor Radchenko
@ 2024-12-27 13:56         ` Rudolf Adamkovič
  2024-12-27 14:01           ` Ihor Radchenko
  0 siblings, 1 reply; 8+ messages in thread
From: Rudolf Adamkovič @ 2024-12-27 13:56 UTC (permalink / raw)
  To: Ihor Radchenko; +Cc: Aitenate, emacs-orgmode

Ihor Radchenko <yantar92@posteo.net> writes:

> [...] and :file-ext is not given?  But how will you know the desired
> extension?

Oh, I missed that.  My local hack assumes `.svg', but that is not enough
for the general use case.

Perhaps, we could save as `$BASENAME.out', detect the image format, and
then rename to `$BASENAME.svg', for example.  If the file is not an
image, we leave it as `.out'.

We can detect the image type with `image-type':

  (image-type "...-59b9176e65c9.svg") => svg

If the above is sufficient, the problem reduces to:

  how to compute the `$BASENAME'?

[`org-babel-tangle-comment-format-beg' does something similar.]

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č <rudolf@adamkovic.org> [he/him]
http://adamkovic.org


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

* Re: Generating the filename from name and file-ext for blocks with side-effects
  2024-12-27 13:56         ` Rudolf Adamkovič
@ 2024-12-27 14:01           ` Ihor Radchenko
  0 siblings, 0 replies; 8+ messages in thread
From: Ihor Radchenko @ 2024-12-27 14:01 UTC (permalink / raw)
  To: Rudolf Adamkovič; +Cc: Aitenate, emacs-orgmode

Rudolf Adamkovič <rudolf@adamkovic.org> writes:

>> [...] and :file-ext is not given?  But how will you know the desired
>> extension?
>
> Oh, I missed that.  My local hack assumes `.svg', but that is not enough
> for the general use case.
>
> Perhaps, we could save as `$BASENAME.out', detect the image format, and
> then rename to `$BASENAME.svg', for example.  If the file is not an
> image, we leave it as `.out'.
>
> We can detect the image type with `image-type':
>
>   (image-type "...-59b9176e65c9.svg") => svg

Why do you think that the output file is always an image? It may not
be. It can be anything.

-- 
Ihor Radchenko // yantar92,
Org mode maintainer,
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] 8+ messages in thread

end of thread, other threads:[~2024-12-27 14:00 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-23 21:58 Generating the filename from name and file-ext for blocks with side-effects Aitenate
2024-12-25 15:30 ` Ihor Radchenko
2024-12-25 19:03   ` Aitenate
2024-12-26  8:26     ` Rudolf Adamkovič
2024-12-26  9:29       ` Ihor Radchenko
2024-12-27 13:56         ` Rudolf Adamkovič
2024-12-27 14:01           ` Ihor Radchenko
2024-12-26  9:08     ` 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).