Wie kann man doppelte Anführungszeichen nicht als doppeltes Backtick und Primzahlzeichen darstellen?

1

Wenn ich einen Befehl mache wie:

man bash

Ich sehe Zitate wie folgt:

``...''

Es gab Beiträge darüber, warum dies passiert:

Aber ich habe keine Möglichkeit gefunden, den Menschen oder den zugrunde liegenden Pager zu zwingen , entweder ein ASCII-Anführungszeichen (") anzuzeigen oder die Zeichen zu ermutigen, oder irgendetwas anderes als die Backtick- / Prime-Zeichen zu verwenden.

Mein Anwendungsfall ist, dass ich in der Bash- Manpage nach einfachen Anführungszeichen oder Backticks suchen möchte, die semantischen Wert haben, und das Durcheinander von nicht-semantischen Backtick / Prime-Zeichen macht dies schwierig.

Ich habe versucht , LC_ALL aus en_US.UTF-8 bis C verändert, und haben versucht mit Mann ‚s Option -P anderen Pagern / Optionen angeben, aber ich habe noch nicht eine Lösung gefunden.

Meine Umgebung ist man 2.6.3, CentOS 7.2 (3.10.0-327.13.1.el7.x86_64), bash 4.2.46 (1) oder zsh 5.0.2.

Ich würde es vorziehen, eine Lösung zu finden, die den Menschen veranlasst , doppelte Anführungszeichen entweder als ASCII-Doppelanführungszeichen (") oder den zitierten Inhalt als formatierten Text zu rendern (z. B. durch Unterstreichen oder Ermutigen).

Dies gilt in ähnlicher Weise, wie der Mensch macht in einfache Anführungszeichen Inhalt als ` Inhalt ' .

Eine schlechte Problemumgehung:

man bash | sed -e "s/\(''\|\`\`\)//g" -e "s/\`\([^']*\)/\1/g" | less

Kann mir jemand sagen, wie man Menschen dazu bringt, zitierten Inhalt nicht mit Backticks und Primzahlen zu zeigen? Die Lösung sollte keine Installation von Software erfordern (dh, die Lösung sollte mit einer CentOS 7.2-Minimalinstallation funktionieren).

Steve Amerige
quelle

Antworten:

2

Die Backticks in der bash-Manpage sind explizit in der troff-Quelle angegeben und nicht das Ergebnis eines Makros. Sie sind daher schwer zu ändern. Die speziellen Backticks sind jedoch in Anführungszeichen gesetzt \`, sodass Sie Ihre Sed auf den Quell-Troff anwenden können, anstatt diesen Unterschied zu verwenden.

Stattdessen können Sie einen troff-Befehl hinzufügen, um das Backtick in ein anderes Zeichen zu übersetzen. Der Befehl .tr AXBYübersetzt alle A's in X und B's in Y. Also

(echo '.tr `"'\''"'; zcat $(man -w bash)) | man /dev/stdin

Übersetzt Backtick und einfaches Anführungszeichen in doppelte Anführungszeichen. So haben Sie nur die gewünschten speziellen Backticks in der Ausgabe, obwohl Sie auch Artefakte wie haben the pipeline"s return.

Im Großen und Ganzen denke ich, dass Ihre "schlechte Problemumgehung" völlig ausreichend ist.

meuh
quelle
Vielen Dank für die Beschreibung der Implementierungsdetails. Ich muss daher zugeben, dass Problemumgehungen die Lösung für diese Frage sein werden. Ich werde Ihren obigen Eintrag mit einem Teil meines obigen sed-Skripts als meine endgültige Lösung kombinieren. Ich markiere dies als akzeptierte Antwort. Vielen Dank für Ihre Eingabe!
Steve Amerige
2

Dies ist möglicherweise keine angenehme Option, aber Sie können sie w3mals Browser für mandie HTML-Ausgabe verwenden:

BROWSER=w3m man -H bash

Bildbeschreibung hier eingeben

Es rendert ``…''mit Unicode-Anführungszeichen (wie Google Chrome, aber aus irgendeinem Grund lynxnicht).

Das Manpage-Repository von FreeBSD sagt mir, dass CentOS 7 mandies unterstützt-H .

muru
quelle
Vielen Dank für den Gedanken, aber ich suche nach einer Lösung innerhalb eines einfachen Konsolenfensters oder innerhalb einer SSH-Terminalsitzung. Die Idee, in HTML zu rendern, ist erfinderisch. Ich hoffe aber immer noch, dass es eine Lösung gibt, die zum Zeitpunkt der Manpage-Generierung gefunden werden kann. Noch einmal Danke.
Steve Amerige
w3msollte in einem "einfachen Konsolenfenster" oder einer SSH-Sitzung problemlos funktionieren.
muru
Das Paket w3m ist im Epel Repo enthalten und nicht in der CentOS 7-Minimalinstallation enthalten. Ich bemühe mich sehr, keine zusätzliche Software zu installieren, insbesondere keine Software, die weder in der CentOS-Basis noch im Update-Repo enthalten ist. Ich suche nach Lösungen, die keine Softwareinstallation erfordern. Ich habe dem ursprünglichen Beitrag eine Klarstellung hinzugefügt. Vielen Dank.
Steve Amerige
0

Es ist umstritten , ob es schwierig ist, mit @meuh zu vereinbaren, dass die Anführungszeichen in den Quellen von troff (Handbuchseite) eingebettet sind . Dies hängt hauptsächlich vom Entwickler der angegebenen Dokumentation ab. bash verwendet diese Konvention, um mit dem zugehörigen Toolset zu arbeiten , z makeinfo.

Zum Beispiel verwendet die Handbuchseite von xterm Makros, um ein (wohl) besseres Erscheinungsbild zu erhalten:

.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds AQ \(aq
.el       .ds AQ '
.ie \n(.g .ds `` \(lq
.el       .ds `` ``
.ie \n(.g .ds '' \(rq
.el       .ds '' ''

Das war aus einem Fehlerbericht (behoben in 2009 ):

Umgehung der Groff-Zuordnung von ASCII-Anführungszeichen mit Makros (von Reuben Thomas auf Empfehlung von Colin Watson angefordert, behebt Debian # 378700 ).

und zum Beispiel verwendet

.PP
Although both windows may be displayed at the same time, one of them is
considered the \*(``active\*('' window for receiving keyboard input and terminal
output.

und dies zu produzieren (Ausschneiden / Einfügen aus xterm, um die alternativen Anführungszeichen beizubehalten):

Obwohl beide Fenster gleichzeitig angezeigt werden können, wird eines davon als „aktives“ Fenster für den Empfang von Tastatureingaben und Terminalausgaben angesehen. Dies ist das Fenster, das den Textcursor enthält. Das aktive Fenster kann über Escape-Sequenzen, das Menü VT-Optionen im Fenster VTxxx und das Menü Tek-Optionen im Fenster 4014 ausgewählt werden.

Ein Screenshot zeigt es besser:

Beispiel aus xterm

Das Ergebnis in PDF verwendet aufgrund der Bedingung im Makro unterschiedliche Anführungszeichen:

PDF-Rendering des Angebots-Beispiels

Eine mögliche Verbesserung wäre es, den Präprozessor zu modifizieren, um die Makrodefinitionen hinzuzufügen und die benannten Zeichen von groff zu ersetzen, anstatt wörtliche einfache und doppelte Anführungszeichen. Da keiner von beiden standardmäßig ASCII erzeugt, würde das Ergebnis weniger syntaktische Unordnung enthalten.

Das erinnert mich daran, dass das Ändern dieser "xxx" in Kursivschrift die Dinge verbessern würde (ein anderes Mal vielleicht).

Thomas Dickey
quelle