Readline: получите новую подсказку на SIGINT
мы получили код, подобный следующему, используя readline: I '
#include
#include
#include
#include
#include
#include
#include
#include
#include
void handle_signals(int signo) {
if (signo == SIGINT) {
printf("You pressed Ctrl+C\n");
}
}
int main (int argc, char **argv)
{
//printf("path is: %s\n", path_string);
char * input;
char * shell_prompt = "i-shell> ";
if (signal(SIGINT, handle_signals) == SIG_ERR) {
printf("failed to register interrupts with kernel\n");
}
//set up custom completer and associated data strucutres
setup_readline();
while (1)
{
input = readline(shell_prompt);
if (!input)
break;
add_history(input);
//do something with the code
execute_command(input);
}
return 0;
}
он настроен на перехватSIGINT
(то есть нажатие пользователемCtrl+C
), так что я могу сказать, что обработчик сигналаhandle_signals()
работает. Тем не менее, когда контроль возвращается кreadline()
, Это'с использованием той же строки текста, которая использовалась до ввода. Что я'Я бы хотел, чтобы это произошло для "readline"отменить" текущая строка текста и дайте мне новую строку, очень похоже на оболочку BASH. Примерно так:
i-shell> bad_command^C
i-shell> _
Есть ли шанс заставить это работать? Что-то в списке рассылки, который я прочитал, упомянул, используяlongjmp(2)
, но это действительно некажется хорошей идеей