Yes, the modified comint-prompt-regexp works for my use cases and
I'm back to expected output and what I had last time I taught the
course. This was my instinct for a simple solution as well, but
I've not tested against remote sessions and graphical outputs as
Charles Berry warns.
I'll take a look at your ob-session-async, thanks!
-Dylan
On Sat 29 Aug 2020 at 02:24, Jack Kamm <jackk...@gmail.com> wrote:
Hi Dylan,
The patch does fix that issue -- but it introduces a different
bug
for code blocks with ~:session~: the R block now only produces
output from the last statement evaluated.
Of course, you're right. Good catch.
Here's another attempt. It fixes the issue by modifying the R
comint
regular expression, requiring it to match at the beginning of
the line.
I think this should fix most cases, including the examples you
sent. Still, it's not totally robust -- for example, it will
still
mangle multiline strings, if one of the lines starts with a
substring
that looks like a prompt.
I'd be interested to hear if the attached patch works for the
common
cases you encounter, such as with tibbles.
As an aside, I personally use an alternative implementation of
ob-R
sessions that doesn't suffer from this issue, and also provides
some
other benefits like async evaluation [1]. I'm planning to submit
these
changes to org-mode someday, but am not ready yet. But you may
want to
check it out, it was able to solve the issue in the other thread
I
linked as well.
[1] https://github.com/jackkamm/ob-session-async
From 9eaf81d708f88d06f14f9b6b9cf4182dd0fbb997 Mon Sep 17
00:00:00 2001
From: Jack Kamm <jackk...@gmail.com>
Date: Sat, 29 Aug 2020 00:07:58 -0700
Subject: [PATCH] ob-R: Fix prompt mangling in session output
* lisp/ob-R.el (org-babel-R-evaluate-session): Force comint
prompt
regexp to start at beginning of line, to prevent
org-babel-comint-with-output from splitting mid-line.
Fixes https://orgmode.org/list/875zgjh8wn....@gmail.com/ and
https://orgmode.org/list/87r1rqled0.fsf@havana/
---
lisp/ob-R.el | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/lisp/ob-R.el b/lisp/ob-R.el
index 5e9d35f58..10b3b6fe3 100644
--- a/lisp/ob-R.el
+++ b/lisp/ob-R.el
@@ -450,11 +450,13 @@ (defun org-babel-R-evaluate-session
(car (split-string line "\n")))
(substring line (match-end 1))
line))
- (org-babel-comint-with-output (session
org-babel-R-eoe-output)
- (insert (mapconcat 'org-babel-chomp
- (list body
org-babel-R-eoe-indicator)
- "\n"))
- (inferior-ess-send-input)))))) "\n"))))
+ (with-current-buffer session
+ (let ((comint-prompt-regexp (concat "^"
comint-prompt-regexp)))
+ (org-babel-comint-with-output (session
org-babel-R-eoe-output)
+ (insert (mapconcat 'org-babel-chomp
+ (list body
org-babel-R-eoe-indicator)
+ "\n"))
+ (inferior-ess-send-input)))))))) "\n"))))
(defun org-babel-R-process-value-result (result column-names-p)
"R-specific processing of return value.
--