2013-05-29 13 views
9

Voglio correre R su una remota scatola sotto un localeEmacs (io Non voglio correre Emacs sulla scatola a distanza).emacs vagabondo su una connessione non affidabile

posso correre R su un host remoto utilizzando TRAMP:

(let ((default-directory "/[email protected]:~")) 
    (R)) 

e tutto funziona bene, tranne che quando la connessione a remote viene persa, R stampi. Questo non va bene perché questo significa che devo ricaricare tutti i dati in R dopo averlo riavviato, il che richiede tempo.

E 'possibile dire a TRAMP di utilizzare un terminale persistente? (GNU Screen o tmux o Mosh o dtach)

Vedi anche emacs-devel filo tramp:sshx:(screen|tmux).

risposta

8

Ecco come utilizzare ESS con R in esecuzione in una sessione schermo remoto:

  • ssh all'host remoto (al di fuori di emacs)

  • schermata di avvio della sessione

  • distacco esso

  • coperture aperte in emacs (M-x shell)

  • ssh all'host remoto nuovo in emacs shell

  • riprendere la sessione schermo (screen -r)

  • inizio R

  • infine allegare ESS al processo R utilizzando M-x ess-remote nel guscio buffer dove hai iniziato R

Ci sono altri dettagli, schermate e chiave binding in questo post http://blog.nguyenvq.com/2010/07/11/using-r-ess-remote-with-screen-in-emacs/

+0

Gli sviluppatori ESS sembrano considerare 'ess-remote' obsoleto. – sds

+0

Bene, la funzione stessa è piuttosto semplice, tutto ciò che fa è impostare alcune variabili e inizializza la modalità inferiore per il buffer più alcune personalizzazioni specifiche della lingua. Uso molto l'ess-remote per eseguire processi R e SAS remoti e non ho avuto problemi con la funzione. Puoi anche usarlo con R lanciato ssh.el –

+2

@sds Come sviluppatore ESS posso assicurare che ess-remote è gestito ed è migliorare. Sto cercando in integrazione schermo con ess e vagabondo/ess-remote. Qualsiasi suggerimento di idee è benvenuto. – VitoshKa

6

Ecco un approccio alternativo utilizzando 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)) 

chiamata M-x R-remote RET RET RET RET.

Funziona per me.

+0

Grazie per il tuo codice. In questo momento all'avvio di un processo remoto, il processo inizia nella home directory. Ho provato a modificare il tuo codice R in remoto in una directory specifica, ma ho avuto qualche problema nel raggiungimento di questo. Avete qualche modo di scegliere la directory in cui il processo dovrebbe iniziare? – DJJ

+0

Ok, ho appena aggiunto la riga '" cd ~/Documents/R; "' dopo che l'host remoto ha fatto il lavoro. Molte grazie ancora per il tuo codice mi ha fatto risparmiare un sacco di problemi. – DJJ

+0

@DJJ: Ho aggiunto 'R-remote-directory', grazie per il suggerimento. – sds

Problemi correlati