%20%E3%82%92%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
基本的に、ターミナルをアニメーション化したいのですが、テキストが長すぎるため、ページャーが必要です。less でテキストの色を定期的に変更したいとします。可能ですか?
答え1
編集回答者フォンブランドそしてトーマス・ディッキー技術的にはより正確です。
less
オプションを使用すると、生の ANSI エスケープがサポートされます-r
。また、インライン消去もサポートされます。
ただし、アニメーションは表示されません。例:
echo -e "foo\x1b[1G\x1b[2Kbar" > test.ansi
less -r test.ansi
のみ印刷されますbar
。
more
デフォルトでは ANSI エスケープを渡しますが、私がテストしたところによると行編集はサポートされていません。
答え2
行をクリアすることは、端末の色の変更とは間接的な関係しかありません。背景color を指定すると、多くの端末 (Linux コンソール、rxvt、xterm、およびこれらを模倣したプログラム) が、その色を使用して背景のクリアされた領域に色を付けます。
less
いくつかのクリア操作は使用しますが\x1b[2K
、ソース、termcapインターフェースを使用したいくつかの機能を使用します。最も関連のある部分は、用語情報(5)マニュアルページ:
clr_bol el1 cb Clear to beginning
of line
clr_eol el ce clear to end of line
(P)
つまり、\x1b[K
および\x1b[K
はそれぞれ、el1
および ですel
。従来の termcap 機能 はなくel2
、 (またはオプションless
を使用してファイルの内容をそのまま渡すように指示しない限り)は を送信しません。-r
-R
less
\x1b[2K
についても同様でありmore
、例えば、util-linux
パッケージ: termcap の機能のみを使用します。とは異なりless
、more
非表示文字を端末に直接送信するオプションはありません。
の-r
またはオプションを使用する場合は、-R
less
限定:less
それらのエスケープが何をするのかは知らない(あるいはあまり気にしない)。マニュアルページ:
-r
または--raw-control-chars
原因"生"表示される制御文字。デフォルトでは、キャレット表記を使用して制御文字が表示されます。たとえば、制御文字 A (8 進数 001) は "^A" として表示されます。 警告:-r
オプションを使用すると、less
できない画面の実際の表示を追跡します (これは、画面が各タイプの制御文字にどのように応答するかによって異なるため)。そのため、長い行が間違った場所で分割されるなど、さまざまな表示上の問題が発生する可能性があります。
答え3
エスケープ シーケンスに反応するのは通常 tty です (実行中のプログラムがエスケープ シーケンスを尊重しないように設定しない限り、その場合はプログラム自体がそうするかもしれません)。 は、more(1)
かなり原始的な画面書き換え (画面の長さの行を書き出してキーが押されるのを待つだけで十分) を行うので、入力をそのまま渡すだけだと思います。 はless(1)
バックアップする必要があるので、画面をより詳細に制御する必要があります。