c-接收SIGINT时,将读线返回到其原始状态



在bash中,当用户点击ctrl-c(发送SIGINT(时,它会将读线恢复到其原始状态,取消搜索/vi模式/。。。状态

我尝试了UNSETSTATE宏,但它没有效果,实际上即使是SETSTATE也对读线的状态没有影响,但rl_readline_state变量发生了变化。

在信号处理程序中,我尝试过:

RL_UNSETSTATE(RL_STATE_ISEARCH|RL_STATE_NSEARCH|RL_STATE_SEARCH|RL_STATE_VIMOTION|RL_STATE_NUMERICARG|RL_STATE_MULTIKEY);

我试过rl_redisplay(),但没用。请记住,我有:

rl_catch_signals = 0;

我有一个rl_getc_function的处理程序。

这是我的代码:https://gitlab.com/abellaismail/minishell/-/blob/dev/src/sig_handler.c

我知道这在某种程度上与42有关。如果你想进一步了解我找到的解决方案是如何工作的,这是我对该项目的回购。假设你的问题适用于当提示等待命令时,你按下ctrl+C(当在heredoc或执行子进程时,行为有点不同(,我调用了以下函数:

void    ft_signal_ctrl_c(int sig)
{
(void)sig;
write(2, "n", 1);
rl_replace_line("", 0);
rl_on_new_line();
rl_redisplay();
}

这成功地返回到shell which(running(循环,显示一个新的提示。errno也应该单独更新(ctrl+C给出$?=1(。

最新更新