docs: def write_scrolling(self, text, attr=None):
          u'''write text at current cursor position while watching for scrolling.
  
          If the window scrolls because you are at the bottom of the screen
          buffer, all positions that you are storing will be shifted by the
          scroll amount. For example, I remember the cursor position of the
          prompt so that I can redraw the line but if the window scrolls,
          the remembered position is off.
  
          This variant of write tries to keep track of the cursor position
          so that it will know when the screen buffer is scrolled. It
          returns the number of lines that the buffer scrolled.
  
          '''
          x, y = self.pos()
          w, h = self.size()
          scroll = 0 # the result
          # split the string into ordinary characters and funny characters
          chunks = self.motion_char_re.split(text)
          for chunk in chunks:
              n = self.write_color(chunk, attr)
              if len(chunk) == 1: # the funny characters will be alone
                  if chunk[0] == u'\n': # newline
                      x = 0
                      y += 1
                  elif chunk[0] == u'\r': # carriage return
                      x = 0
                  elif chunk[0] == u'\t': # tab
                      x = 8 * (int(x / 8) + 1)
                      if x > w: # newline
                          x -= w
                          y += 1
                  elif chunk[0] == u'\007': # bell
                      pass
                  elif chunk[0] == u'\010':
                      x -= 1
                      if x < 0:
                          y -= 1 # backed up 1 line
                  else: # ordinary character
                      x += 1
                  if x == w: # wrap
                      x = 0
                      y += 1
                  if y == h: # scroll
                      scroll += 1
                      y = h - 1
              else: # chunk of ordinary characters
                  x += n
                  l = int(x / w) # lines we advanced
                  x = x % w # new x value
                  y += l
                  if y >= h: # scroll
                      scroll += y - h + 1
                      y = h - 1
          return scroll