Hi Jeremie, Many thanks for bringing this over the finish line! I'm very glad it made it into Org 9.5.
All the tests passed on my end, and and I successfully ran a few async R blocks without any issues. I do have some suggestions for code style below. They apply to both the original patch, as well as followup fixes that have been committed since. > +(defconst ob-session-async-R-indicator "'ob_comint_async_R_%s_%s'") > + > +(defun ob-session-async-org-babel-R-evaluate-session For consistency with the rest of ob-R.el, as well as with the async functions in ob-python, I suggest using a prefix of "org-babel-R-async-". So "ob-session-async-org-babel-R-evaluate-session" would become "org-babel-R-async-evaluate-session", etc. > +(ert-deftest ob-session-async-R-simple-session-async-value () Again, for consistency I suggest renaming the test functions so they are prefixed with "test-ob-R/". For example, "ob-session-async-R-simple-session-async-value" could become "test-ob-R/async-session-simple-value". This would also allow easily running all the R tests using "BTEST_RE='.*ob-R.*' make test". > + (setq user-inject-src-param ess-inject-source) > (setq ess-eval-visibly nil) > + (setq ess-inject-source 'function-and-buffer) > (ess-eval-buffer nil)) > - (setq ess-eval-visibly tmp) > + (setq ess-eval-visibly tmp) > + (setq ess-inject-source user-inject-src-param) Rather than using setq, it would be better to let bind these like so: (let ((ess-eval-visibly nil) (ess-inject-source 'function-and-buffer)) ...code in here... ) This temporarily sets the variables within the let-block, then resets them to their original values afterwards. Then you can also remove the temporary variables "user-inject-src-param" and "ess-eval-visibly-tmp" as well as their defvars at the top of the file. Actually, since the code is already in a let-block, you can simply add these variables to the existing let-statement. > + (list (format org-babel-R-write-object-command > + (if row-names-p "TRUE" "FALSE") > + (if column-names-p > + (if row-names-p "NA" "TRUE") > + "FALSE") > + ".Last.value" > + (org-babel-process-file-name tmp-file 'noquote)) Some parts of ob-session-async-org-babel-R-evaluate-session, such as the above, are duplicated from org-babel-R-evaluate-session; it would be good to reduce duplication by abstracting these out to separate functions. Thanks again for porting this, and for taking care of ob-R.el in general. All the best, Jack