code: def mainloop(self):
          
          # Get client state
          proxy = config.engine.open()
          views = [x for x in sorted(proxy.view.list()) if x.startswith(self.PREFIX)]
  
          current_view = real_current_view = proxy.ui.current_view()
          if current_view not in views:
              if views:
                  current_view = views[0]
              else:
                  raise error.UserError("There are no '{}*' views defined at all!".format(self.PREFIX))
  
          # Check options
          if self.options.list:
              for name in sorted(views):
                  print("{} {:5d} {}".format(
                      '*' if name == real_current_view else ' ',
                      proxy.view.size(xmlrpc.NOHASH, name),
                      name[self.PREFIX_LEN:]))
  
          elif self.options.next or self.options.prev or self.options.update:
              # Determine next in line
              if self.options.update:
                  new_view = current_view
              else:
                  new_view = (views * 2)[views.index(current_view) + (1 if self.options.next else -1)]
  
              self.LOG.info("{} category view '{}'.".format(
                  "Updating" if self.options.update else "Switching to", new_view))
  
              # Update and switch to filtered view
              proxy.pyro.category.update(xmlrpc.NOHASH, new_view[self.PREFIX_LEN:])
              proxy.ui.current_view.set(new_view)
  
          else:
              self.LOG.info("Current category view is '{}'.".format(current_view[self.PREFIX_LEN:]))
              self.LOG.info("Use '--help' to get usage information.")
docs: Manage category views.