Example #1
0
    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
Example #2
0
    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
Example #3
0
    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