Unterstützt `less` oder `more` den ANSI-Escape `\x1b[2K` (erase_line)?

Unterstützt `less` oder `more` den ANSI-Escape `\x1b[2K` (erase_line)?

Im Grunde möchte ich mein Terminal animieren, aber da der Text zu lang ist, brauche ich einen Pager. Sagen wir einfach, ich möchte meine Textfarbe regelmäßig in Less ändern. Ist das möglich?

Antwort1

BEARBEITENDie Antworten vonvonbrandUndThomas Dickeysind technisch genauer.

lessunterstützt reine ANSI-Escapes, wenn die -rOption verwendet wird. Außerdem wird „Erase in line“ unterstützt.

Sie werden jedoch keine Animation sehen. Beispiel:

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

Es wird nur gedruckt bar.

moreübergibt standardmäßig ANSI-Escapezeichen, unterstützt aber, soweit ich es getestet habe, keine Zeilenbearbeitung.

Siehe auchdiese Stackoverflow-Antwort zu den Unterschieden lesszwischen moreundmost.

Antwort2

Das Löschen der Zeile hat nur eine indirekte Beziehung zum Ändern der Terminalfarben: Wenn Sie dieHintergrundFarbe, dann werden viele Terminals (Linux-Konsole, rxvt, xterm sowie Programme, die eines dieser imitieren) den freigelegten Bereich des Hintergrunds mit dieser Farbe einfärben.

lessverwendet zwar einige Löschvorgänge, aber nicht \x1b[2K. Beim Lesen derQuelleverwendet mehrere Funktionen über die Termcap-Schnittstelle. Die wichtigsten Teile sind imterminfo(5)Handbuchseite:

   clr_bol                   el1    cb   Clear to beginning
                                         of line
   clr_eol                   el     ce   clear to end of line
                                         (P)

Das heißt, \x1b[Kund \x1b[Kfür el1bzw. el. Es gibt keine herkömmliche Termcap-Funktion el2, und (es sei denn, Sie weisen mit der Option oder lessan, den Inhalt einer Datei einfach durchzureichen ) sendet kein .-r-Rless\x1b[2K

Dasselbe gilt morebeispielsweise für , wie in derutil-linuxPaket: Es verwendet nur Funktionen von Termcap. Im Gegensatz zu lesshat morees keine Option, nicht druckbare Zeichen direkt an das Terminal zu senden.

Wenn Sie die Option -roder von verwenden , müssen Sie bedenken, dass es-Rlessbegrenzt: lessweiß nicht (oder kümmert sich nicht darum), was diese Fluchten bewirken. Von derHandbuchseite:

-roder--raw-control-chars
Ursachen"roh"Steuerzeichen, die angezeigt werden sollen. Standardmäßig werden Steuerzeichen in der Caret-Notation angezeigt. Beispielsweise wird ein Control-A (Oktal 001) als „^A“ angezeigt. Warnung: wenn die -r Option verwendet wird,less kann nichtBehalten Sie das tatsächliche Erscheinungsbild des Bildschirms im Auge (da dies davon abhängt, wie der Bildschirm auf die einzelnen Steuerzeichentypen reagiert). Dadurch können verschiedene Anzeigeprobleme auftreten, z. B. dass lange Zeilen an der falschen Stelle aufgeteilt werden.

Antwort3

Auf die Escape-Sequenzen reagiert normalerweise das TTY (es sei denn, das laufende Programm legt fest, dass es diese nicht berücksichtigt. In diesem Fall kann das Programm dies selbst tun). more(1)Es führt eine eher primitive Bildschirmumschreibung durch (es reicht wirklich aus, Zeilen in Bildschirmlänge zu schreiben und auf einen Tastendruck zu warten), daher würde ich annehmen, dass es die Eingaben einfach durchlässt. less(1)Es muss ein Backup durchführen, sodass eine detailliertere Steuerung des Bildschirms erforderlich ist.

verwandte Informationen