new_contents: """Enable pyglet to be used interacively with prompt_toolkit
  """
  from __future__ import absolute_import
  
  import os
  import sys
  import time
  from timeit import default_timer as clock
  import pyglet
  
  # On linux only, window.flip() has a bug that causes an AttributeError on
  # window close.  For details, see:
  # http://groups.google.com/group/pyglet-users/browse_thread/thread/47c1aab9aa4a3d23/c22f9e819826799e?#c22f9e819826799e
  
  if sys.platform.startswith('linux'):
      def flip(window):
          try:
              window.flip()
          except AttributeError:
              pass
  else:
      def flip(window):
          window.flip()
  
  
  def inputhook(context):
      """Run the pyglet event loop by processing pending events only.
  
      This keeps processing pending events until stdin is ready.  After
      processing all pending events, a call to time.sleep is inserted.  This is
      needed, otherwise, CPU usage is at 100%.  This sleep time should be tuned
      though for best performance.
      """
      # We need to protect against a user pressing Control-C when IPython is
      # idle and this is running. We trap KeyboardInterrupt and pass.
      try:
          t = clock()
          while not context.input_is_ready():
              pyglet.clock.tick()
              for window in pyglet.app.windows:
                  window.switch_to()
                  window.dispatch_events()
                  window.dispatch_event('on_draw')
                  flip(window)
  
              # We need to sleep at this point to keep the idle CPU load
              # low.  However, if sleep to long, GUI response is poor.  As
              # a compromise, we watch how often GUI events are being processed
              # and switch between a short and long sleep time.  Here are some
              # stats useful in helping to tune this.
              # time    CPU load
              # 0.001   13%
              # 0.005   3%
              # 0.01    1.5%
              # 0.05    0.5%
              used_time = clock() - t
              if used_time > 10.0:
                  # print 'Sleep for 1 s'  # dbg
                  time.sleep(1.0)
              elif used_time > 0.1:
                  # Few GUI events coming in, so we can sleep longer
                  # print 'Sleep for 0.05 s'  # dbg
                  time.sleep(0.05)
              else:
                  # Many GUI events coming in, so sleep only very little
                  time.sleep(0.001)
      except KeyboardInterrupt:
          pass
  
subject: Add inputhook for pyglet