docs: def man(self, pattern):
          """Call viewer.sh to view man page"""
          try:
              avail = os.listdir(os.path.join(environ.cache_dir, environ.source))
          except OSError:
              avail = []
  
          if not os.path.exists(environ.index_db):
              raise RuntimeError("can't find index.db")
  
          conn = sqlite3.connect(environ.index_db)
          cursor = conn.cursor()
  
          # Try direct match
          try:
              page_name, url = cursor.execute(
                  'SELECT name,url FROM "%s" '
                  'WHERE name="%s" ORDER BY LENGTH(name)'
                  % (environ.source, pattern)).fetchone()
          except TypeError:
              # Try standard library
              try:
                  page_name, url = cursor.execute(
                      'SELECT name,url FROM "%s" '
                      'WHERE name="std::%s" ORDER BY LENGTH(name)'
                      % (environ.source, pattern)).fetchone()
              except TypeError:
                  try:
                      page_name, url = cursor.execute(
                          'SELECT name,url FROM "%s" '
                          'WHERE name LIKE "%%%s%%" ORDER BY LENGTH(name)'
                          % (environ.source, pattern)).fetchone()
                  except TypeError:
                      raise RuntimeError('No manual entry for ' + pattern)
          finally:
              conn.close()
  
          page_filename = self.get_normalized_page_name(page_name)
          if self.forced or page_filename + '.3.gz' not in avail:
              self.cache_man_page(environ.source, url, page_name)
  
          pager_type = environ.pager if sys.stdout.isatty() else 'pipe'
  
          # Call viewer
          columns = (util.get_width() if self.force_columns == -1 else
                     self.force_columns)
          pid = os.fork()
          if pid == 0:
              os.execl('/bin/sh', '/bin/sh', environ.pager_script, pager_type,
                       self.get_page_path(environ.source, page_name),
                       str(columns), environ.pager_config, page_name)
          return pid