Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

emacs tramp over an unreliable connection

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).

like image 430
sds Avatar asked May 29 '13 16:05

sds


1 Answers

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.

like image 102
sds Avatar answered Oct 16 '22 10:10

sds