I want to run R
on a remote box under a local Emacs
(I do not want to run Emacs on the remote box).
I can run R
on a remote host using TRAMP
:
(let ((default-directory "/user@remote:~"))
(R))
and everything works fine except that when the connection to remote
is lost, R
dies. This is no good because this means that I have to re-load all the data into R
after restarting it, which takes time.
Is it possible to tell TRAMP
to use a persistent terminal? (GNU Screen
or tmux
or Mosh
or dtach
)
See also emacs-devel
thread tramp:sshx:(screen|tmux).
Here is an alternative approach using dtach:
(defvar R-remote-host "remote-server")
(defvar R-remote-session "R")
(defvar R-remote-directory "~")
(defun R-remote (&optional remote-host session directory)
"Connect to the remote-host's dtach session running R."
(interactive (list
(read-from-minibuffer "R remote host: " R-remote-host)
(read-from-minibuffer "R remote session: " R-remote-session)
(read-from-minibuffer "R remote directory: " R-remote-directory)))
(pop-to-buffer (make-comint (concat "remote-" session)
"ssh" nil "-t" "-t" remote-host
"cd" directory ";"
"dtach" "-A" (concat ".dtach-" session)
"-z" "-E" "-r" "none"
inferior-R-program-name "--no-readline"
inferior-R-args))
(ess-remote (process-name (get-buffer-process (current-buffer))) "R")
(setq comint-process-echoes t))
Call M-x R-remote RET RET RET RET.
It works for me.
PS. The answer to the problem (as opposed to the question as asked) is to use ein with Jupyter.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With