Ihor Radchenko <yanta...@posteo.net> writes: > See the attached tentative patch.
Thanks! > --- > etc/ORG-NEWS | 11 +++++++++++ > lisp/ob-R.el | 20 ++++++-------------- > lisp/ob-julia.el | 16 +++++++++------- > 3 files changed, 26 insertions(+), 21 deletions(-) Not sure if you are doing this in a separate commit, but you also need to make the change to org-src.el to remove (org-babel-comint-buffer-livep session) in `org-src-associate-babel-session'. Else, `org-babel-R-associate-session' won't run if there's no live session, and hence ESS won't create new session with the right name. > * Version 9.7 (not released yet) > ** Important announcements and breaking changes > +*** ~org-edit-special~ no longer force-starts session in R and Julia source > blocks > + > +Previously, when R/Julia source block had =:session= header argument > +set to a session name with "earmuffs" (like =*session-name*=), > +~org-edit-special~ always started a session, if it does not exist. > + > +Now, ~org-edit-special~ arranges that a new session with correct name > +is initiated only when user explicitly executes R/Julia-mode commands > +that trigger session interactions. The same session will remain > +available in the context of Org babel. I tested the patch (plus the additional change to org-src.el), with an Org file with following 2 blocks: #+begin_src R :session foo :results output print('foo') #+end_src #+begin_src R :session *bar* :results output print('bar') #+end_src On block "foo", I did C-', and then ess-eval-line. It creates a session named "foo", as expected. On block "*bar*", I did the same. It does not create session named "*bar*", instead evaluating in session "foo". It seems ESS will always assume you want to evaluate in existing session if one exists, rather than start a new associated session, and it seems there is no way to tell it to behave otherwise. However, calling "M-x R" while editing block "*bar*" does create session "*bar*" with correct name. After sessions "foo" and "*bar*" have both been created, doing C-' and then ess-eval-line will evaluate in the correct session. It's annoying there's no way to tell ESS to start new session instead of evaluating in existing one. Here are a few alternatives we could consider to deal with this: 1. Change the worg/ORG-NEWS, to suggest users make sure the session exists (either by evaluating a source block or call "M-x R" in edit block) before running ess-eval-line. 2. Add ob-R and ob-julia customization options (as previously suggested) to explicitly control the startup behavior (either to auto-start, or not). 3. Submit PR to ESS to add a variable we could let-bind, to force it to start an associated session rather than evaluate in an existing non-associated sessions. Currently I lean towards a combination of #1 and #3, but am not sure, and happy to go with whatever you think is best.