fish_key_reader: stop looping on SIGHUP

Using the machinery in reader.cpp rather than going back to
intalling our own handlerss

(see 89644911a1883eea03ecc11ffbcef2df2a9c70fe)

Fixes #9309
This commit is contained in:
Aaron Gyes 2022-10-27 17:13:27 -07:00
parent 0305c842e6
commit b7593a377a
3 changed files with 6 additions and 3 deletions

View File

@ -227,7 +227,7 @@ static void process_input(bool continuous_mode, bool verbose) {
std::vector<wchar_t> bind_chars;
std::fwprintf(stderr, L"Press a key:\n");
for (;;) {
while (!check_exit_loop_maybe_warning(nullptr)) {
maybe_t<char_event_t> evt{};
if (reader_test_and_clear_interrupted()) {
evt = char_event_t{shell_modes.c_cc[VINTR]};

View File

@ -2909,12 +2909,12 @@ static bool try_warn_on_background_jobs(reader_data_t *data) {
/// Check if we should exit the reader loop.
/// \return true if we should exit.
static bool check_exit_loop_maybe_warning(reader_data_t *data) {
bool check_exit_loop_maybe_warning(reader_data_t *data) {
// sighup always forces exit.
if (s_sighup_received) return true;
// Check if an exit is requested.
if (data->exit_loop_requested) {
if (data && data->exit_loop_requested) {
if (try_warn_on_background_jobs(data)) {
data->exit_loop_requested = false;
return false;

View File

@ -240,6 +240,9 @@ struct reader_config_t {
int in{0};
};
class reader_data_t;
bool check_exit_loop_maybe_warning(reader_data_t *data);
/// Push a new reader environment controlled by \p conf, using the given history name.
/// If \p history_name is empty, then save history in-memory only; do not write it to disk.
void reader_push(parser_t &parser, const wcstring &history_name, reader_config_t &&conf);