emersion / emersion/mrsh

SIGINT handling on multiline PS1

Open
#202 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
C
Stars
531
Forks
40
PR merge metrics
No merged PRs in 30d

Description

Sending an interrupt signal to mrsh while having a multline prompt redraws the prompt incorrectly:

```shell
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.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.