emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Persisting the current working directory in an org-babel session
@ 2023-01-01 12:34 Adam Sneller
  2023-01-01 13:19 ` Ihor Radchenko
  0 siblings, 1 reply; 3+ messages in thread
From: Adam Sneller @ 2023-01-01 12:34 UTC (permalink / raw)
  To: emacs-orgmode

For some reason, I am unable to make changes to my working directory persist, from one emacs-lisp SRC block to the next.

For example, consider the following:

	* Literate programming in a single session
	:PROPERTIES:
	:header-args: :var DIR="/Users/adam/Desktop/test"
	:END:

	#+BEGIN_SRC emacs-lisp :session *elisp*
	(cd DIR)
	#+END_SRC

	#+RESULTS:
	: /Users/adam/Desktop/test/


	#+BEGIN_SRC emacs-lisp :session *elisp*
	(cd ".")
	#+END_SRC

	#+RESULTS:
	: /Users/adam/org/

The :header-args: define a starting directory (DIR="/Users/adam/Desktop/test"). The first block establishes the *elisp* session and navigates into DIR, using (cd DIR). Confirmation is then seen in the #+RESULTS. 

A second block is then created in the same *elisp* session. This simply echos the current working directory with (cd "."). BUT... the #+RESULTS show that the working directory has not persisted from our first block and has instead, defaulted to the default org-mode directory.

Now, I realise that I could have used :dir in my initial :header-args: to set the same working directory for all blocks. But what I am interested in is why my changes are not persisting, when (if I am not mistaken) this is the entire point of establishing a session?

Thanks!

Adam Sneller

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

* Re: Persisting the current working directory in an org-babel session
  2023-01-01 12:34 Persisting the current working directory in an org-babel session Adam Sneller
@ 2023-01-01 13:19 ` Ihor Radchenko
  2024-04-09 13:23   ` Ihor Radchenko
  0 siblings, 1 reply; 3+ messages in thread
From: Ihor Radchenko @ 2023-01-01 13:19 UTC (permalink / raw)
  To: Adam Sneller; +Cc: emacs-orgmode

Adam Sneller <adam@earth2adam.com> writes:

> For some reason, I am unable to make changes to my working directory persist, from one emacs-lisp SRC block to the next.
>
> For example, consider the following:
>
> 	* Literate programming in a single session
> 	:PROPERTIES:
> 	:header-args: :var DIR="/Users/adam/Desktop/test"
> 	:END:
>
> 	#+BEGIN_SRC emacs-lisp :session *elisp*
> 	(cd DIR)
> 	#+END_SRC
>
> 	#+RESULTS:
> 	: /Users/adam/Desktop/test/
>
>
> 	#+BEGIN_SRC emacs-lisp :session *elisp*
> 	(cd ".")
> 	#+END_SRC
>
> 	#+RESULTS:
> 	: /Users/adam/org/

Confirmed.

This is because `org-babel-execute-src-block' let-binds
`default-directory'. So, your changes to it are only affecting lexical
scope.

Fixes welcome!

-- 
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] 3+ messages in thread

* Re: Persisting the current working directory in an org-babel session
  2023-01-01 13:19 ` Ihor Radchenko
@ 2024-04-09 13:23   ` Ihor Radchenko
  0 siblings, 0 replies; 3+ messages in thread
From: Ihor Radchenko @ 2024-04-09 13:23 UTC (permalink / raw)
  To: Adam Sneller; +Cc: emacs-orgmode

Ihor Radchenko <yantar92@posteo.net> writes:

>> For example, consider the following:
>>
>> 	* Literate programming in a single session
>> 	:PROPERTIES:
>> 	:header-args: :var DIR="/Users/adam/Desktop/test"
>> 	:END:
>>
>> 	#+BEGIN_SRC emacs-lisp :session *elisp*
>> 	(cd DIR)
>> 	#+END_SRC
> ...
> Confirmed.

Hmm... I am looking at this again, and there is actually no bug here:

1. ob-emacs-lisp.el does not support sessions, so :session *elisp* does
   not thing in this case

2. without :session, Org babel does the following:

   16.4 Environment of a Code Block
   ...
   The ‘dir’ header argument specifies the default directory during code
   block execution. If it is absent, then the directory associated with the
   current buffer is used.

So, if we ever add session feature to ob-emacs-lisp, what was tried in
the report should be doable - one could retain working directory across
source blocks. But since ob-emacs-lisp does not support sessions, the
only actual problem is the fact that :session argument is silently
ignored without bringing absence of session support to the user
attention.

Handled, on main.
https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=d1c6f91ce

-- 
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] 3+ messages in thread

end of thread, other threads:[~2024-04-09 13:24 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-01 12:34 Persisting the current working directory in an org-babel session Adam Sneller
2023-01-01 13:19 ` Ihor Radchenko
2024-04-09 13:23   ` 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).