web-dev-qa-db-ja.com

'man'は、二重引用符を二重アクセント記号や素数文字としてレンダリングしないようにするにはどうすればよいですか?

次のようなコマンドを実行すると、次のようになります。

man bash

引用符は次のように表示されます。

``...''

これが発生する理由についての投稿があります:

しかし、manまたは基になるページャーにASCII二重引用符)を表示させる方法が見つかりませんでした( ")または文字を太字にする、またはバッククォート/プライム文字の使用以外のもの。

私のユースケースは、bashのマニュアルページで一重引用符またはバッククォートを検索して、セマンティック値と-セマンティックバックティック/プライム文字はこれを困難にします。

LC_ALLをen_us.UTF-8からCに変更し、manのオプション-Pを使用して他のポケットベル/オプションを指定しようとしましたが、私はまだ解決策を見つけていません。

私の環境は、man 2.6.3、CentOS 7.2(3.10.0-327.13.1.el7.x86_64)、bash 4.2.46(1)、またはzsh5.0.2です。

私の好みは、manが二重引用符をASCII二重引用符文字としてレンダリングする原因となる解決策を見つけることです。 ( ")または、引用されたコンテンツをフォーマットされたテキストとしてレンダリングします(たとえば、下線を引いたり太字にしたりします)。

これは、manが一重引用符で囲まれたコンテンツを `content '

不十分な回避策:

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

引用されたコンテンツをバッククォートと素数で表示しないようにmanを作成する方法を誰かに教えてもらえますか?このソリューションでは、ソフトウェアのインストールは必要ありません(つまり、ソリューションはCentOS 7.2の最小限のインストールで機能する必要があります)。

1
Steve Amerige

Bashのmanページのバッククォートは、一部のマクロの結果ではなく、troffソースで明示的に指定されているため、変更するのは困難です。ただし、特別な単一のバックティックは\`で引用されているため、この違いを使用する代わりに、sedをソースtroffに適用できます。

代わりに、troffコマンドを追加して、バックティックを他の文字に変換できます。コマンド.tr AXBYは、すべてのAをXに、BをYに変換します。

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

バッククォートと一重引用符を二重引用符に変換します。これにより、出力に必要な特別な単一のバックティックだけが残りますが、the pipeline"s returnのようなアーティファクトもあります。

全体として、あなたの「不十分な回避策」はかなり適切だと思います。

2
meuh

これは快適なオプションではないかもしれませんが、manのHTML出力のブラウザとしてw3mを使用できます。

BROWSER=w3m man -H bash

enter image description here

Unicode引用符を使用して``…''をレンダリングします(Google Chromeと同様ですが、何らかの理由でlynxはレンダリングしません)。

FreeBSDのマンページリポジトリは私に教えてくれます CentOS7のman-H をサポートしています。

2
muru

引用符がtroff(マニュアルページ)ソースに埋め込まれていることに@meuhが同意すると、変更するのが難しいかどうかは議論の余地があります。それは主に与えられたドキュメントの開発者に依存します。 bashは、その規則を使用して 関連ツールセット を操作します(例:makeinfo)。

たとえば、xtermのマニュアルページでは、マクロを使用して(おそらく)見栄えを良くしています。

.\" 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 '' ''

これはバグレポートからのものです( 2009 で修正):

マクロを使用したASCII引用符のgroffマッピングを回避します(ColinWatsonのアドバイスに基づいてReubenThomasから要求され、修正 Debian#3787 )。

たとえば、使用されます

.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.

そしてこれを生成します(代替引用符を保持するためにxtermからカット/ペーストします):

両方のウィンドウが同時に表示される場合がありますが、そのうちの1つは、キーボード入力と端末出力を受信するための「アクティブ」ウィンドウと見なされます。これは、テキストカーソルを含むウィンドウです。アクティブなウィンドウは、エスケープシーケンス、VTxxxウィンドウのVTオプションメニュー、および4014ウィンドウのTekオプションメニューから選択できます。

スクリーンショットはそれをよりよく示しています:

example from xterm

PDFの結果は、マクロの条件により、異なる引用符を使用します。

PDF rendering of quote-example

したがって、可能な改善は、プリプロセッサを変更してマクロ定義を追加し、リテラルの単一引用符と二重引用符ではなく、groffの名前付き文字を置き換えることです。どちらもデフォルトでASCIIを生成しないため、結果の構文が乱雑になることは少なくなります。

それは、それらの「xxx」をイタリックに変更することで物事が改善されることを私に思い出させます(おそらく別の時)。

0
Thomas Dickey