def man(self, pattern): """Call viewer.sh to view man page""" results = self._search_keyword(pattern) if len(results) == 0: raise RuntimeError('No manual entry for %s ' % pattern) page_name, keyword, url = results[0] try: avail = os.listdir(os.path.join(environ.cache_dir, environ.source)) except OSError: avail = [] 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
def man(self, pattern): """Call viewer.sh to view man page""" try: avail = os.listdir(os.path.join(environ.man_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
def man(self, pattern): """Call viewer.sh to view man page""" try: avail = os.listdir(os.path.join(environ.man_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