When the pager dies, we get a SIGPIPE. That causes
error.SignalInterrupt to be raised (from ui._catchterm()`). Any
further writes or flushes will cause further SIGPIPEs and furhter
error.SignalInterrupt. If we write or flush outside of the
try/except that handle KeyboardInterrupt (which
error.SignalInterrupt is a subclass of), then control will escape
from the dispatch module. Let's fix that by ignoring errors from
flushing the ui.
I would have rather fixed this by restoring the stdout and stderr
streams when the pager dies, but it gets complicated because of
multiple ui instances (ui/lui) and different pager setups between
regular hg and chg.
This changes a test in test-pager.t, but I don't understand why. I
would have thought that all the output from the command should have
gone to the broken pager.