Org-mode mailing list
 help / color / Atom feed
From: John Herrlin <jherrlin@gmail.com>
To: Ihor Radchenko <yantar92@gmail.com>
Cc: emacs-orgmode@gnu.org
Subject: Re: Bug: [patch] Fix org-babel-result-to-file never expanding links when babel is evaluated in indirect buffer [9.3.7 (release_9.3.7-728-g1efc4e @ /home/yantar92/.emacs.d/straight/build/org/)]
Date: Sat, 01 Aug 2020 18:33:54 +0200
Message-ID: <87ime2xr4e.fsf@gmail.com> (raw)
In-Reply-To: <877dujz2f8.fsf@localhost>


It's intended to change directory and dont clone base buffer values. I
tried to accomplish "If the `default-directory' is different from the
containing file's directory then expand relative links." As I
understands it that's when it inserts a relative link, otherwise it just
`result'. I was looking from the indirect buffers point of view and from
there the relative link is off in this case. But from the base buffers
point of view everything works fine. I guess that it was my use case
that is strange.

Looks good!

Best regards
John

>> In my case the result is a relative link, but if I follow the link I end
>> up in the wrong place.
>
> Do you mean that the generated script.sh ends up in your home dir?
> It is expected since default-directory in your buffer is "~/":
>
>>   (dired "~/")
>>   (make-indirect-buffer "tmp.org" "tmp-indirect")
>
> Note that you called make-indirect-buffer without third argument.
>
> According to manual:
>
>> (make-indirect-buffer BASE-BUFFER NAME &optional CLONE)
>> CLONE nil means the indirect buffer's state is reset to default values.
>
>>     Org first tries to generate the filename from the value of the
>>     ‘file’ header argument and the directory specified using the
>>     ‘output-dir’ header arguments.  If ‘output-dir’ is not specified,
>>     Org assumes it is the current directory.
>
> No surprise you got your file in the default-directory (~/).
>
> If you use (make-indirect-buffer "tmp.org" "tmp-indirect" t) instead,
> the script.sh link will be relative, as expected.
>
> Let me know if I miss something.
>
> Best,
> Ihor
>
>
>> Hey Ihor,
>>
>> Could not get the patch to work.
>>
>> I used this use case.
>>
>> (with-current-buffer
>>   (find-file "/tmp/tmp.org")
>>   (insert "* A\n** b\n** c\n\n   some text")
>>   (dired "~/")
>>   (make-indirect-buffer "tmp.org" "tmp-indirect")
>>   (switch-to-buffer "tmp-indirect")
>>   (goto-char (point-max))
>>   (funcall 'org-mode)
>>   (insert (concat "\n\n| default-directory | " default-directory " |\n"
>>                   "| org-link-file-path-type | " (symbol-name org-link-file-path-type) " |\n"
>>                   "| (expand-file-name default-directory) | " (expand-file-name default-directory) " |\n"
>>                   "| (buffer-file-name (buffer-base-buffer)) | " (buffer-file-name (buffer-base-buffer)) " |\n"))
>>   (org-table-align)
>>   (insert "\n\n#+BEGIN_SRC shell :results file :file script.sh
>>        echo \"#!/bin/bash\"
>>        echo \"echo Hey\"\n#+END_SRC")
>>   (org-babel-execute-src-block))
>>
>> In my case the result is a relative link, but if I follow the link I end
>> up in the wrong place.
>>
>> src_emacs-lisp{emacs-version} {{{results(=26.3=)}}}
>> src_emacs-lisp{org-version} {{{results(=9.3.7=)}}}
>>
>> Best regards
>> John
>>
>>
>> Ihor Radchenko <yantar92@gmail.com> writes:
>>
>>> Remember to cover the basics, that is, what you expected to happen and
>>> what in fact did happen.  You don't know how to make a good report?  See
>>>
>>>      https://orgmode.org/manual/Feedback.html#Feedback
>>>
>>> Your bug report will be posted to the Org mailing list.
>>> ------------------------------------------------------------------------
>>>
>>> I noticed that org-babel-result-to-file never expands file: links in
>>> src block results when ran from indirect buffer and default-directory
>>> is not same with base buffer file's directory. This is against the
>>> docstring stating that
>>>
>>>> If the `default-directory' is different from the containing
>>>> file's directory then expand relative links.
>>>
>>> The misbehavior happens because buffer-file-name variable is always
>>> nil in indirect buffers. We need to call (file-name-directory
>>> (buffer-file-name (buffer-base-buffer))) instead.
>>>
>>> The patch is attached.
>>>
>>> Best,
>>> Ihor
>>>
>>> diff --git a/lisp/ob-core.el b/lisp/ob-core.el
>>> index f86282f0f..d37eef5f9 100644
>>> --- a/lisp/ob-core.el
>>> +++ b/lisp/ob-core.el
>>> @@ -2561,16 +2561,16 @@ If the `default-directory' is different from the containing
>>>  file's directory then expand relative links."
>>>    (when (stringp result)
>>>      (let ((same-directory?
>>> -	   (and buffer-file-name
>>> +	   (and (buffer-file-name (buffer-base-buffer))
>>>  		(not (string= (expand-file-name default-directory)
>>> -			      (expand-file-name
>>> -			       (file-name-directory buffer-file-name)))))))
>>> +			    (expand-file-name
>>> +			     (file-name-directory (buffer-file-name (buffer-base-buffer)))))))))
>>>        (format "[[file:%s]%s]"
>>> -	      (if (and default-directory buffer-file-name same-directory?)
>>> +	      (if (and default-directory (buffer-file-name (buffer-base-buffer)) same-directory?)
>>>  		  (if (eq org-link-file-path-type 'adaptive)
>>>  		      (file-relative-name
>>>  		       (expand-file-name result default-directory)
>>> -		       (file-name-directory (buffer-file-name)))
>>> +		       (file-name-directory (buffer-file-name (buffer-base-buffer))))
>>>  		    (expand-file-name result default-directory))
>>>  		result)
>>>  	      (if description (concat "[" description "]") "")))))
>>>
>>> Emacs  : GNU Emacs 28.0.50 (build 4, x86_64-pc-linux-gnu, GTK+ Version 3.24.20, cairo version 1.16.0)
>>>  of 2020-07-27
>>> Package: Org mode version 9.3.7 (release_9.3.7-728-g1efc4e @ /home/yantar92/.emacs.d/straight/build/org/)


  reply index

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-31  8:49 Ihor Radchenko
2020-07-31 17:24 ` John Herrlin
2020-07-31 23:32   ` Ihor Radchenko
2020-08-01 16:33     ` John Herrlin [this message]
2020-08-02  4:36       ` Ihor Radchenko
2020-08-02 19:24         ` John Herrlin
2020-08-02 22:50           ` Ihor Radchenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://orgmode.org

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87ime2xr4e.fsf@gmail.com \
    --to=jherrlin@gmail.com \
    --cc=emacs-orgmode@gnu.org \
    --cc=yantar92@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Org-mode mailing list

Archives are clonable:
	git clone --mirror https://orgmode.org/list/0 list/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 list list/ https://orgmode.org/list \
		emacs-orgmode@gnu.org
	public-inbox-index list

Example config snippet for mirrors

Newsgroups are available over NNTP:
	nntp://news.yhetil.org/yhetil.emacs.orgmode
	nntp://news.gmane.io/gmane.emacs.orgmode


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git