3) Make sure some kind of interrupt mechanism is in place to pick up
ctrl-g events when emacs core is busy processing and does not itself
make passes through the NS code event loop (colored spinning disk
shown in gui).
Here, the issue is that the SIGIO handler is never called, despite
being registered. It might be overridden by Cocoa in some way, though
I haven't been able to fully confirm this.
In any case, I tried to use input polling (Fset_input_interrupt_mode
(Qnil)), but poll_for_input() does not get called during, for example,
(while t t). It seems that the QUIT macro does nothing to update
timers so the polling timer never fires. Making the QUIT macro call
handle_async_input() every time slows down emacs (esp during startup).
Does anyone have any suggestions?