code: def print_themes(cls, path=THEMES):
          
          themes, errors = cls.list_themes(path=path + '/')
  
          print('\nInstalled ({0}):'.format(path))
          installed = [t for t in themes if t.source == 'installed']
          if installed:
              for theme in installed:
                  line = '    {0:<20}[requires {1} colors]'
                  print(line.format(theme.name, theme.required_colors))
          else:
              print('    (empty)')
  
          print('\nPresets:')
          preset = [t for t in themes if t.source == 'preset']
          for theme in preset:
              line = '    {0:<20}[requires {1} colors]'
              print(line.format(theme.name, theme.required_colors))
  
          print('\nBuilt-in:')
          built_in = [t for t in themes if t.source == 'built-in']
          for theme in built_in:
              line = '    {0:<20}[requires {1} colors]'
              print(line.format(theme.name, theme.required_colors))
  
          if errors:
              print('\nWARNING: Some files encountered errors:')
              for (source, name), error in errors.items():
                  theme_info = '({0}) {1}'.format(source, name)
                  # Align multi-line error messages with the right column
                  err_message = six.text_type(error).replace('\n', '\n' + ' ' * 20)
                  print('    {0:<20}{1}'.format(theme_info, err_message))
  
          print('')
docs: Prints a human-readable summary of the installed themes to stdout.
  
          This is intended to be used as a command-line utility, outside of the
          main curses display loop.