Kann 'less -F' sinnvoll mit der Termcap-Initialisierung kombiniert werden?

7

less -FSchließt weniger, wenn der Inhalt auf einen Bildschirm passt. Wenn ich jedoch die Termcap-Initialisierung verwende, dh nicht verwende -Xund die Datei auf den Bildschirm passt, wird nichts gedruckt, da weniger Inhalte angezeigt werden und festgestellt werden, dass sie auf den Bildschirm passen, der Bildschirm während der Deinitialisierung verlassen und gelöscht wird.

Dies kann wie folgt demonstriert werden (setzt eine leere LESSVariable voraus ):

$ echo foo > new_file
$ cat new_file
foo
$ less -X -F new_file
foo
$ less -F new_file
$

Ich mag Termcap-Funktionen, sie ermöglichen unter anderem das Scrollen mit dem Mausrad, sodass ich sie definitiv nicht verwenden möchte -X. Gibt es immer noch eine Möglichkeit, weniger zu beenden, wenn der Inhalt auf den Bildschirm passt (und sich im Grunde so verhält cat)?

musiKk
quelle

Antworten:

6

Hier ist ein relevanter Auszug aus lessden FAQ :

Kann weniger den Bildschirm in Ruhe lassen, wenn er beendet wird?

Wenn weniger startet, sendet es die Termcap-Zeichenfolge "ti" an das Terminal, und wenn es beendet wird, sendet es die Zeichenfolge "te". Was genau die Zeichenfolge "te" bewirkt, hängt vom verwendeten System, dem Terminaltyp und Ihrer Version von termcap ab. Auf einigen Systemen macht es nichts; Bei anderen wird der Bildschirm auf den Zustand zurückgesetzt, in dem er sich befand, als weniger gestartet wurde, wodurch die letzte Seite der Datei, die weniger angezeigt wurde, vom Bildschirm gelöscht wurde.

Wenn Ihnen das Verhalten von "te" auf Ihrem System nicht gefällt, können Sie das Senden der Zeichenfolgen "ti" und "te" deaktivieren, indem Sie mit der Option -X weniger aufrufen. Leider hat dies manchmal andere Nebenwirkungen, da die Zeichenfolgen "ti" / "te" möglicherweise andere erforderliche Aufgaben ausführen. Bei einigen Terminals führt das Deaktivieren von "ti" und "te" beispielsweise dazu, dass die Pfeiltasten nicht mehr funktionieren.

Wenn Sie möchten, dass "te" etwas anderes tut (z. B. den Bildschirm wiederherstellen, wenn dies noch nicht geschehen ist), müssen Sie herausfinden, wie Sie die Termcap oder Terminfo für Ihr Terminal auf Ihrem System ändern können. Leider wird dies auf verschiedenen Systemen unterschiedlich durchgeführt, sodass Sie die Dokumentation für Ihr System überprüfen müssen.

Untersuchungen führen dazu, dass die Termcap-Funktionen "ti" und "te" in terminfo als "smcup" und "rmcup" bezeichnet werden. Dies ist ein moderneres Termcap-Äquivalent.

Sie können sehen, wie Ihr Terminal ( $TERMwahrscheinlich xterm) konfiguriert ist mit:

infocmp -1  # which will print out capabilites one per line

Sie können die Bedeutung von Sequenzen mithilfe einer VT100-Steuerzeichenreferenz entschlüsseln .

Wenn Sie die Funktionen "smcup" und "rmcup" von Ihrem Terminal entfernen:

infocmp -1 | sed -r '/[sr]mcup.*/d' > new-terminfo-for-$TERM

und lassen Sie dann die terminfo-Bibliothek wissen, dass dies die neue, bevorzugte Funktionsspezifikation für $ TERM ist.

tic new-terminfo-for-$TERM
# you reverse this with `rm -ri ~/.terminfo`

Sie werden das bemerken less" alternative Bildschirm nicht mehr gelöscht wird (weil es nie betreten worden war). Aber die Maus funktioniert auch nicht mehr .

Wenn Sie mit "rmcup" -Steuerzeichenfolgen experimentieren und es herausfinden, lassen Sie es mich bitte wissen!

Aktualisieren:

Eine funktionierende Alternative besteht darin, weniger als eine Funktion zu umbrechen , die cat ausführt, wenn die Datei der Terminalhöhe entspricht ( fügen Sie diese in Ihre .bashrc ein ):

less () {
    # When single file argument, and file small enough, cat it
    if [ $# = 1 ] && [ -f "$1" ] && [ $(wc -l "$1" | cut -d' ' -f1) -le $((${LINES:-0} - 3)) ]; then
        cat "$@"
    else
        command less "$@"
    fi
}
K3 --- rnc
quelle
Ich mache das seit mehreren Jahren und kann es als Lösung uneingeschränkt empfehlen. Warum ich schreibe, ist die Klärung Ihres letzten Satzes. Ist das ein „lassen Sie mich wissen , ob dies für Sie gearbeitet“ zu @musiKk oder ist es zu einem anderen subtilen Problem im Zusammenhang mit smcupund rmcupdass Sie noch nicht gelöst?
Roaima
@roaima, das Problem ist, dass das Mausrad nicht mehr funktioniert. Ich mag das Scrollen mit dem Mausrad und das OP, wie er sagt.
K3 --- rnc
1

Für langsame Eingaben wie git log -Gregexmöchten Sie:

A) Zeilen, die auf dem Hauptbildschirm angezeigt werden, sobald sie eingehen, und dann zum alternativen Bildschirm wechseln, sobald ein Bildlauf erforderlich ist (sodass die erste $LINESAusgabe immer in Ihrem Bildlauf angezeigt wird); Wenn ja, fahren Sie mit der zweiten Antwort von Gilles auf eine ähnliche Frage fort .

B) Zeilen, die auf dem alternativen Bildschirm angezeigt werden sollen, aber den alternativen Bildschirm verlassen und die Zeilen auf dem Hauptbildschirm drucken, wenn sich ein Bildlauf als unnötig herausstellt (sodass in Ihrem Bildlauf keine Ausgabe angezeigt wird, wenn ein Bildlauf erforderlich war); Wenn ja, schauen Sie sich meine Antwort auf eine ähnliche Frage an .

John Mellor
quelle