Emacs と Control-g と私
私は Emacs というエディタを使っています。
Emacsでは「固まったりして困ったらとりあえずControl-g(以下 C-g)を押せ」ということになっているので、
困ると C-g を押すクセが私にはあります。
iex と C-g と私
iex を使っているときにも意図せずうっかり C-g を押してしまうことがあります。
すると
iex(1)>
User switch command
-->
こんな状態になってしまい、このあと何をしていいのかさっぱりわからないので、
いつも C-c a で abort して、もう一回 iex をし直すというのを繰り返していました。
さすがに毎回iexを抜けるのはもう嫌なので、今回はここを掘り下げてみたいと思います。
ヘルプ
ググると、どうやら h でヘルプがみられるらしい。
iex(1)>
User switch command
+ --> h
+ c [nn] - connect to job
+ i [nn] - interrupt job
+ k [nn] - kill job
+ j - list all jobs
+ s [shell] - start local shell
+ r [node [shell]] - start remote shell
+ q - quit erlang
+ ? | h - this message
iex に戻りたい
単純に iex に戻りたいだけなら、 c
でいいようです。
iex(1)>
User switch command
--> h
c [nn] - connect to job
i [nn] - interrupt job
k [nn] - kill job
j - list all jobs
s [shell] - start local shell
r [node [shell]] - start remote shell
q - quit erlang
? | h - this message
+ --> c
何も出ないので、不安になりますが、これでもうiexに戻っているようです。
elixir のコードを実行して確認してみましょう。
iex(1)>
User switch command
--> h
c [nn] - connect to job
i [nn] - interrupt job
k [nn] - kill job
j - list all jobs
s [shell] - start local shell
r [node [shell]] - start remote shell
q - quit erlang
? | h - this message
--> c
+ self
+ #PID<0.88.0>
+ iex(2)>
めでたしめでたし。
remote?
r [node [shell]] - start remote shell
というのが気になるので、試してみたいと思います。
2 つ iex を立ち上げておきます。
[手元のMac]$ iex --name temoto@192.168.1.100
[リモートのUbuntu]$ iex --name remote@192.168.1.200
remote と temoto。では r
を試してみます。
iex(temoto@192.168.1.100)1>
User switch command
--> r 'remote@192.168.1.200'
-->
またしても何もでないので、うまく行ってないのかと思いきや、なんとこれで成功しています。
j
で一覧をみてみましょう。
iex(temoto@192.168.1.100)1>
User switch command
--> r 'remote@192.168.1.200'
+ --> j
+ 1 {erlang,apply,[#Fun<Elixir.IEx.CLI.1.131305237>,[]]}
+ 2* {'remote@192.168.1.200',shell,start,[]}
+ -->
*(アスタリスク)
がついているのが、現在選択されている shell(?) らしいです。
この状態で c
を押します。
iex(temoto@192.168.1.100)1>
User switch command
--> r 'remote@192.168.1.200'
--> j
1 {erlang,apply,[#Fun<Elixir.IEx.CLI.1.131305237>,[]]}
2* {'remote@192.168.1.200',shell,start,[]}
+ --> c
+ Eshell V9.1 (abort with ^G)
+ (remote@192.168.1.200)1>
つながりました!つながりましたが、Eshell って出ちゃってますね...
iex にするには、こうしないといけなかったようです。もう一度最初からです。
iex(temoto@192.168.1.100)1>
User switch command
+ --> r 'remote@192.168.1.200' 'Elixir.IEx'
--> j
1 {erlang,apply,[#Fun<Elixir.IEx.CLI.1.131305237>,[]]}
+ 2* {'remote@192.168.1.200','Elixir.IEx',start,[]}
--> c
+ Interactive Elixir (1.5.2) - press Ctrl+C to exit (type h() ENTER for help)
+ iex(remote@192.168.1.200)1> System.cmd("whoami", [])
+ {"ubuntu\n", 0}
おー!ちゃんとリモートの iex に繋がったようですね。
以上、今回は C-g で出てくるアイツと仲良くなる、でした。
Erlang界では JCLモードというらしい。まさか、Job Contro L !?