Ok, i think i found in the kernel where this is set up.

```
(define 1/check-for-break
 ...
                    (let ((exn:break*_0
                           (let ((tmp_0 (thread-pending-break t_0)))
                             (if (eq? tmp_0 'hang-up)
                               exn:break:hang-up/non-engine
                               (if (eq? tmp_0 'terminate)
                                 exn:break:terminate/non-engine
                                 exn:break/non-engine)))))
                      (begin
                        (set-thread-pending-break! t_0 #f)
                        (lambda ()
                          (call-with-escape-continuation
                           (lambda (k_0)
                             (raise
                              (|#%app|
                               exn:break*_0
                               "user break"
                               (current-continuation-marks)
                               k_0)))))))

```

Can i just hack this to check `tmp_0` for the value `'interrupt` or is that 
wishful thinking? I have no idea what i'm doing =). I am just impatient and 
want a SIGINT.

There must be some reason SIGINT is not explicitly supported, or i must be 
missing something.

Nate

> On May 21, 2021, at 2:32 PM, Nathaniel W Griswold <nate@manicmind.earth> 
> wrote:
> 
> I wanted to understand a limitation of the repl of the rash package (github 
> issue https://github.com/willghatch/racket-rash/issues/78) as well as in the 
> racket repl, i guess, and see if i could do a quick hack to get something 
> working.
> 
> Anyway, i just wanted to catch SIGINT without using something like the 
> `unix-signals` package from Tony Garnock-Jones. I just did this:
> 
> ```
> (module blah racket
>  (let loop ()
>    (define (read k)
>      (with-handlers ([exn:break? (λ (e) (display "=BREAK=") (k #f))])
>        (k (read-line))))
> 
>    (display "> ")
>    (let ([result (call/cc read)])
>      (when result
>        (display result))
>      (newline)
>      (loop))))
> ```
> 
> 1) It catches all breaks and my program won't quit =). Is there a way to 
> discern if the break is a SIGINT so i can continue only on that signal and 
> abort otherwise? I guess, should i just check that it's not a 
> exn:break:terminate or exn:break:hang-up, or... ?
> 
> 2) Are there any glaring mistakes in what i wrote other than the problems of 
> (1)?
> 
> Any good way to do this?
> 
> Nate
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Racket Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to racket-users+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/racket-users/20A87695-C978-435A-9D6B-182B7D565D96%40manicmind.earth.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/8435D475-421B-47D8-A5FD-CFF5A98A6FE1%40manicmind.earth.

Reply via email to