nix repl: use linenoiseKeyType to differentiate ^C and ^D

Fixes #1757.
This commit is contained in:
Will Dietz 2017-12-26 19:22:28 -06:00
parent aa43cbb764
commit bd17ccf1d8

View file

@ -186,7 +186,16 @@ bool NixRepl::getLine(string & input, const std::string &prompt)
{
char * s = linenoise(prompt.c_str());
Finally doFree([&]() { free(s); });
if (!s) return false;
if (!s) {
switch (auto type = linenoiseKeyType()) {
case 1: // ctrl-C
return true;
case 2: // ctrl-D
return false;
default:
throw Error(format("Unexpected linenoise keytype: %1%") % type);
}
}
input += s;
return true;
}