code: def redo(self, change=None, task_handle=taskhandle.NullTaskHandle()):
          
          if not self.redo_list:
              raise exceptions.HistoryError('Redo list is empty')
          if change is None:
              change = self.redo_list[-1]
          dependencies = self._find_dependencies(self.redo_list, change)
          self._move_front(self.redo_list, dependencies)
          self._perform_redos(len(dependencies), task_handle)
          return self.undo_list[-len(dependencies):]
docs: Redo undone changes from the history
  
          When `change` is `None`, the last undone change will be
          redone.  If change is not `None` it should be an item from
          `self.redo_list`; this change and all changes that depend on
          it will be redone.  In both cases the list of redone changes
          will be returned.