Restore interruptibility to Edwin commands when on an X display.
authorMatt Birkholz <puck@birchwood-abbey.net>
Tue, 26 Jul 2016 22:02:26 +0000 (15:02 -0700)
committerMatt Birkholz <puck@birchwood-abbey.net>
Fri, 29 Jul 2016 07:07:35 +0000 (00:07 -0700)
commit2bfc70ce025ac0d22d53c2e726a88a2efce00e40
tree0c23be385d76c6b60f498867e35825dcf9df8ce9
parente47eaeec8005134b1be82265cd73903c5b415c1d
Restore interruptibility to Edwin commands when on an X display.

Commit 52eea88 (Do NOT use permanently-register-io-thread-event in
Edwin.) removed too much.  Without an IO thread event registered to
preview X events, Edwin cannot be interrupted by a ^G key press.

Restore X event previewing using a custom, "permanently" registered IO
thread event that always consumes some input before re-registering
(i.e. withOUT the reading-event? variable that caused the spinning
previously).  Now X events are read only in the previewer (and
wait-for-event).  Keyboard operations only process queued events.  And
the queue is used only by the previewer or with thread events (the
previewer) blocked.

Remove deregister-all-events from cmdl/start so that the "non-
permanent" IO thread event registered by the grab-editor wrapper is
not undone when the editor command level is started.  Reversing the
order ("grab" the editor INSIDE the command level) makes the wrapper's
special operations unavailable when the command level is made.  If
there is need for the aggressive decoupling of command levels as
rendered by deregister-all-events (which nevertheless did NOT remove
"permanent" IO event registrations), some mechanism will be needed to
set up the previewer after the command level is entered.
src/edwin/xterm.scm
src/runtime/rep.scm