summaryrefslogtreecommitdiff
path: root/lisp/ess-inf.el
diff options
context:
space:
mode:
authorLionel Henry <lionel.hry@gmail.com>2021-03-23 19:21:13 +0100
committerLionel Henry <lionel.hry@gmail.com>2021-03-31 09:50:44 +0200
commit7a83877610c78f62dfd2ade78a9a38a2ff03e076 (patch)
tree3350e430fbbd0af734c5077f9be20b740bbbb2fd /lisp/ess-inf.el
parent9ff5fc64587ffa86bcbd3be94120bd9bcd58a49c (diff)
Don't change process buffer during background command
Solves disconnections of the process buffer when something goes wrong
Diffstat (limited to 'lisp/ess-inf.el')
-rw-r--r--lisp/ess-inf.el28
1 files changed, 12 insertions, 16 deletions
diff --git a/lisp/ess-inf.el b/lisp/ess-inf.el
index 10e724e..46a8941 100644
--- a/lisp/ess-inf.el
+++ b/lisp/ess-inf.el
@@ -1009,14 +1009,16 @@ Returns nil if TIMEOUT was reached, non-nil otherwise."
(defun inferior-ess-ordinary-filter (proc string)
(ess--if-verbose-write-process-state proc string "ordinary-filter")
- (let ((cmd-delim (process-get proc 'cmd-output-delimiter))
- (cmd-async-restore-alist (process-get proc 'cmd-async-restore-alist))
- (flush (lambda () (with-current-buffer (process-buffer proc)
- (insert string)))))
+ (let* ((cmd-buf (process-get proc 'cmd-buffer))
+ (cmd-delim (process-get proc 'cmd-output-delimiter))
+ (cmd-async-restore-alist (process-get proc 'cmd-async-restore-alist))
+ (flush (lambda () (with-current-buffer cmd-buf
+ (goto-char (point-max))
+ (insert string)))))
(if cmd-delim
(progn
(funcall flush)
- (inferior-ess--set-status-sentinel proc (process-buffer proc) cmd-delim)
+ (inferior-ess--set-status-sentinel proc cmd-buf cmd-delim)
(inferior-ess-run-callback proc string))
(inferior-ess--set-status proc string)
(inferior-ess-run-callback proc string)
@@ -1293,9 +1295,7 @@ wrapping the code into:
(with-current-buffer (process-buffer proc)
(let ((proc-forward-alist (ess--alist (ess-local-process-name
inferior-ess-primary-prompt)))
- (cmd-restore-alist (list (cons 'old-pb (process-buffer proc))
- (cons 'old-pf (process-filter proc))
- (cons 'old-pm (marker-position (process-mark proc)))))
+ (cmd-restore-alist (list (cons 'old-pf (process-filter proc))))
(use-delimiter (alist-get 'use-delimiter ess-format-command-alist))
(rich-cmd (if-let ((cmd-fun (alist-get 'fun ess-format-command-alist)))
(funcall cmd-fun
@@ -1310,13 +1310,12 @@ wrapping the code into:
(progn
(when use-delimiter
(process-put proc 'cmd-output-delimiter delim))
- (set-process-buffer proc out-buffer)
+ (process-put proc 'cmd-buffer out-buffer)
(set-process-filter proc 'inferior-ess-ordinary-filter)
(with-current-buffer out-buffer
(ess-setq-vars-local proc-forward-alist)
(setq buffer-read-only nil)
(erase-buffer)
- (set-marker (process-mark proc) (point-min))
(inferior-ess-mark-as-busy proc)
(process-send-string proc rich-cmd)
;; Need time for ess-create-object-name-db on PC
@@ -1366,12 +1365,9 @@ wrapping the code into:
(defun ess--command-proc-restore (proc restore-alist)
(process-put proc 'cmd-output-delimiter nil)
(process-put proc 'cmd-restore-alist nil)
- (let ((old-pb (alist-get 'old-pb restore-alist))
- (old-pf (alist-get 'old-pf restore-alist))
- (old-pm (alist-get 'old-pm restore-alist)))
- (set-process-buffer proc old-pb)
- (set-process-filter proc old-pf)
- (set-marker (process-mark proc) old-pm old-pb)))
+ (process-put proc 'cmd-buffer nil)
+ (let ((old-pf (alist-get 'old-pf restore-alist)))
+ (set-process-filter proc old-pf)))
;; TODO: Needs some Julia tests as well
(defun ess--foreground-command (cmd &optional out-buffer _sleep no-prompt-check wait proc)