diff --git a/plugins/sigint b/plugins/sigint index e6ce669..9755d21 100755 --- a/plugins/sigint +++ b/plugins/sigint @@ -2,4 +2,11 @@ sub command { NEXT } -$SIG{INT} = 'IGNORE'; +$SIG{INT} = sub { + $::ABORT_HACK = "^C"; + + # DO NOT USE this global variable. It's a nasty hack. In most cases, + # you should "return ABORT" instead, or maybe "main::abort()" when doing + # nastier stuff. You should only need $::ABORT_HACK in signal handlers. +}; + diff --git a/revbank b/revbank index 7c0c1ac..27f868d 100755 --- a/revbank +++ b/revbank @@ -67,6 +67,13 @@ sub prompt { my $begin = my $time = time; while (not $done) { + if ($::ABORT_HACK) { + # Global variable that a signal handling plugin can set. + # Do not use, but "return ABORT" instead. + my $reason = $::ABORT_HACK; + $::ABORT_HACK = 0; + abort($reason); + } if ($select->can_read(.05)) { $readline->callback_read_char; $begin = $time;