mrsh
mrsh copied to clipboard
SIGINT handling on multiline PS1
Sending an interrupt signal to mrsh while having a multline prompt redraws the prompt incorrectly:
PS1="$(printf 'line1\nline2: ')" ./mrsh
line1
line2: ^C
line2:
One way that seems to work is to add rl_reset_line_state() before rl_replace_line() in sigint_handler.
Another hacky way is to set the readline variable rl_event_hook to a no-op function (e.g. static int no_op(void) { return 0; }) and when handling the signal interrupt (in static void sigint_handler()), the only thing you do is set the readline variable rl_done to 1.