Was sind diese 3cxx-Manpages und wie kann ich sie von Man-Aufrufen entfernen bzw. ausschließen?

526
John P

Das alles begann, weil ich Manpages zu C ++ - Typen / -Funktionen wollte. Ich habe ein Repository mit dem Namen Cppman gefunden, das diese Seiten entweder von cplusplus oder cpp reference abfragt. An dieser Stelle man std::coutwürde die erwartete Manpage angezeigt, aber man -k cout"nichts geeignet" angezeigt .

Seitdem habe ich alle Ordner außer dem Ordner cplusplus.com entfernt, in "man3" umbenannt und ausgeführt mandb(als root für ein gutes Maß, dann als ich selbst), wodurch ein leerer "cat3" - Ordner und eine "index.db" erzeugt wurden. Jetzt stelle ich MANPATH wie folgt ein:

old_manpath=$(manpath 2>/dev/null) export MANPATH=$HOME/.local/share/man:$old_manpath 

Das Ergebnis:

> man -k std::cout std::cout (3) - Standard output stream > man -k std::result_of std::result_of (3) - Result of call std::result_of (3cxx) - (unknown subject) > man 3 std::result_of # the page I expect > man 3cxx std::result_of # scrawny and malformed manpage 

Wenn ich diese "3cxx" -Seiten einfach ausblenden könnte man [-k], wäre ich zufrieden. Ich möchte jedoch lieber die Dateien löschen und erst gar nicht generieren. Ich habe anscheinend keine * .3cxx.gz-Dateien.

Was habe ich falsch gemacht? Wie und wo soll ich meinen MANPATH einstellen, wenn das tatsächlich das Problem ist?


Bearbeiten 1 - Ich habe dieser Frage viele Details beraubt, aber der Inhalt der 3cxx-Manpages kann Aufschluss darüber geben. Zum einen man 3cxx std::result_ofhat der Titel std::result_of< _Signature >(3cxx)( <_Signature>fehlt in der normalen Manpage); Die SYNOPSIS ist leer, gefolgt von "Detailed Description" anstelle von DESCRIPTION. Ich habe versucht zu replizieren, wie es unten aussieht (Unterstriche stellen Einzug dar.)

detaillierte Beschreibung

____ Vorlage <Typname _Signature>

________class std :: result_of <_Signature> "result_of

________Definition in Zeile 2097 der Datei type_traits.

Dieser Streuner "ist wie geschrieben und erscheint kurz nach dem Haupttyp auf einigen anderen Seiten, die ich überprüft habe. Die Seiten, die abweichend waren, hatten immer noch unübertroffene Anführungszeichen, wenn die Typen weiter unten auf der Seite oder am Zeilenende keine Vorlagen enthielten.


Bearbeiten 2 - Ich kann nicht herausfinden, wie ich die Datei finden kann, die der angezeigten Manpage zugeordnet ist, oder ich könnte den gesamten Stapel prüfen / löschen. Mit lsofsehe ich nicht so etwas wie eine manpage offen, nicht, dass ich es erwartet, dass die Datei offen zu halten. Meine beste Vermutung ist, dass diese stubby Manpages in index.dbeine Datenbankdatei "dbm / ndbm" gebacken werden. Ich habe das python3-gdbmPaket, also habe ich darauf gestoßen und festgestellt, dass es den Typ 'dbm.gnu' hat und sein erster Eintrag lautet b'std::list::cend\x00' => b'-\t3\t3\t1509183341\t749359924\tA\t-\t-\tgz\tReturn const_iterator to end\x00'. Dies würde mir nahe legen, dass index.db nur Namens- / Beschreibungspaare speichert und möglicherweise einige dieser Zahlen am Kopf einer Datei entsprechen würden. Aber selbst dann, wie kann ich mehr herausfinden, ohne sie in Aktion zu sehen . Ich denke, das ist so weit, wie ich es alleine schaffen kann.


Edit 3 - Ich habe die Einträge entschlüsselt:

>>> from dbm.gnu import * >>> o=open('/home/john/.local/share/man/index.db', 'c') >>> def nextn(i,n): ... sum="" ... for j in range(0,n): ... sum += i.decode("utf-8") + "\n" + o[i].decode("utf-8") ... i=o.nextkey(i) ... return sum >>> all=nextn(o.firstkey(), len(o.keys())) >>> all.find('cxx') -1  # Example entry for reference: std::list::cend - 3 3 1509183341 749359924 A - - gz Return const_iterator to end 

Die Einträge sind in Hash-Reihenfolge (quasi-zufällig) angeordnet, daher sollte ein gutes Beispiel davon etwa so viele Einträge vom Typ '3cxx' wie vom Typ '3' zeigen. Stattdessen sind sie buchstäblich alle "3". Index.db ist aus dem Schneider, aber ich habe offiziell keine Ideen.

1

0 Antworten auf die Frage