Connect to remote erlang shell while inside emacs
While developing my top secret project, I have been getting into the fun stuff in Erlang and Emacs. Connecting to a running instance of my app from a remote shell wasn't straightforward to me at first, so below is my documented way of connecting, as well as dropping into the Erlang JCL from within an Emacs erlang shell.
- Start yaws: yaws –daemon -sname appname –conf /path/to/yaws.conf
- Start emacs, and from within emacs start an Erlang shell with C-c C-z (assuming you have distel configured).
- From the Emacs erlang shell, get into Erlang's JCL by typing C-q C-g and pressing enter. A \G will be printed at the prompt, but won't be evaluated until you press enter. You should see the familiar JCL prompt "User switch command –>".
- Type 'j' to see current jobs you have running locally, which is probably just the current shell (1 {shell,start,[init]}).
- Type 'r appname@compy' to connect to the remote node identified by appname ( from the -sname parameter ) on the computer compy (usually whatever hostname returns)
- Type 'j' to see current jobs, which should list your current shell as "1 {shell,start,[init]}", and a second shell "2* {appname@compy,shell,start,[]}".
- Type 'c 2' to connect to the remote shell. You can now run commands in the node's shell. You may have to press enter again to bring up a shell prompt.
james@compy 14:33:34 ~/dev/erlang/app > yaws --daemon -sname app --conf config/yaws.conf james@compy 14:34:00 ~/dev/erlang/app > emacs
Eshell V5.7.4  (abort with ^G)
1> ^G
User switch command
 --> j
   1* {shell,start,[init]}
 --> r app@compy
 --> j
   1  {shell,start,[init]}
   2* {app@compy,shell,start,[]}
 --> c 2
1>