Shell: Make ctrl+c start a new command
This commit is contained in:
parent
39667de662
commit
2604a55f80
|
@ -24,10 +24,10 @@ static int last_return = 0;
|
||||||
|
|
||||||
static BAN::String hostname;
|
static BAN::String hostname;
|
||||||
|
|
||||||
static void clean_exit()
|
static void clean_exit(int exit_code)
|
||||||
{
|
{
|
||||||
tcsetattr(0, TCSANOW, &old_termios);
|
tcsetattr(0, TCSANOW, &old_termios);
|
||||||
exit(0);
|
exit(exit_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
BAN::Vector<BAN::Vector<BAN::String>> parse_command(BAN::StringView);
|
BAN::Vector<BAN::Vector<BAN::String>> parse_command(BAN::StringView);
|
||||||
|
@ -308,7 +308,7 @@ BAN::Optional<int> execute_builtin(BAN::Vector<BAN::String>& args, int fd_in, in
|
||||||
}
|
}
|
||||||
else if (args.front() == "exit"_sv)
|
else if (args.front() == "exit"_sv)
|
||||||
{
|
{
|
||||||
clean_exit();
|
clean_exit(0);
|
||||||
}
|
}
|
||||||
else if (args.front() == "export"_sv)
|
else if (args.front() == "export"_sv)
|
||||||
{
|
{
|
||||||
|
@ -978,13 +978,19 @@ int main(int argc, char** argv)
|
||||||
int chi = getchar();
|
int chi = getchar();
|
||||||
if (chi == EOF)
|
if (chi == EOF)
|
||||||
{
|
{
|
||||||
if (errno == EINTR)
|
if (errno != EINTR)
|
||||||
{
|
{
|
||||||
clearerr(stdin);
|
perror("getchar");
|
||||||
continue;
|
clean_exit(1);
|
||||||
}
|
}
|
||||||
perror("getchar");
|
|
||||||
return 1;
|
clearerr(stdin);
|
||||||
|
buffers = history;
|
||||||
|
MUST(buffers.emplace_back(""_sv));
|
||||||
|
col = 0;
|
||||||
|
printf("\n");
|
||||||
|
print_prompt();
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t ch = chi;
|
uint8_t ch = chi;
|
||||||
|
@ -1067,7 +1073,7 @@ int main(int argc, char** argv)
|
||||||
break;
|
break;
|
||||||
case '\x04': // ^D
|
case '\x04': // ^D
|
||||||
fprintf(stdout, "\n");
|
fprintf(stdout, "\n");
|
||||||
clean_exit();
|
clean_exit(0);
|
||||||
break;
|
break;
|
||||||
case '\n':
|
case '\n':
|
||||||
fputc('\n', stdout);
|
fputc('\n', stdout);
|
||||||
|
@ -1096,5 +1102,5 @@ int main(int argc, char** argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
clean_exit();
|
clean_exit(0);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue