Pregunta

Estoy usando la carcasa de Python en una terminal TTY, y es extremadamente irritante que toda la documentación se envuelva con un ancho tan estrecho. Mi pantalla es de 1600 por 900 píxeles, con mi terminal en 200 por 56 caracteres, pero la documentación de Python del caparazón insiste en envolverse a un ancho mucho más estrecho. (Las líneas que ingreso en el mensaje no son limitadas; les permite ejecutar el ancho de pantalla completo).

Estoy consciente de PEP-8 Longitud de línea máxima Especifica que las documentos se limitan a 72 caracteres por línea, pero ¿hay alguna manera de hacer que use todo el terminal de todos modos? Sé que Javadoc elimina el envoltorio de línea adicional de los comentarios de Javadoc; Estoy después de algo que funciona algo así.

El mayor problema con esto es la lista de módulos: en lugar de usar el ancho completo de mi pantalla cuando enumera todos los nombres de módulos, solo usa el ancho de envoltura estrecha, mostrando los módulos solo en cuatro columnas, y por lo tanto no puede en realidad no puede Coloque la lista completa en mi pantalla (aunque se ajusta perfectamente a otros monitores). No puedo simplemente superarlo less O, como lo hago con de gran tamaño --help Texto en Bash.

¿Fue útil?

Solución

== editar == actualizado

Entonces, el problema con el que te encontrarás es que para la ayuda basada en CLI, el ancho de la cadena DOC realmente solo está limitado por las nuevas líneas en la documentación original. Es decir, cuando corres 'ayuda (futuro) ', simplemente imprime la cadena DOC y la paga. Nada lujoso, no hay formato hecho sobre la marcha. Es por eso que si representa el DOC a HTML, puede modificar el ancho del navegador y se envolverá de manera diferente.

La única forma en que encontré modificar este comportamiento es si realmente modifica el documento en sí.

Aquí hay un ejemplo rápido de cómo montar las cadenas de documentos. Esencialmente en una documentación, las nuevas líneas están codificadas hasta el final de la línea, de modo que

a = """
one
two

three
"""

Codifica

'\none\ntwo\n\nthree\n'

Si desea una línea 'envolver' automáticamente, solo necesita reemplazar n [^ n] (cualquier carácter Newline + que no sea una línea nueva) con el personaje capturado.

re.sub('\n([^\n])', ' \g<1>', a)

A entonces se convierte en

' one two\n three\n'

Esta es una forma súper hacky de hacer las cosas, pero la única forma en que puedo pensar para reformatear las cosas para que se envuelvan.

Un mejor ejemplo sería:

#!/usr/bin/python

import pydoc
import re

t = re.sub('\n([^\n])', ' \g<1>', pydoc.__doc__)
pydoc.__doc__ = t
help(pydoc)

== editar ==

Esto puede o no satisfacer sus necesidades, pero tenía una queja similar que resolví un poco diferente. Escribí un envoltorio de 'ayuda' que carga los documentos de stdlib en un navegador en segundo plano. Puede o no ayudarlo, una cosa buena es que la salida HTML de las cosas PYDOC permite anchos variables en los párrafos.

Puede tomar el script adjunto, importarlo de Site.py y luego, cuando ejecute Ayuda () desde la CLI en cualquier material de stdlib, abrirá la página web correspondiente automáticamente. Esto no hace nada por sus propias cosas locales (no creo, ha pasado un tiempo), pero podría modificarse para hacerlo.

Si eres Hardcore Cli Guy, disculpas. Pero cuando se enfrenta a una queja similar con respecto a la salida de cosas, esto es lo que inicialmente probé.

#!/usr/bin/python

import inspect
import os
import sys
import webbrowser
from pydoc import Helper

__all__ = ['MyHelper', 'old_help', 'help']


class MyHelper(Helper):

    def __init__(self):
        Helper.__init__(self)

    def getdocloc(self, object):
        global old_help
        """Return the location of module docs or None"""
        try:
            file = inspect.getabsfile(object)
        except TypeError:
            file = '(built-in)'

        docloc = os.environ.get("PYTHONDOCS", "http://docs.python.org/library")
        basedir = os.path.join(sys.exec_prefix, "lib", "python"+sys.version[0:3])
        BUILTINS_LIST = ( 'errno', 'exceptions', 'gc', 'imp', 'marshal', 'posix', 'signal', 'sys', 'thread', 'zipimport')
        if (isinstance(object, type(os)) and (object.__name__ in BUILTINS_LIST or file.startswith(basedir)) and object.__name__ not in ('xml.etree', 'test.pydoc_mod')):
            if docloc.startswith("http://"):
                docloc = "%s/%s" % (docloc.rstrip("/"), object.__name__)
            else:
                docloc = os.path.join(docloc, object.__name__ + ".html")
        else:
            docloc = None
        return docloc

    def __repr__(self):
        global old_help
        if inspect.stack()[1][3] == '?':
            return self()
            return ''
        else:
            return '<HHhelp instance>'

    def help(self, *args):
        print args
        global old_help
        if isinstance(args[0], object):
            docloc = self.getdocloc(args[0])
            print '********',docloc,type(docloc)
            if isinstance(docloc, str):
                if docloc.find('http://') == 0:
                    webbrowser.open(docloc)
        else: 
            old_help(args)

global old_help, help
old_help = help
help = MyHelper()

La segunda solución que uso para obtener bonitos documentos de Python es usar Sphinx's sphinx-apidoc para generar automáticamente documentos API para los módulos de Python. El material de salida estándar de Python Doc es realmente limitante (como estás experimentando).

Sin embargo, con esto dicho: apuesto a que el ancho de los documentos es configurable de alguna manera, pero requerirá parches de mono ... Me haré un poco y veré qué puedo encontrar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top