We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 12927b8 commit f596cf1Copy full SHA for f596cf1
lib/iex/lib/iex/server.ex
@@ -374,9 +374,29 @@ defmodule IEx.Server do
374
375
defp io_get(pid, prompt_type, prefix, counter) do
376
prompt = prompt(prompt_type, prefix, counter)
377
- send(pid, {:input, self(), IO.gets(:stdio, prompt)})
+ send(pid, {:input, self(), io_get(prompt)})
378
end
379
380
+ defp io_get(prompt) do
381
+ pid = Process.group_leader()
382
+ ref = Process.monitor(pid)
383
+ command = {:get_until, :unicode, prompt, __MODULE__, :__io_get__, []}
384
+ send(pid, {:io_request, self(), ref, command})
385
+
386
+ receive do
387
+ {:io_reply, ^ref, reply} ->
388
+ Process.demonitor(ref, [:flush])
389
+ reply
390
391
+ {:DOWN, ^ref, _, _, _} ->
392
+ {:error, :terminated}
393
+ end
394
395
396
+ @doc false
397
+ def __io_get__([], :eof), do: {:done, :eof, []}
398
+ def __io_get__([], chars), do: {:done, List.to_string(chars), []}
399
400
defp prompt(prompt_type, prefix, counter) do
401
{mode, prefix} =
402
if Node.alive?() do
0 commit comments