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>