diff options
Diffstat (limited to 'src/nix/repl.cc')
-rw-r--r-- | src/nix/repl.cc | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/nix/repl.cc b/src/nix/repl.cc index 28a8ebc8c499..f84774a53367 100644 --- a/src/nix/repl.cc +++ b/src/nix/repl.cc @@ -185,9 +185,20 @@ void NixRepl::mainLoop(const std::vector<std::string> & files) bool NixRepl::getLine(string & input, const std::string &prompt) { char * s = linenoise(prompt.c_str()); - Finally doFree([&]() { linenoiseFree(s); }); - if (!s) return false; + Finally doFree([&]() { free(s); }); + if (!s) { + switch (auto type = linenoiseKeyType()) { + case 1: // ctrl-C + input = ""; + return true; + case 2: // ctrl-D + return false; + default: + throw Error(format("Unexpected linenoise keytype: %1%") % type); + } + } input += s; + input += '\n'; return true; } |