カラー端末出力を維持しますが、ページャを無効にする方法

カラー端末出力を維持しますが、ページャを無効にする方法

macOSでは、manはポケットベル「/usr/bin/less -is」を使用します(manのマニュアルページを参照)。 manを入力すると、カラー出力が表示されます。しかし、私はmanを使用するときに端末のfindコマンドを使用することを好み、Lessのページング動作が邪魔になると思います。

ポケットベルを猫に設定すると、色が失われます。

ページングを無効にして着色を続けるには?

ベストアンサー1

たとえば、manの出力を別のプログラムにパイプすると、出力がフォーマットされていないように見えますが、たとえば、cat(1)hexdumpプログラムを使用して出力を表示すると、フォーマットが保持されることがわかります。catxxd(1)

man man | xxd

0x08書式は、太字の書式と下線に使用されるバックスペース文字を使用して表示されます。文字にアンダースコアを付けるには、まずアンダースコア文字を印刷してからバックスペース文字を印刷し、カーソルを1位置後ろに移動してからアンダースコアを付けたい文字を書き込みます。太字を作成するには、最初に文字を書き、次にカーソルを1つの位置に戻し、次に文字を書き換えます。ハードコピー端末の結果は期待される効果がありますが、端末エミュレータでは、2番目の文字が最初の文字を上書きしてフォーマットされていないようです。このプログラムを使用すると、この形式を端末が使用する形式に変換できますul(1)

man man | ul

ESCこのパイプ出力のバイトエンコーディングを確認すると、terminfo / termcap端末の説明がコードを使用するか、使用することを決定した他のコードを使用しているかを確認できます。ul

man man | ul | xxd

両方とも制御コードをユーザーに明確な形式にmore変換するので、ユーザーは検査中のファイルに制御コードが含まれているかどうかを知ることができます。出力をページングして端末にコードを解釈させるには、生の文字コードを出力するようにページャを設定する必要があります。これを達成するには、またはオプションを使用できます。lessESCulESC-r-Rlessmore

man man | ul | less -r

lessこれらのオプションは、呼び出し元に渡されるデフォルトオプションには含まれませんless -is

ESCページなしでコードを表示したい場合に使用できる-vオプションですcat

man man | ul | cat -v

上で下線付きのテキストと太字の書式を復元する方法について説明しましたが、色を出力するように設定しても色は出力されませんless。 (less出力色は環境変数を使用して設定できますLESS_TERMCAP_*。この機能は、MacOS Big Sur 11.7.3のマニュアルページには表示されていませんが、引き続き使用でき、更新されたlessドキュメントlessに記載されています。https://github.com/gwsw/less/blob/919fcc8222ebbe8a25f3f81a735222b8fdc78433/less.nro.VER#L2252。おそらく、Big Surで配布されたマニュアルページは、less実際のプログラムに比べて古いようです。バラよりhttps://www.2daygeek.com/get-display-view-colored-colorized-man-pages-linux/環境変数の使用例のいくつかLESS_TERMCAP_*。 )しかし、使用する端末記述を指定するオプションがulあるので-t、希望の方法で太字と下線を表示する修正された端末記述を直接作成できます。以下は、terminfoの説明に基づくサンプルterminfoの説明ですxterm-256color

xterm-256color-manpipecolors|xterm-256color with preset colors for retaining color in piped manpages,
    blink=\E[1;31m,
    bold=\E[1;36m,
    sgr0=\E[0m,
    smso=\E[01;44;33m,
    rmso=\E[0m,
    smul=\E[1;32m,
    rmul=\E[0m,
    use=xterm-256color,

ファイル名が指定されていると仮定すると、xterm-256color-manpipecolors次のコマンドを使用してコンパイルできます。~/.terminfo

tic xterm-256color-manpipecolors

terminfo 記述は、次のようにページされていない出力に使用できます。

man man | ul -t xterm-256color-manpipecolors

ただし、このパイプの出力をページングするには、生の文字を出力するようにページャーを設定する必要があります。

man man | ul -t xterm-256color-manpipecolors | less -r

環境変数を使用してこれをクリーンアップしMANPAGER、結果がパイプで接続されている場合でも機能することを確認できるため、catページングを回避できます。

MANPAGER='ul -t xterm-256color-manpipecolors | less -isr' man man
MANPAGER='ul -t xterm-256color-manpipecolors | less -isr' man man | cat

入れたら

export MANPAGER='ul -t xterm-256color-manpipecolors | less -isr'

~/.bashrcシェルの先頭から呼び出されるので、manページが付けられた動作とページが付けられていない動作を非常にきれいな方法で取得できます。

man man       # with color and paging
man man | cat # with color and without paging

less私はこれがttyであることを確認しstdout、ttyでない場合はttyコードを印刷したり、出力をページしないようにハードコーディングされているので動作すると思います。

おすすめ記事