我想实现比二郎其他语言的REPL,和我真的交互式erl
(ESHELL)提示的这一特点很感兴趣:Erlang的Eshell如何保持输入行不受异步输出的影响?
1> spawn(fun() -> timer:sleep(5000), io:format("~p~n", ["later"]) end).
<0.34.0>
2> i can ty
因此,我在这里做的是,最终酿出一些后台进程写入终端。在此期间,我已经输入i can ty
只是五秒钟过去了,并"later"
被插入的正上方2>
,导致:
1> spawn(fun() -> timer:sleep(5000), io:format("~p~n", ["later"]) end).
<0.34.0>
"later"
2> i can type...
在其他语言,如bash或Node.js的,这宁可导致在类似的东西:
2> i can ty"later"
pe...
Erlang如何做到这一点?我尝试过使用Google搜索,甚至快速查看其源代码,但无法找出如何完成。我认为它必须涉及一些终端控制序列?
这不是一个简单的问题,说实话,你可能在这里找不到答案。如果你真的感兴趣,你可能会碰到erlang的邮件列表,那里所有的酷猫都挂了:'erlang-questions @ erlang.org' – mpm 2014-10-05 00:20:09
写入stdout是由一个进程完成的。发送给它的消息可能被shell拦截。 – rightfold 2014-10-05 00:25:29