less
のソースコードを調べていると、含まれているマンページ(less.man
)が太字のテキストを表示するためにターミナルエスケープコードを使用していることに気付きました。
^[[1mNAME^[[0m
less - opposite of more
^[[1mSYNOPSIS^[[0m
^[[1mless -?^[[0m
^[[1mless --help^[[0m
^[[1mless -V^[[0m
^[[1mless --version^[[0m
^[[1mless [-[+]aABcCdeEfFgGiIJKLmMnNqQrRsSuUVwWX~]^[[0m
生成に使用されるコマンドは明らかにnroff -man
です:
$ head Makefile.aut
# Makefile for authoring less.
EMAIL = [email protected]
HOMEPAGE = http://www.greenwoodsoftware.com/less
Shell = /bin/sh
RCS = rcs
NROFF = nroff -man
それでも、nroff -man less.nro
を実行すると、バックスペースを使用して(通常の)マンページ出力が得られます。
N^HNA^HAM^HME^HE
less - opposite of more
S^HSY^HYN^HNO^HOP^HPS^HSI^HIS^HS
l^Hle^Hes^Hss^Hs -^H-?^H?
l^Hle^Hes^Hss^Hs -^H--^H-h^Hhe^Hel^Hlp^Hp
l^Hle^Hes^Hss^Hs -^H-V^HV
l^Hle^Hes^Hss^Hs -^H--^H-v^Hve^Her^Hrs^Hsi^Hio^Hon^Hn
最初のフォームを生成するにはどうすればよいですか?
「最初の形式」は... groff
の機能です。 「nroff」がgroff
のラッパーでない場合は、2番目の形式のみが表示されます。
この機能は、マニュアルページで参照されています grotty
(タイプライターのようなデバイス用のgroffドライバー):
デフォルトでは、grottyはSGRエスケープシーケンス(ISO 6429から、ANSIカラーエスケープとも呼ばれます)を発行して、テキスト属性(太字、斜体、色)を変更します。これにより、8つの異なる背景の背景の地色と前景色を使用できます。さらに、太字と斜体の属性を同時に使用できます(BIフォントを使用)。
実際には、うまく機能しません。たとえば、同じコメント(これらのシーケンスの後処理)がどのようになっているのかを確認してください ここで誤ってレンダリングされます :
デフォルトでは、grottyはSGRエスケープシーケンス(ISO 6429から、ANSIカラーエスケープとも呼ばれます)を発行して、テキスト属性(太字、斜体、色)を変更します。これにより、8つの異なるM [green] backgroundM []およびm [red] foregroundm []の色を使用できます。さらに、太字と斜体の属性をBI]同時に](BIフォントを使用して)使用できます。
そのため、一部の開発者はそれを使用しないことを選択します(たとえば、 このディスカッション Emacsメーリングリストから)。
ただし、マニュアルページに記載されているように「デフォルト」。したがって、groffがある場合は、それらのエスケープシーケンスを生成しているはずです。
パッケージャは、パッチを適用してプログラムを変更できます。 @muruによるコメントは、Debianのバージョンについて言及しています( バグレポート および パッケージページ を参照)。パッケージの変更ログには次のように書かれています。
-- Colin Watson <[email protected]> Sat, 27 Jul 2002 18:41:46 +0100
groff (1.18-1) unstable; urgency=low
* Disable the new ANSI colour/bold/underline escapes in nroff mode,
because most pagers either fail to cope with it or need special options
to do so. It can be re-enabled by editing /etc/groff/man.local and
/etc/groff/mdoc.local, or by setting the environment variable GROFF_SGR
to something non-empty.
ただし、groffソースはGROFF_SGR
;について言及していません。 GROFF_NO_SGR
への参照のみがあります:
./NEWS:1108: for the GROFF_NO_SGR environment variable also.
./NEWS:1450:o If the environment variable GROFF_NO_SGR is set, SGR output is disa...
./PROBLEMS:33: 1. Set the GROFF_NO_SGR environment variable.
./doc/webpage.ms:1920:. URL #GROFF_NO_SGR GROFF_NO_SGR
./doc/webpagewebpage.ms:1922:. nop GROFF_NO_SGR
./doc/webpagewebpage.ms:2437:.TAG GROFF_NO_SGR
./doc/webpagewebpage.ms:2439:If the environment variable GROFF_NO_SGR is set, SGR output is
./src/devices/grotty/grotty.man:126:.B GROFF_NO_SGR
./src/devices/grotty/grotty.man:394:.B GROFF_NO_SGR
./src/devices/grotty/tty.cpp:864: if (getenv("GROFF_NO_SGR"))
変更ログ(ChangeLog.118)は手がかりを与えません:
2002-02-12 Werner LEMBERG <[email protected]>
* src/libs/libgroff/Makefile.sub (snprintf.o): Don't use
$(COMPILE.c) to not include groff's assert.h.
* src/drivers/grotty/tty.cc (main): Add GROFF_NO_SGR environment
variable.
* NEWS, src/drivers/grotty/grotty.man: Document it.
GROFF_NO_SGR
を設定しても、SGRシーケンスは提供されません(マンページは正しいです)。 Debianの変更ログコメントは、/etc/groff/man.local
からのこのチャンクを参照しています。ここで、DebianはGROFF_SGR
変数のチェックを追加しました。
. \" Debian: Disable the use of SGR (ANSI colour) escape sequences by
. \" grotty.
. if '\V[GROFF_SGR]'' \
. output x X tty: sgr 0
環境変数を設定すると、太字などのSGRシーケンスが生成されます。