Domanda

Sto usando il guscio di Python in un terminale TTY ed è estremamente irritante che tutta la documentazione si avvolga a una larghezza così stretta. Il mio schermo è di 1600 per 900 pixel, con il mio terminale a 200 per 56 caratteri, ma la documentazione di Python dalla shell insiste sull'avvolgimento a una larghezza molto più stretta. (Le righe che inserisco sul prompt non sono limitate; consente loro di eseguire la larghezza a schermo intero.)

Sono a conoscenza Lunghezza massima della linea PEP-8 Specifica che i documenti siano limitati a 72 caratteri per riga, ma c'è un modo per farlo usare comunque l'intero terminale? So che Javadoc rimuove la linea extra avvolta dai commenti di Javadoc; Sto cercando qualcosa che funziona un po 'così.

Il problema più grande con questo è l'elenco dei moduli: invece di usare l'intera larghezza della mia schermata quando elenca tutti i nomi dei moduli, utilizza solo la larghezza di avvolgimento stretta, visualizzando i moduli solo in quattro colonne e quindi in realtà non può effettivamente Adatta l'intero elenco sul mio schermo (anche se si adatta perfettamente ad altri monitor). Non posso semplicemente tuffarlo less O e, come faccio con oversize --help testo in bash.

È stato utile?

Soluzione

== EDIT == Aggiornato

Quindi il problema in cui incontrerai è che per l'aiuto basato sulla CLI, la larghezza della stringa Doc è in realtà limitata dalle newline nella documentazione originale. Vale a dire, quando esegui l'aiuto (futuro) ', sta e basta la stringa DOC e la paga. Niente di speciale, nessuna formattazione fatta al volo. Questo è il motivo per cui se rendi il DOC su HTML è possibile modificare la larghezza del browser e avvolgerà diversamente.

L'unico modo in cui ho trovato per modificare questo comportamento è se si modifica effettivamente il documento stesso.

Ecco un rapido esempio di come scimmie-patch doc stringhe. Essenzialmente in un dottore, le nuove linee sono codificate alla fine della linea, in modo tale da

a = """
one
two

three
"""

Codifica in

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

Se volevi automaticamente la riga "avvolgi", devi solo sostituire n [^ n] (qualsiasi carattere di nuova linea + che non è una nuova linea) con il carattere catturato.

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

allora diventa

' one two\n three\n'

Questo è un modo super hacky di fare le cose, ma l'unico modo in cui riesco a pensare per riformattare le cose in modo che si avvolgano.

Un esempio migliore sarebbe:

#!/usr/bin/python

import pydoc
import re

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

== EDIT ==

Questo può o meno soddisfare le tue esigenze, ma ho avuto una lamentela simile che ho risolto in modo leggermente diverso. Ho scritto un wrapper "Help" che carica i documenti stdlib su un browser in background. Può o non può aiutarti - una cosa carina è che l'output HTML di cose PYDOC consenta di larghezze variabili nei paragrafi.

È possibile prendere lo script allegato, importarlo da site.py e poi quando si esegue aiuto () dalla CLI su qualsiasi roba stdlib, aprirà automaticamente la pagina Web corrispondente. Questo non fa nulla per le tue cose locali (non credo, è passato un po 'di tempo), ma potrebbe essere modificato per farlo.

Se sei un ragazzo della CLI hardcore, mi scuso. Ma di fronte a una lamentela simile per quanto riguarda l'output di cose, questo è quello che ho provato inizialmente.

#!/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 seconda soluzione che utilizzo per ottenere Docs piuttosto Python sta usando Sphinx Sphinx-apidoc Generare automaticamente documenti API per i moduli Python. Le cose standard di output di Python Doc sono davvero limitanti (come stai vivendo).

Tuttavia, detto questo: scommetto che la larghezza per i documenti è configurabile in qualche modo ma richiederà una patch di scimmia ... mi prenderò in giro un po 'e vedrò cosa posso trovare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top