`less` または `more` は ansi エスケープ `\x1b[2K`(erase_line) をサポートしますか?

`less` または `more` は ansi エスケープ `\x1b[2K`(erase_line) をサポートしますか?

デフォルトでは端末にアニメーションを適用したいのですが、テキストが長すぎるため、ポケットベルが必要です。定期的にテキストの色を変更したいとしましょう。可能ですか?

答え1

編集する答えは次のとおりです。電話ブランドそしてトーマス・ディッキー技術的により正確です。

less-rこのオプションを使用すると、raw ANSI エスケープがサポートされます。オンライン削除もサポートしています。

しかし、アニメーションは見ることができません。たとえば、

echo -e "foo\x1b[1G\x1b[2Kbar" > test.ansi
less -r test.ansi

のみ印刷されますbar

moreANSIエスケープはデフォルトで渡されますが、私がテストした行の編集はサポートしていません。

また、見ることができますこのStackoverflowの答えはlessmoremost

答え2

この行の消去は、端末の色の変更と間接的にのみ関連します。背景色を選択すると、多くの端末(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それぞれです。従来のtermcap機能はありません(ファイルの内容のみを渡すために使用またはオプションを指定しない限り)。\x1b[Kel1elel2less-r-Rless\x1b[2K

moreたとえば、次のような場合も同様です。util-linuxパッケージ:termcapの機能のみを使用します。lessとは異なり、more印刷されない文字を端末に直接送信するオプションはありません。

-rまたは-Rオプションを使用する場合は、次のことをless覚えておく必要があります。限られたlessエスケープ文字が何をしているのかわかりません(またはあまり気にしません)。 ~からマニュアルページ:

-rまたは--raw-control-chars
理由「生の」表示する制御文字です。デフォルトは、キャレットを使用して制御文字を表示することです。たとえば、control-A(8進数001)は「^ A」と表示されます。 警告する-r このオプションを使用するとless できない画面が実際にどのように見えるかを追跡します(画面が各制御文字タイプにどのように反応するかによって異なります)。その結果、長い行が間違った場所で分割されるなど、さまざまな表示問題が発生する可能性があります。

答え3

通常、エスケープシーケンスに反応するのはttyです(実行中のプログラムがそれを尊重しないように設定していない場合は、プログラム自体がそうすることができます)。more(1)非常に原始的な画面を書き換えるので(実際には画面の長さの行を作成してキーを押すのを待つのに十分です)、入力だけを通過するようです。less(1)バックアップが必要なため、画面のより細かい制御が必要です。

関連情報